From d703046f633786e1c2b7fcc06e784b8f3e6169b0 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 13 Aug 2024 14:47:12 +0800 Subject: [PATCH 001/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 49 ++- gamesrv/clawdoll/scene_clawdoll.go | 28 +- gamesrv/clawdoll/scenepolicy_clawdoll.go | 28 +- machine/machinedoll/machinemgr.go | 23 +- protocol/dollmachine/dollmachine.pb.go | 537 ----------------------- protocol/dollmachine/dollmachine.proto | 43 -- protocol/machine/machine.pb.go | 157 +++++-- protocol/machine/machine.proto | 6 + public | 2 +- 9 files changed, 226 insertions(+), 647 deletions(-) delete mode 100644 protocol/dollmachine/dollmachine.pb.go delete mode 100644 protocol/dollmachine/dollmachine.proto diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index 92d56e6..61d61a9 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -4,22 +4,65 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "sync" ) -var MachineMap = make(map[int]string) +var MachineMap = make(map[int]*DollMachine) +var MachineMapLock = sync.Mutex{} + +type DollMachine struct { + Id int + MachineStatus int32 //娃娃机链接状态 0:离线 1:在线 + Status bool //是否空闲 + VideoAddr string +} func MSDollMachineList(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("TestHandler %v", data) - MachineMap = make(map[int]string) + MachineMap = make(map[int]*DollMachine) if msg, ok := data.(*machine.MSDollMachineList); ok { for i, info := range msg.Data { - MachineMap[i+1] = info.VideoAddr + MachineMap[i+1] = &DollMachine{ + Id: i + 1, + Status: false, + VideoAddr: info.VideoAddr, + MachineStatus: 1, + } logger.Logger.Tracef("MachineMap[%v] = %v", i, info.VideoAddr) } } return nil } +// 获取空闲娃娃机标识 +func GetFreeDollMachineId() int { + // 获取互斥锁 + MachineMapLock.Lock() + defer MachineMapLock.Unlock() + for i, v := range MachineMap { + if v.Status == false { + v.Status = true + return i + } + } + return 0 +} + +// 获取指定娃娃机链接状态 +func GetDollMachineStatus(id int) int32 { + return MachineMap[id].MachineStatus +} + +func MSUpdateDollMachineStatusHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("MSUpdateDollMachineStatusHandler %v", data) + if msg, ok := data.(*machine.MSUpdateDollMachineStatus); ok { + MachineMap[int(msg.Id)].MachineStatus = msg.Status + logger.Logger.Tracef("更新娃娃机连接状态 id = %d,status= %d", msg.Id, msg.GetStatus()) + } + return nil +} func init() { netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineList) + //更新娃娃机链接状态 + netlib.Register(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), &machine.MSUpdateDollMachineStatus{}, MSUpdateDollMachineStatusHandler) } diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index fd6a518..b663a30 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -1,13 +1,14 @@ package clawdoll import ( - "mongo.games.com/game/protocol/clawdoll" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/proto" + "mongo.games.com/game/protocol/clawdoll" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/srvlib" ) type PlayerData struct { @@ -41,9 +42,12 @@ type SceneEx struct { PlayerBackup map[int32]*PlayerData // 本局离场玩家数据备份 seats []*PlayerEx // 本局游戏中的玩家状态数据 - RoundId int // 局数,第几局 - robotNum int // 参与游戏的机器人数量 - logid string + RoundId int // 局数,第几局 + robotNum int // 参与游戏的机器人数量 + logid string + machineId int //娃娃机ID + machineConn *netlib.Session //娃娃机链接 + machineStatus int32 //娃娃机链接状态 0:离线 1:在线 } // 游戏是否能开始 @@ -203,3 +207,15 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { BeUnderAgentCode: p.BeUnderAgentCode, } } + +// 向娃娃机主机发送消息 +func (this *SceneEx) SendToMachine(pid int, msg interface{}) { + if this.machineConn == nil { + this.machineConn = srvlib.ServerSessionMgrSington.GetSession(1, 10, 1001) + } + if this.machineConn != nil { + this.machineConn.Send(pid, msg) + } else { + logger.Logger.Error("MachineConn is nil !") + } +} diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 46bc199..4b8ef1e 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" "time" @@ -61,15 +62,38 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { if s.SceneState != nil { s.SceneState.OnTick(s) } + + sceneEx, ok := s.ExtraData.(*SceneEx) + if ok { + if sceneEx.machineId == 0 { + sceneEx.machineId = action.GetFreeDollMachineId() + } + if sceneEx.machineId != 0 { + machineStatus := action.GetDollMachineStatus(sceneEx.machineId) + if machineStatus == 0 { + //链接状态不可用 踢出所有玩家 + for _, p := range sceneEx.players { + sceneEx.delPlayer(p.Player) + } + sceneEx.machineStatus = 0 + logger.Logger.Trace("娃娃机离线,当前场景暂停服务!") + //通知客户单房间不可用 + } else { + if sceneEx.machineStatus == 0 { + sceneEx.machineStatus = machineStatus + //通知客户端房间可用 + } + } + } + } + } func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { if s == nil || p == nil { return } - logger.Logger.Trace("(this *PolicyClawdoll) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.SnId) - if sceneEx, ok := s.ExtraData.(*SceneEx); ok { pos := -1 for i := 0; i < sceneEx.GetPlayerNum(); i++ { diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index eaece9c..196850e 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -89,7 +89,7 @@ func (this *MachineManager) StartHeartbeat(id int, conn *net.Conn, addr string) delete(ConnMap, id) this.DelConnMap[id] = addr //通知游戏服 - this.UpdateToGameServer() + this.UpdateToGameServer(id, 0) fmt.Println("删除链接!!!!!!addr = ", addr) go timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { this.ReConnect() @@ -105,7 +105,6 @@ func (this *MachineManager) StartHeartbeat(id int, conn *net.Conn, addr string) func (this *MachineManager) ReConnect() bool { fmt.Println("================重连============") delIds := []int{} - status := false for id, addr := range this.DelConnMap { conn, err := net.DialTimeout("tcp", addr, 5*time.Second) if err != nil { @@ -113,28 +112,20 @@ func (this *MachineManager) ReConnect() bool { } ConnMap[id] = conn delIds = append(delIds, id) - status = true + this.UpdateToGameServer(id, 1) } for _, id := range delIds { delete(this.DelConnMap, id) fmt.Println("重新链接成功!!!!!!id = ", id) } - if status { - this.UpdateToGameServer() - return true - } return false } -func (this *MachineManager) UpdateToGameServer() { - msg := &machine.MSDollMachineList{} - for i, _ := range ConnMap { - info := &machine.DollMachine{} - info.Id = int32(i) - info.VideoAddr = "www.baidu.com" - msg.Data = append(msg.Data, info) - } - SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) +func (this *MachineManager) UpdateToGameServer(id int, status int32) { + msg := &machine.MSUpdateDollMachineStatus{} + msg.Status = status + msg.Id = int32(id) + SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), msg) } func SendToGameServer(pid int, msg interface{}) { diff --git a/protocol/dollmachine/dollmachine.pb.go b/protocol/dollmachine/dollmachine.pb.go deleted file mode 100644 index 6624f68..0000000 --- a/protocol/dollmachine/dollmachine.pb.go +++ /dev/null @@ -1,537 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1-devel -// protoc v3.19.4 -// source: dollmachine.proto - -package dollmachine - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -//S-GAME M-娃娃机主机 -//娃娃机协议 -type DollMachinePacketID int32 - -const ( - DollMachinePacketID_PACKET_SMDollMachineZero DollMachinePacketID = 0 - DollMachinePacketID_PACKET_SMDollMachineMove DollMachinePacketID = 3001 - DollMachinePacketID_PACKET_SMDollMachineGrab DollMachinePacketID = 3002 - DollMachinePacketID_PACKET_MSDollMachineGrab DollMachinePacketID = 3003 - DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 3004 -) - -// Enum value maps for DollMachinePacketID. -var ( - DollMachinePacketID_name = map[int32]string{ - 0: "PACKET_SMDollMachineZero", - 3001: "PACKET_SMDollMachineMove", - 3002: "PACKET_SMDollMachineGrab", - 3003: "PACKET_MSDollMachineGrab", - 3004: "PACKET_MSDollMachineList", - } - DollMachinePacketID_value = map[string]int32{ - "PACKET_SMDollMachineZero": 0, - "PACKET_SMDollMachineMove": 3001, - "PACKET_SMDollMachineGrab": 3002, - "PACKET_MSDollMachineGrab": 3003, - "PACKET_MSDollMachineList": 3004, - } -) - -func (x DollMachinePacketID) Enum() *DollMachinePacketID { - p := new(DollMachinePacketID) - *p = x - return p -} - -func (x DollMachinePacketID) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DollMachinePacketID) Descriptor() protoreflect.EnumDescriptor { - return file_dollmachine_proto_enumTypes[0].Descriptor() -} - -func (DollMachinePacketID) Type() protoreflect.EnumType { - return &file_dollmachine_proto_enumTypes[0] -} - -func (x DollMachinePacketID) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DollMachinePacketID.Descriptor instead. -func (DollMachinePacketID) EnumDescriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{0} -} - -//移动 -type SMDollMachineMove struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` //娃娃机标识 - Direction int32 `protobuf:"varint,3,opt,name=Direction,proto3" json:"Direction,omitempty"` // 1-前 2-后 3-左 4-右 -} - -func (x *SMDollMachineMove) Reset() { - *x = SMDollMachineMove{} - if protoimpl.UnsafeEnabled { - mi := &file_dollmachine_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SMDollMachineMove) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SMDollMachineMove) ProtoMessage() {} - -func (x *SMDollMachineMove) ProtoReflect() protoreflect.Message { - mi := &file_dollmachine_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SMDollMachineMove.ProtoReflect.Descriptor instead. -func (*SMDollMachineMove) Descriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{0} -} - -func (x *SMDollMachineMove) GetSnid() int32 { - if x != nil { - return x.Snid - } - return 0 -} - -func (x *SMDollMachineMove) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SMDollMachineMove) GetDirection() int32 { - if x != nil { - return x.Direction - } - return 0 -} - -//下抓 -type SMDollMachineGrab struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TypeId int32 `protobuf:"varint,1,opt,name=TypeId,proto3" json:"TypeId,omitempty"` //1-弱力抓 2 -强力抓 3-必出抓 - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` //娃娃机标识 - Snid int32 `protobuf:"varint,3,opt,name=Snid,proto3" json:"Snid,omitempty"` -} - -func (x *SMDollMachineGrab) Reset() { - *x = SMDollMachineGrab{} - if protoimpl.UnsafeEnabled { - mi := &file_dollmachine_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SMDollMachineGrab) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SMDollMachineGrab) ProtoMessage() {} - -func (x *SMDollMachineGrab) ProtoReflect() protoreflect.Message { - mi := &file_dollmachine_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SMDollMachineGrab.ProtoReflect.Descriptor instead. -func (*SMDollMachineGrab) Descriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{1} -} - -func (x *SMDollMachineGrab) GetTypeId() int32 { - if x != nil { - return x.TypeId - } - return 0 -} - -func (x *SMDollMachineGrab) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SMDollMachineGrab) GetSnid() int32 { - if x != nil { - return x.Snid - } - return 0 -} - -//返回下抓结果 -type MSDollMachineGrab struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` //娃娃机标识 - Result int32 `protobuf:"varint,3,opt,name=Result,proto3" json:"Result,omitempty"` //1-中奖 其他未中奖 -} - -func (x *MSDollMachineGrab) Reset() { - *x = MSDollMachineGrab{} - if protoimpl.UnsafeEnabled { - mi := &file_dollmachine_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MSDollMachineGrab) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MSDollMachineGrab) ProtoMessage() {} - -func (x *MSDollMachineGrab) ProtoReflect() protoreflect.Message { - mi := &file_dollmachine_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MSDollMachineGrab.ProtoReflect.Descriptor instead. -func (*MSDollMachineGrab) Descriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{2} -} - -func (x *MSDollMachineGrab) GetSnid() int32 { - if x != nil { - return x.Snid - } - return 0 -} - -func (x *MSDollMachineGrab) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *MSDollMachineGrab) GetResult() int32 { - if x != nil { - return x.Result - } - return 0 -} - -//返回所有娃娃机连接 -type MSDollMachineList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Data []*DollMachine `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` -} - -func (x *MSDollMachineList) Reset() { - *x = MSDollMachineList{} - if protoimpl.UnsafeEnabled { - mi := &file_dollmachine_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MSDollMachineList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MSDollMachineList) ProtoMessage() {} - -func (x *MSDollMachineList) ProtoReflect() protoreflect.Message { - mi := &file_dollmachine_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MSDollMachineList.ProtoReflect.Descriptor instead. -func (*MSDollMachineList) Descriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{3} -} - -func (x *MSDollMachineList) GetData() []*DollMachine { - if x != nil { - return x.Data - } - return nil -} - -type DollMachine struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //1-空闲 2-无法使用 -} - -func (x *DollMachine) Reset() { - *x = DollMachine{} - if protoimpl.UnsafeEnabled { - mi := &file_dollmachine_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DollMachine) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DollMachine) ProtoMessage() {} - -func (x *DollMachine) ProtoReflect() protoreflect.Message { - mi := &file_dollmachine_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DollMachine.ProtoReflect.Descriptor instead. -func (*DollMachine) Descriptor() ([]byte, []int) { - return file_dollmachine_proto_rawDescGZIP(), []int{4} -} - -func (x *DollMachine) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *DollMachine) GetStatus() int32 { - if x != nil { - return x.Status - } - return 0 -} - -var File_dollmachine_proto protoreflect.FileDescriptor - -var file_dollmachine_proto_rawDesc = []byte{ - 0x0a, 0x11, 0x64, 0x6f, 0x6c, 0x6c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x64, 0x6f, 0x6c, 0x6c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x22, 0x55, 0x0a, 0x11, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x4d, 0x6f, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x11, 0x53, 0x4d, 0x44, 0x6f, 0x6c, - 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x12, 0x16, 0x0a, 0x06, - 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x11, 0x4d, 0x53, 0x44, 0x6f, - 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x41, 0x0a, 0x11, 0x4d, 0x53, 0x44, - 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, - 0x6f, 0x6c, 0x6c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x35, 0x0a, 0x0b, - 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2a, 0xaf, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x4d, 0x6f, 0x76, 0x65, 0x10, 0xb9, 0x17, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x47, 0x72, 0x61, 0x62, 0x10, 0xba, 0x17, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, - 0x72, 0x61, 0x62, 0x10, 0xbb, 0x17, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x10, 0xbc, 0x17, 0x42, 0x2b, 0x5a, 0x29, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x64, 0x6f, 0x6c, 0x6c, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_dollmachine_proto_rawDescOnce sync.Once - file_dollmachine_proto_rawDescData = file_dollmachine_proto_rawDesc -) - -func file_dollmachine_proto_rawDescGZIP() []byte { - file_dollmachine_proto_rawDescOnce.Do(func() { - file_dollmachine_proto_rawDescData = protoimpl.X.CompressGZIP(file_dollmachine_proto_rawDescData) - }) - return file_dollmachine_proto_rawDescData -} - -var file_dollmachine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_dollmachine_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_dollmachine_proto_goTypes = []interface{}{ - (DollMachinePacketID)(0), // 0: dollmachine.DollMachinePacketID - (*SMDollMachineMove)(nil), // 1: dollmachine.SMDollMachineMove - (*SMDollMachineGrab)(nil), // 2: dollmachine.SMDollMachineGrab - (*MSDollMachineGrab)(nil), // 3: dollmachine.MSDollMachineGrab - (*MSDollMachineList)(nil), // 4: dollmachine.MSDollMachineList - (*DollMachine)(nil), // 5: dollmachine.DollMachine -} -var file_dollmachine_proto_depIdxs = []int32{ - 5, // 0: dollmachine.MSDollMachineList.data:type_name -> dollmachine.DollMachine - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_dollmachine_proto_init() } -func file_dollmachine_proto_init() { - if File_dollmachine_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_dollmachine_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SMDollMachineMove); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_dollmachine_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SMDollMachineGrab); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_dollmachine_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MSDollMachineGrab); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_dollmachine_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MSDollMachineList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_dollmachine_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DollMachine); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_dollmachine_proto_rawDesc, - NumEnums: 1, - NumMessages: 5, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_dollmachine_proto_goTypes, - DependencyIndexes: file_dollmachine_proto_depIdxs, - EnumInfos: file_dollmachine_proto_enumTypes, - MessageInfos: file_dollmachine_proto_msgTypes, - }.Build() - File_dollmachine_proto = out.File - file_dollmachine_proto_rawDesc = nil - file_dollmachine_proto_goTypes = nil - file_dollmachine_proto_depIdxs = nil -} diff --git a/protocol/dollmachine/dollmachine.proto b/protocol/dollmachine/dollmachine.proto deleted file mode 100644 index 450795e..0000000 --- a/protocol/dollmachine/dollmachine.proto +++ /dev/null @@ -1,43 +0,0 @@ -syntax = "proto3"; -package dollmachine; -option go_package = "mongo.games.com/game/protocol/dollmachine"; - -//S-GAME M-娃娃机主机 -//娃娃机协议 -enum DollMachinePacketID { - PACKET_SMDollMachineZero = 0; - PACKET_SMDollMachineMove = 3001; - PACKET_SMDollMachineGrab = 3002; - PACKET_MSDollMachineGrab = 3003; - PACKET_MSDollMachineList = 3004; -} - -//移动 -message SMDollMachineMove{ - int32 Snid = 1; - int32 Id = 2; //娃娃机标识 - int32 Direction = 3; // 1-前 2-后 3-左 4-右 -} - -//下抓 -message SMDollMachineGrab{ - int32 TypeId = 1;//1-弱力抓 2 -强力抓 3-必出抓 - int32 Id =2; //娃娃机标识 - int32 Snid = 3; -} - -//返回下抓结果 -message MSDollMachineGrab{ - int32 Snid = 1; - int32 Id = 2; //娃娃机标识 - int32 Result = 3;//1-中奖 其他未中奖 -} - -//返回所有娃娃机连接 -message MSDollMachineList{ - repeated DollMachine data = 1; -} -message DollMachine{ - int32 Id = 1; - int32 Status = 2; //1-空闲 2-无法使用 -} \ No newline at end of file diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 576911a..257ca48 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -24,12 +24,13 @@ const ( type DollMachinePacketID int32 const ( - DollMachinePacketID_PACKET_SMDollMachineZero DollMachinePacketID = 0 - DollMachinePacketID_PACKET_SMGameLinkSucceed DollMachinePacketID = 20000 - DollMachinePacketID_PACKET_SMDollMachinePerate DollMachinePacketID = 20001 - DollMachinePacketID_PACKET_SMDollMachineGrab DollMachinePacketID = 20002 - DollMachinePacketID_PACKET_MSDollMachineGrab DollMachinePacketID = 20003 - DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 20004 + DollMachinePacketID_PACKET_SMDollMachineZero DollMachinePacketID = 0 + DollMachinePacketID_PACKET_SMGameLinkSucceed DollMachinePacketID = 20000 + DollMachinePacketID_PACKET_SMDollMachinePerate DollMachinePacketID = 20001 + DollMachinePacketID_PACKET_SMDollMachineGrab DollMachinePacketID = 20002 + DollMachinePacketID_PACKET_MSDollMachineGrab DollMachinePacketID = 20003 + DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 20004 + DollMachinePacketID_PACKET_MSUpdateDollMachineStatus DollMachinePacketID = 20005 ) // Enum value maps for DollMachinePacketID. @@ -41,14 +42,16 @@ var ( 20002: "PACKET_SMDollMachineGrab", 20003: "PACKET_MSDollMachineGrab", 20004: "PACKET_MSDollMachineList", + 20005: "PACKET_MSUpdateDollMachineStatus", } DollMachinePacketID_value = map[string]int32{ - "PACKET_SMDollMachineZero": 0, - "PACKET_SMGameLinkSucceed": 20000, - "PACKET_SMDollMachinePerate": 20001, - "PACKET_SMDollMachineGrab": 20002, - "PACKET_MSDollMachineGrab": 20003, - "PACKET_MSDollMachineList": 20004, + "PACKET_SMDollMachineZero": 0, + "PACKET_SMGameLinkSucceed": 20000, + "PACKET_SMDollMachinePerate": 20001, + "PACKET_SMDollMachineGrab": 20002, + "PACKET_MSDollMachineGrab": 20003, + "PACKET_MSDollMachineList": 20004, + "PACKET_MSUpdateDollMachineStatus": 20005, } ) @@ -413,6 +416,62 @@ func (x *DollMachine) GetVideoAddr() string { return "" } +//更新娃娃机状态 +type MSUpdateDollMachineStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //1-空闲 0-无法使用 +} + +func (x *MSUpdateDollMachineStatus) Reset() { + *x = MSUpdateDollMachineStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MSUpdateDollMachineStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MSUpdateDollMachineStatus) ProtoMessage() {} + +func (x *MSUpdateDollMachineStatus) ProtoReflect() protoreflect.Message { + mi := &file_machine_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MSUpdateDollMachineStatus.ProtoReflect.Descriptor instead. +func (*MSUpdateDollMachineStatus) Descriptor() ([]byte, []int) { + return file_machine_proto_rawDescGZIP(), []int{6} +} + +func (x *MSUpdateDollMachineStatus) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *MSUpdateDollMachineStatus) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -441,24 +500,31 @@ var file_machine_proto_rawDesc = []byte{ 0x74, 0x61, 0x22, 0x3b, 0x0a, 0x0b, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x2a, - 0xd5, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, - 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, - 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, - 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, - 0x72, 0x61, 0x62, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x10, 0xa4, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x22, + 0x43, 0x0a, 0x19, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2a, 0xfd, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x10, 0xa5, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, + 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -474,15 +540,16 @@ func file_machine_proto_rawDescGZIP() []byte { } var file_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_machine_proto_goTypes = []interface{}{ - (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID - (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed - (*SMDollMachineoPerate)(nil), // 2: machine.SMDollMachineoPerate - (*SMDollMachineGrab)(nil), // 3: machine.SMDollMachineGrab - (*MSDollMachineGrab)(nil), // 4: machine.MSDollMachineGrab - (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList - (*DollMachine)(nil), // 6: machine.DollMachine + (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID + (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed + (*SMDollMachineoPerate)(nil), // 2: machine.SMDollMachineoPerate + (*SMDollMachineGrab)(nil), // 3: machine.SMDollMachineGrab + (*MSDollMachineGrab)(nil), // 4: machine.MSDollMachineGrab + (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList + (*DollMachine)(nil), // 6: machine.DollMachine + (*MSUpdateDollMachineStatus)(nil), // 7: machine.MSUpdateDollMachineStatus } var file_machine_proto_depIdxs = []int32{ 6, // 0: machine.MSDollMachineList.data:type_name -> machine.DollMachine @@ -571,6 +638,18 @@ func file_machine_proto_init() { return nil } } + file_machine_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MSUpdateDollMachineStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -578,7 +657,7 @@ func file_machine_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_machine_proto_rawDesc, NumEnums: 1, - NumMessages: 6, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 00b6124..642b236 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -12,6 +12,7 @@ enum DollMachinePacketID { PACKET_SMDollMachineGrab = 20002; PACKET_MSDollMachineGrab = 20003; PACKET_MSDollMachineList = 20004; + PACKET_MSUpdateDollMachineStatus = 20005; } //通知链接成功 message SMGameLinkSucceed{ @@ -45,4 +46,9 @@ message MSDollMachineList{ message DollMachine{ int32 Id = 1; string VideoAddr = 2; +} +//更新娃娃机状态 +message MSUpdateDollMachineStatus{ + int32 Id = 1; + int32 Status = 2; //1-空闲 0-无法使用 } \ No newline at end of file diff --git a/public b/public index 682e8f3..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 682e8f3ccf7d1056210c3ee68c9d1db271d9069d +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 49b0c6cc00bf2b8654066f4de28c39251036e3bc Mon Sep 17 00:00:00 2001 From: kxdd <88655@163.com> Date: Tue, 13 Aug 2024 15:33:44 +0800 Subject: [PATCH 002/153] =?UTF-8?q?=E4=B8=8B=E6=8A=93=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes gamerule/clawdoll/constants.go | 30 +++++++++++++++---- gamesrv/clawdoll/player_clawdoll.go | 2 +- gamesrv/clawdoll/scene_clawdoll.go | 2 +- gamesrv/clawdoll/scenepolicy_clawdoll.go | 36 +++++++++++++++++++++++ protocol/clawdoll/clawdoll.pb.go | 8 ++--- protocol/clawdoll/clawdoll.proto | 10 ++++--- 9 files changed, 72 insertions(+), 16 deletions(-) diff --git a/data/DB_GiftCard.dat b/data/DB_GiftCard.dat index 15600367ff42a73b75826e6378f02a3bde3a8661..96640b07f274cbbbda035ee3e52503c8356a73cb 100644 GIT binary patch delta 38 pcmcDtoFJjd$+57PP2j+^jZ8{x92eV|1-P_0AVMv+2JBXh3;@YB39kSE delta 38 pcmcDtoFJjd#&NNYS%6E4lVf2oo4|o-8=15?Aj}q919mG$1^~Z739kSE diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 9d60e50768e4d0593912d1e8d1e4301c7adb3da3..ddbdc0089ad7d52d32fd9b49f8b652cfbc000798 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUweP#j)52vj^QAm^;As1NDLJQ{n`>qhakM7Oq$h7O+EL3SkDJI0U8;Ik1}#(+9I3#Xg|BVCJKm%L#Tz!`eqIT(KN1V26Mm2-E;G5bOXTAExmR)L}4- WaCsDLp%OdCBA`dVFmo}`76JfeB0Mz! diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 95a4c56dab6ed585319eb9356a5fbd5cf6678ac7..e5e5cb7cb8e0a7edfd0f1ab65b428863d457a5f7 100644 GIT binary patch delta 238 zcmdn2xmk0=d#1@H93qpMnKuctaV+X(6JYe>;8+Nx546~BKE@o#2o%29#w@@E6~3_4 zXR`*YIHMp$RYPZ$7epWHs%v&daWffp#+O&67pgMK-hZNHfVo?1dSy;E-Gt6C)#+1IJaM9kP=hc*Q4&@lBds!XY^MC*L!$ MgSa+-;6Ka)0H{ee@c;k- diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index 5f361d0..735ee60 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -12,14 +12,32 @@ const ( ) const ( - ClawDollSceneWaitTimeout = time.Second * 2 //等待倒计时 - ClawDollSceneStartTimeout = time.Second * 6 //开始倒计时 - ClawDollSceneBilledTimeout = time.Second * 2 //结算 + ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时 + ClawDollSceneStartTimeout = time.Second * 15 //开始倒计时 + ClawDollSceneBilledTimeout = time.Second * 2 //结算 ) // 玩家操作 const ( - ClawDollPlayerOpScore = iota + 1 // 上分 - ClawDollPlayerOpGo // 下抓 - ClawDollPlayerOpMove // 移动方向 + ClawDollPlayerOpPayCoin = iota + 1 // 上分 投币 + ClawDollPlayerOpGo // 下抓 + ClawDollPlayerOpMove // 玩家操控动作 // 1-前 2-后 3-左 4-右 +) + +const ( + ButtonFront = iota + 1 /*前*/ + ButtonBack /*后*/ + ButtonLeft /*左*/ + ButtonRight /*右*/ +) + +const ( + MoveStop = 0 /*移动停止*/ + MoveStar = 1 /*移动开始*/ +) + +const ( + ClawWeak = iota + 1 //弱力抓 + ClawStrong //强力抓 + ClawGain //必出抓 ) diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index e7559b3..bba7f72 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -31,7 +31,7 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { return true } -func (this *PlayerEx) CanPayCoinByPos() bool { +func (this *PlayerEx) CanPayCoin() bool { return false } diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index b663a30..994eb68 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -92,7 +92,7 @@ func (e *SceneEx) playerOpPack(snId int32, opcode int, opRetCode clawdoll.OpResu SnId: proto.Int32(snId), OpCode: proto.Int32(int32(opcode)), Params: params, - OpRetCode: clawdoll.OpResultCode_OPRC_Success, + OpRetCode: opRetCode, } proto.SetDefaults(pack) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 4b8ef1e..0ef2a83 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -3,6 +3,7 @@ package clawdoll import ( "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" + "mongo.games.com/game/protocol/machine" "time" "mongo.games.com/goserver/core" @@ -444,6 +445,11 @@ func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, pa return true } + switch opcode { + case rule.ClawDollPlayerOpPayCoin: + + } + return false } @@ -503,6 +509,36 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para return true } + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return false + } + playerEx, ok := p.ExtraData.(*PlayerEx) + if !ok { + return false + } + + switch opcode { + case rule.ClawDollPlayerOpPayCoin: + // 投币检测 + if !playerEx.CanPayCoin() { + return false + } + sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) + + case rule.ClawDollPlayerOpGo: + + pack := &machine.SMDollMachineGrab{ + Snid: proto.Int32(playerEx.SnId), + Id: proto.Int32(int32(sceneEx.machineId)), + TypeId: proto.Int32(int32(1)), + } + + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack) + case rule.ClawDollPlayerOpMove: + + } + return false } diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index e395726..437be49 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -394,8 +394,8 @@ type CSCLAWDOLLOp struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OpCode int32 `protobuf:"varint,1,opt,name=OpCode,proto3" json:"OpCode,omitempty"` - Params []int64 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` + OpCode int32 `protobuf:"varint,1,opt,name=OpCode,proto3" json:"OpCode,omitempty"` //操作码 1:上分 投币 2:下抓 3:玩家操控动作 + Params []int64 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //操作参数 1:无 } func (x *CSCLAWDOLLOp) Reset() { @@ -522,8 +522,8 @@ type SCCLAWDOLLRoundGameBilled struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RoundId int32 `protobuf:"varint,1,opt,name=RoundId,proto3" json:"RoundId,omitempty"` //牌局ID - ClowResult int32 `protobuf:"varint,2,opt,name=ClowResult,proto3" json:"ClowResult,omitempty"` //抓取结果 + RoundId int32 `protobuf:"varint,1,opt,name=RoundId,proto3" json:"RoundId,omitempty"` //局ID + ClowResult int32 `protobuf:"varint,2,opt,name=ClowResult,proto3" json:"ClowResult,omitempty"` //抓取结果 0: 没有抓住, 1:抓住娃娃 Award int64 `protobuf:"varint,3,opt,name=Award,proto3" json:"Award,omitempty"` //获奖金额 Balance int64 `protobuf:"varint,4,opt,name=Balance,proto3" json:"Balance,omitempty"` //玩家余额 } diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index e7091b2..579ae56 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -56,8 +56,10 @@ message SCCLAWDOLLRoomInfo { //玩家操作 message CSCLAWDOLLOp { - int32 OpCode = 1; - repeated int64 Params = 2; + int32 OpCode = 1; //操作码 1:上分 投币 2:下抓 3:玩家操控动作 + repeated int64 Params = 2; //操作参数 1:无 + //操作参数 2:无 + //操作参数 3:Params[0] 1-前 2-后 3-左 4-右 } //玩家操作返回 @@ -70,8 +72,8 @@ message SCCLAWDOLLOp { //发送给客户端的数据 单局结算 message SCCLAWDOLLRoundGameBilled { - int32 RoundId = 1; //牌局ID - int32 ClowResult = 2; //抓取结果 + int32 RoundId = 1; //局ID + int32 ClowResult = 2; //抓取结果 0: 没有抓住, 1:抓住娃娃 int64 Award = 3; //获奖金额 int64 Balance = 4; //玩家余额 } From 775280e03f334423dab2d5ca2991f9b52a8232f3 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 11:33:03 +0800 Subject: [PATCH 003/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 132 ++++++++++++-------- machine/machinedoll/command.go | 195 +++++++++++++++++++++--------- machine/machinedoll/machinemgr.go | 166 ++++++++++++++----------- 3 files changed, 320 insertions(+), 173 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 36963fe..b67ff98 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -2,99 +2,131 @@ package action import ( "fmt" - "mongo.games.com/game/machine/machinedoll" - "mongo.games.com/game/protocol/machine" + "net" + "time" + + "mongo.games.com/goserver/core/basic" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" - "time" + "mongo.games.com/goserver/core/task" + "mongo.games.com/goserver/core/timer" + + "mongo.games.com/game/machine/machinedoll" + "mongo.games.com/game/protocol/machine" ) +type DoneFunc func(c net.Conn) + +func Process(conn *machinedoll.Conn, sec time.Duration, f1, f2 []DoneFunc, isSync bool) { + var ch chan struct{} + if isSync { + ch = make(chan struct{}, 1) + } + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + for _, v := range f1 { + v(conn) + } + if len(f2) > 0 { + timer.AfterTimer(func(h timer.TimerHandle, ud interface{}) bool { + Process(conn, 0, f2, nil, isSync) + if isSync { + ch <- struct{}{} + } + return true + }, nil, sec) + } else { + if isSync { + ch <- struct{}{} + } + } + return nil + }), nil).StartByFixExecutor(fmt.Sprintf("Machine%v", conn.Addr)) + if isSync { + <-ch + } +} + // 移动 func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("SMDollMachinePerateHandler %v", data) msg, ok := data.(*machine.SMDollMachineoPerate) if !ok { return nil } - conn := machinedoll.ConnMap[int(msg.Id)] - if conn == nil { + + conn, ok := machinedoll.MachineMgr.ConnMap[int(msg.GetId())] + if !ok || conn == nil { return nil } - if msg.Perate == 1 { + + switch msg.Perate { + case 1: //向前移动 - machinedoll.Backward(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.BackwardStop(conn) - } else if msg.Perate == 2 { + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Backward}, []DoneFunc{machinedoll.BackwardStop}, false) + case 2: //向后移动 - machinedoll.Forward(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.ForwardStop(conn) - } else if msg.Perate == 3 { + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Forward}, []DoneFunc{machinedoll.ForwardStop}, false) + case 3: //向左移动 - machinedoll.Left(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.LeftStop(conn) - } else if msg.Perate == 4 { + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Left}, []DoneFunc{machinedoll.LeftStop}, false) + case 4: //向右移动 - machinedoll.Right(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.RightStop(conn) - } else if msg.Perate == 5 { + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) + case 5: //投币 - machinedoll.Coin(conn) - machinedoll.Backward(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.BackwardStop(conn) + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Coin, machinedoll.Backward}, []DoneFunc{machinedoll.BackwardStop}, false) } return nil } // 下抓 func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("SMDollMachineGrabHandler %v", data) msg, ok := data.(*machine.SMDollMachineGrab) if !ok { return nil } - conn := machinedoll.ConnMap[int(msg.Id)] - if conn == nil { + + conn, ok := machinedoll.MachineMgr.ConnMap[int(msg.GetId())] + if !ok || conn == nil { return nil } - typeId := msg.TypeId - if typeId == 1 { - //弱抓 - machinedoll.WeakGrab(conn) - } else if typeId == 2 { - //强力抓 - machinedoll.Grab(conn) - } else if typeId == 3 { - //必中抓 - machinedoll.SetPower(conn) - time.Sleep(200 * time.Millisecond) - machinedoll.Grab(conn) + + send := func(net.Conn) { + session.Send(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.MSDollMachineGrab{ + Snid: msg.Snid, + Id: msg.GetId(), + Result: 1, + }) + } + + switch msg.GetTypeId() { + case 1: + //弱抓 + Process(conn, 0, []DoneFunc{machinedoll.WeakGrab}, []DoneFunc{send}, false) + case 2: + //强力抓 + Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) + case 3: + //必中抓 + Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.SetPower}, []DoneFunc{machinedoll.Grab, send}, false) } - //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.MSDollMachineGrab{ - Snid: msg.Snid, - Id: msg.GetId(), - Result: 1, - }) return nil } // 与游戏服务器连接成功,向游戏服务器推送所有娃娃机连接 func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interface{}) error { - logger.Logger.Trace("与游戏服务器连接成功!!\n") - fmt.Printf("与游戏服务器连接成功!!\n") + logger.Logger.Trace("与游戏服务器连接成功") //开始向游戏服务器发送娃娃机连接信息 msg := &machine.MSDollMachineList{} - for i, _ := range machinedoll.ConnMap { + for i, _ := range machinedoll.MachineMgr.ConnMap { info := &machine.DollMachine{} info.Id = int32(i) info.VideoAddr = "www.baidu.com" msg.Data = append(msg.Data, info) } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) - fmt.Printf("开始向游戏服务器发送娃娃机连接信息!\n", msg) + logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", msg) return nil } func init() { diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index ea8b82b..9e56bb7 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -110,6 +110,32 @@ func Grab(conn net.Conn) { fmt.Println("Failed to read response from server:", err) return } + instruction = []byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd} + _, err = conn.Write(instruction) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } +} + +// 必中抓 +func Grab2(conn net.Conn) { + //设置电压 + + instruction := []byte{0xAA, 0x05, 0x01, 0x50, 0x06, 0x01} + instruction = calculateChecksum(instruction) + _, err := conn.Write(instruction) + if err != nil { + fmt.Println("Failed to send command to server:", err) + return + } + // 读取服务端的响应 + buf := make([]byte, 1024) + _, err = conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } } // 弱抓aa 05 01 50 06 00 52 dd @@ -187,6 +213,7 @@ func OpenMusic(conn net.Conn) { instruction := []byte{0xAA, 0x33, 0x01, 0x06} instruction = append(instruction, data...) instruction = calculateChecksum(instruction) + //instruction[1] = byte(len(instruction) - 3) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -303,15 +330,11 @@ func queryBaseParam(conn net.Conn) { fmt.Println("n", n) } -// 设置强力 +// 设置出奖模式 func SetPower(conn net.Conn) { - data[3] = 0x00 - data[16] = 0x01 - data[17] = 0xE0 - data[18] = 0x13 - data[19] = 0x88 + data[3] = 0x01 fmt.Println("data.len = ", len(data)) - instruction := []byte{0xAA, 0x33, 0x01, 0x06} + instruction := []byte{0xAA, 0x04, 0x01, 0x06} instruction = append(instruction, data...) instruction = calculateChecksum(instruction) _, err := conn.Write(instruction) @@ -330,52 +353,114 @@ func SetPower(conn net.Conn) { } var data = []byte{ - 0x65, - 0x00, - 0x0F, - 0x02, - 0x0F, - 0x00, - 0x01, - 0x00, - 0x00, - 0x01, - 0xC8, - 0x00, - 0x7C, - 0x01, - 0x5A, - 0x00, - 0xE0, - 0x01, - 0xC8, - 0x00, - 0x14, - 0x32, - 0x32, - 0x50, - 0x34, - 0x08, - 0x00, - 0x00, - 0x00, - 0x00, - 0x78, - 0x00, - 0x32, - 0x02, - 0x00, - 0x00, - 0xC8, - 0x00, - 0x96, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0F, - 0x07, - 0x08, - 0x00, + 0x65, //0 几币几玩 + 0x00, //1 几币几玩占用位 + 0x1E, //2 游戏时间 + 0x00, //3 出奖模式 + 0x0F, //4 出奖概率 + 0x00, //5 出奖概率占用位 + 0x00, //6 空中抓物 0关闭 1开启 + 0x00, //7 连续投币赠送 范围0~100 + 0x00, //8 保夹次数 范围0~6, 6为无限次 + 0x01, //9 保夹赠送模式 0送游戏 1送中奖 2送游戏和中奖 + + 0x04, //10 强抓力电压 + 0x50, //11 强抓力电压占用位 + 0x7C, //12 中抓力电压 + 0x00, //13 中抓力电压占用位 + 0x5A, //14 弱抓力电压 + 0x00, //15 弱抓力电压占用位 + 0xE0, //16 中奖电压 + 0x01, //17 中奖电压占用位 + 0xC8, //18 强抓力时间 + 0x00, //19 强抓力时间占用位 + + 0x14, //20 放抓时间 + 0x32, //21 前后速度 + 0x32, //22 左右速度 + 0x50, //23 上下速度 + 0x34, //24 放线长度 + 0x08, //25 放线长度占用位 + 0x00, //26 礼品下放高度 + 0x00, //27 礼品下放高度占用位 + 0x00, //28 甩抓长度 + 0x00, //29 甩抓保护 + + 0x78, //30 甩抓电压 + 0x00, //31 甩抓电压占用位 + 0x32, //32 上拉保护 + 0x02, //33 天车自救时间 + 0x00, //34 下抓延时 + 0x00, //35 下抓延时占用位 + 0xC8, //36 抓物延时 + 0x00, //37 抓物延时占用位 + 0x96, //38 上停延时 + 0x00, //39 上停延时占用位 + + 0x00, //40 摇杆延时 + 0x00, //41 摇杆延时占用位 + 0x00, //42 抓物二收 + 0x00, //43 待机音乐开关 + 0x0F, //44 音量大小调整 + 0x07, //45 待机音乐选择 + 0x08, //46 游戏音乐选择 + 0x00, //47 概率队列自动 } + +/* +var data = []byte{ + 101, //0 几币几玩 + 0, //1 几币几玩占用位 + 30, //2 游戏时间 + 0, //3 出奖模式0无概率 1随机模式 2固定模式 3冠兴模式 + 15, //4 出奖概率 + 0, //5 出奖概率占用位 + 1, //6 空中抓物 0关闭 1开启 + 0, //7 连续投币赠送 范围0~100 + 0, //8 保夹次数 范围0~6, 6为无限次 + 1, //9 保夹赠送模式 0送游戏 1送中奖 2送游戏和中奖 + + 200, //10 强抓力电压 + 0, //11 强抓力电压占用位 + 124, //12 中抓力电压 + 1, //13 中抓力电压占用位 + 90, //14 弱抓力电压 + 0, //15 弱抓力电压占用位 + 224, //16 中奖电压 + 1, //17 中奖电压占用位 + 200, //18 强抓力时间 + 0, //19 强抓力时间占用位 + + 20, //20 放抓时间 + 50, //21 前后速度 + 50, //22 左右速度 + 80, //23 上下速度 + 52, //24 放线长度 + 8, //25 放线长度占用位 + 0, //26 礼品下放高度 + 0, //27 礼品下放高度占用位 + 0, //28 甩抓长度 + 0, //29 甩抓保护 + + 120, //30 甩抓电压 + 0, //31 甩抓电压占用位 + 50, //32 上拉保护 + 2, //33 天车自救时间 + 0, //34 下抓延时 + 0, //35 下抓延时占用位 + 200, //36 抓物延时 + 0, //37 抓物延时占用位 + 150, //38 上停延时 + 0, //39 上停延时占用位 + + 0, //40 摇杆延时 + 0, //41 摇杆延时占用位 + 0, //42 抓物二收 + 1, //43 待机音乐开关 + 15, //44 音量大小调整 + 7, //45 待机音乐选择 + 8, //46 游戏音乐选择 + 0, //47 概率队列自动 +} + +*/ diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index 196850e..db51ca6 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -3,38 +3,45 @@ package machinedoll import ( "encoding/json" "fmt" - "mongo.games.com/goserver/core/timer" - "os/signal" - "syscall" - - "mongo.games.com/game/protocol/machine" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" "net" "os" + "os/signal" "path/filepath" + "syscall" "time" + + "mongo.games.com/goserver/core/basic" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/module" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/task" + "mongo.games.com/goserver/srvlib" + + "mongo.games.com/game/protocol/machine" ) var GameConn *netlib.Session -var ConnMap = make(map[int]net.Conn) - -type MachineManager struct { - DelConnMap map[int]string -} var MachineMgr = &MachineManager{ + ConnMap: map[int]*Conn{}, DelConnMap: make(map[int]string), } +type Conn struct { + Id int + net.Conn + Addr string +} + +type MachineManager struct { + ConnMap map[int]*Conn + DelConnMap map[int]string +} + func (this *MachineManager) ModuleName() string { return "MachineManager" } -// 心跳间隔时间(秒) -const heartbeatInterval = 1 - func (this *MachineManager) Init() { var serverAddrs []string programDir, err := os.Getwd() @@ -62,70 +69,91 @@ func (this *MachineManager) Init() { fmt.Println("Failed to connect to server:", err) continue } - ConnMap[i+1] = conn - go this.StartHeartbeat(i+1, &conn, addr) + this.ConnMap[i+1] = &Conn{ + Id: i + 1, + Conn: conn, + Addr: addr, + } + } - fmt.Println("Connected to server:\n", ConnMap[1].RemoteAddr()) + fmt.Println("Connected to server:\n", this.ConnMap[1].RemoteAddr()) fmt.Println("投币请按Q!!!!") fmt.Println("w向前s向后a向左d向右 j强力抓取k弱力抓取!") // 监听 WASD 按键事件 - /* go listenKeyboardEvents(ConnMap[1]) + go listenKeyboardEvents(this.ConnMap[1]) + + // 监听中断信号,等待用户退出 + waitForUserExit() - // 监听中断信号,等待用户退出 - waitForUserExit()*/ } -func (this *MachineManager) StartHeartbeat(id int, conn *net.Conn, addr string) { - // 定期发送心跳包 - ticker := time.NewTicker(heartbeatInterval * time.Second) - defer ticker.Stop() - for { - select { - case <-ticker.C: - // 发送心跳包 - _, err := (*conn).Write([]byte("heartbeat")) +func (this *MachineManager) Update() { + var delConn []*Conn + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + for _, v := range this.ConnMap { + _, err := v.Write([]byte("heartbeat")) if err != nil { - fmt.Println("Failed to send heartbeat:", err) - delete(ConnMap, id) - this.DelConnMap[id] = addr - //通知游戏服 - this.UpdateToGameServer(id, 0) - fmt.Println("删除链接!!!!!!addr = ", addr) - go timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { - this.ReConnect() - return true - }), nil, time.Duration(5)*time.Second, 100) - return + delConn = append(delConn, v) + v.Close() + logger.Logger.Tracef("断开连接:%v", v.Addr) } } - } -} - -// 重连 -func (this *MachineManager) ReConnect() bool { - fmt.Println("================重连============") - delIds := []int{} - for id, addr := range this.DelConnMap { - conn, err := net.DialTimeout("tcp", addr, 5*time.Second) - if err != nil { - continue + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + for _, v := range delConn { + delete(this.ConnMap, v.Id) + this.DelConnMap[v.Id] = v.Addr } - ConnMap[id] = conn - delIds = append(delIds, id) - this.UpdateToGameServer(id, 1) - } - for _, id := range delIds { - delete(this.DelConnMap, id) - fmt.Println("重新链接成功!!!!!!id = ", id) - } - return false + if len(delConn) > 0 { + this.UpdateToGameServer() + } + // 重连 + var delIds []*Conn + status := false + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + for id, addr := range this.DelConnMap { + conn, err := net.DialTimeout("tcp", addr, 5*time.Second) + if err != nil { + continue + } + logger.Logger.Tracef("重连成功:%v", addr) + delIds = append(delIds, &Conn{ + Id: id, + Conn: conn, + Addr: addr, + }) + status = true + } + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + for _, v := range delIds { + this.ConnMap[v.Id] = v + delete(this.DelConnMap, v.Id) + } + if status { + this.UpdateToGameServer() + } + })).StartByFixExecutor(this.ModuleName()) + })).StartByFixExecutor(this.ModuleName()) } -func (this *MachineManager) UpdateToGameServer(id int, status int32) { - msg := &machine.MSUpdateDollMachineStatus{} - msg.Status = status - msg.Id = int32(id) - SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), msg) +func (this *MachineManager) Shutdown() { + for _, v := range this.ConnMap { + v.Close() + } + this.UpdateToGameServer() + module.UnregisteModule(this) +} + +func (this *MachineManager) UpdateToGameServer() { + msg := &machine.MSDollMachineList{} + for i, _ := range this.ConnMap { + info := &machine.DollMachine{} + info.Id = int32(i) + info.VideoAddr = "www.baidu.com" + msg.Data = append(msg.Data, info) + } + SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) } func SendToGameServer(pid int, msg interface{}) { @@ -140,7 +168,7 @@ func SendToGameServer(pid int, msg interface{}) { } func init() { - MachineMgr.Init() + module.RegisteModule(MachineMgr, time.Second, 0) } func listenKeyboardEvents(conn net.Conn) { @@ -218,6 +246,8 @@ func listenKeyboardEvents(conn net.Conn) { SetPower(conn) case "8": CloseMusic(conn) + case "9": + queryBaseParam(conn) } } } From 6ea5fb3943f058d6ea62e5fd7a02700bf2179efe Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 11:37:03 +0800 Subject: [PATCH 004/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=8A=95?= =?UTF-8?q?=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index b67ff98..7be9270 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -74,7 +74,7 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) case 5: //投币 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Coin, machinedoll.Backward}, []DoneFunc{machinedoll.BackwardStop}, false) + Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin, machinedoll.Coin}, []DoneFunc{}, false) } return nil } From d2a8b0e6189e7fe919064ac53d67fc660048aab0 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 12:06:15 +0800 Subject: [PATCH 005/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 14 +++++++- machine/machinedoll/machinemgr.go | 43 +++++++++++------------- protocol/machine/machine.pb.go | 54 ++++++++++++++++++------------- protocol/machine/machine.proto | 1 + 4 files changed, 64 insertions(+), 48 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index 61d61a9..d6a5b9c 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -50,13 +50,25 @@ func GetFreeDollMachineId() int { // 获取指定娃娃机链接状态 func GetDollMachineStatus(id int) int32 { + if MachineMap[id] == nil { + return 0 + } return MachineMap[id].MachineStatus } func MSUpdateDollMachineStatusHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("MSUpdateDollMachineStatusHandler %v", data) if msg, ok := data.(*machine.MSUpdateDollMachineStatus); ok { - MachineMap[int(msg.Id)].MachineStatus = msg.Status + if MachineMap[int(msg.Id)] == nil { + MachineMap[int(msg.Id)] = &DollMachine{ + Id: int(msg.Id), + Status: false, + VideoAddr: msg.VideoAddr, + MachineStatus: msg.Status, + } + } else { + MachineMap[int(msg.Id)].MachineStatus = msg.Status + } logger.Logger.Tracef("更新娃娃机连接状态 id = %d,status= %d", msg.Id, msg.GetStatus()) } return nil diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index db51ca6..cc40046 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -76,14 +76,14 @@ func (this *MachineManager) Init() { } } - fmt.Println("Connected to server:\n", this.ConnMap[1].RemoteAddr()) - fmt.Println("投币请按Q!!!!") - fmt.Println("w向前s向后a向左d向右 j强力抓取k弱力抓取!") - // 监听 WASD 按键事件 - go listenKeyboardEvents(this.ConnMap[1]) + /* fmt.Println("Connected to server:\n", this.ConnMap[1].RemoteAddr()) + fmt.Println("投币请按Q!!!!") + fmt.Println("w向前s向后a向左d向右 j强力抓取k弱力抓取!") + // 监听 WASD 按键事件 + go listenKeyboardEvents(this.ConnMap[1]) - // 监听中断信号,等待用户退出 - waitForUserExit() + // 监听中断信号,等待用户退出 + waitForUserExit()*/ } @@ -96,6 +96,7 @@ func (this *MachineManager) Update() { delConn = append(delConn, v) v.Close() logger.Logger.Tracef("断开连接:%v", v.Addr) + this.UpdateToGameServer(int32(v.Id), 0, v.Addr) } } return nil @@ -104,12 +105,9 @@ func (this *MachineManager) Update() { delete(this.ConnMap, v.Id) this.DelConnMap[v.Id] = v.Addr } - if len(delConn) > 0 { - this.UpdateToGameServer() - } + // 重连 var delIds []*Conn - status := false task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { for id, addr := range this.DelConnMap { conn, err := net.DialTimeout("tcp", addr, 5*time.Second) @@ -122,16 +120,13 @@ func (this *MachineManager) Update() { Conn: conn, Addr: addr, }) - status = true } return nil }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { for _, v := range delIds { this.ConnMap[v.Id] = v delete(this.DelConnMap, v.Id) - } - if status { - this.UpdateToGameServer() + this.UpdateToGameServer(int32(v.Id), 1, v.Addr) } })).StartByFixExecutor(this.ModuleName()) })).StartByFixExecutor(this.ModuleName()) @@ -140,20 +135,18 @@ func (this *MachineManager) Update() { func (this *MachineManager) Shutdown() { for _, v := range this.ConnMap { v.Close() + this.UpdateToGameServer(int32(v.Id), 0, v.Addr) } - this.UpdateToGameServer() + module.UnregisteModule(this) } -func (this *MachineManager) UpdateToGameServer() { - msg := &machine.MSDollMachineList{} - for i, _ := range this.ConnMap { - info := &machine.DollMachine{} - info.Id = int32(i) - info.VideoAddr = "www.baidu.com" - msg.Data = append(msg.Data, info) - } - SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) +func (this *MachineManager) UpdateToGameServer(id int32, status int32, VideoAddr string) { + msg := &machine.MSUpdateDollMachineStatus{} + msg.Id = id + msg.Status = status + msg.VideoAddr = VideoAddr + SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), msg) } func SendToGameServer(pid int, msg interface{}) { diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 257ca48..b7f2ec9 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -422,8 +422,9 @@ type MSUpdateDollMachineStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //1-空闲 0-无法使用 + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //1-空闲 0-无法使用 + VideoAddr string `protobuf:"bytes,3,opt,name=VideoAddr,proto3" json:"VideoAddr,omitempty"` } func (x *MSUpdateDollMachineStatus) Reset() { @@ -472,6 +473,13 @@ func (x *MSUpdateDollMachineStatus) GetStatus() int32 { return 0 } +func (x *MSUpdateDollMachineStatus) GetVideoAddr() string { + if x != nil { + return x.VideoAddr + } + return "" +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -501,30 +509,32 @@ var file_machine_proto_rawDesc = []byte{ 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x22, - 0x43, 0x0a, 0x19, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x0a, 0x19, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2a, 0xfd, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, - 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, + 0x64, 0x72, 0x2a, 0xfd, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, - 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x10, 0xa5, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa5, + 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 642b236..8d941c7 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -51,4 +51,5 @@ message DollMachine{ message MSUpdateDollMachineStatus{ int32 Id = 1; int32 Status = 2; //1-空闲 0-无法使用 + string VideoAddr = 3; } \ No newline at end of file From b9191e05380e3c838033cbeb558de57761e1015a Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 13:43:42 +0800 Subject: [PATCH 006/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/machinemgr.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index cc40046..3c6827d 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -96,7 +96,7 @@ func (this *MachineManager) Update() { delConn = append(delConn, v) v.Close() logger.Logger.Tracef("断开连接:%v", v.Addr) - this.UpdateToGameServer(int32(v.Id), 0, v.Addr) + this.UpdateToGameServer(v, 0) } } return nil @@ -126,7 +126,7 @@ func (this *MachineManager) Update() { for _, v := range delIds { this.ConnMap[v.Id] = v delete(this.DelConnMap, v.Id) - this.UpdateToGameServer(int32(v.Id), 1, v.Addr) + this.UpdateToGameServer(v, 1) } })).StartByFixExecutor(this.ModuleName()) })).StartByFixExecutor(this.ModuleName()) @@ -135,17 +135,17 @@ func (this *MachineManager) Update() { func (this *MachineManager) Shutdown() { for _, v := range this.ConnMap { v.Close() - this.UpdateToGameServer(int32(v.Id), 0, v.Addr) + this.UpdateToGameServer(v, 0) } module.UnregisteModule(this) } -func (this *MachineManager) UpdateToGameServer(id int32, status int32, VideoAddr string) { +func (this *MachineManager) UpdateToGameServer(conn *Conn, status int32) { msg := &machine.MSUpdateDollMachineStatus{} - msg.Id = id + msg.Id = int32(conn.Id) msg.Status = status - msg.VideoAddr = VideoAddr + msg.VideoAddr = conn.Addr SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), msg) } From 1fff8b2ebbd63db125f053336e5ac16a18b46b15 Mon Sep 17 00:00:00 2001 From: kxdd <88655@163.com> Date: Wed, 14 Aug 2024 14:09:05 +0800 Subject: [PATCH 007/153] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 10 +++++++++- gamesrv/main.go | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 0ef2a83..89cf7c2 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -529,7 +529,7 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para case rule.ClawDollPlayerOpGo: pack := &machine.SMDollMachineGrab{ - Snid: proto.Int32(playerEx.SnId), + Snid: proto.Int32(p.SnId), Id: proto.Int32(int32(sceneEx.machineId)), TypeId: proto.Int32(int32(1)), } @@ -537,6 +537,14 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack) case rule.ClawDollPlayerOpMove: + // 1-前 2-后 3-左 4-右 5-投币 + pack := &machine.SMDollMachineoPerate{ + Snid: proto.Int32(p.SnId), + Id: proto.Int32(int32(sceneEx.machineId)), + Perate: proto.Int32(int32(params[0])), + } + + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) } return false diff --git a/gamesrv/main.go b/gamesrv/main.go index 78d6f35..391ee70 100644 --- a/gamesrv/main.go +++ b/gamesrv/main.go @@ -19,6 +19,7 @@ import ( // game _ "mongo.games.com/game/gamesrv/chess" + _ "mongo.games.com/game/gamesrv/clawdoll" _ "mongo.games.com/game/gamesrv/fishing" _ "mongo.games.com/game/gamesrv/smallrocket" _ "mongo.games.com/game/gamesrv/thirteen" From 4a86c552f5fe13e5b09c5697039e130b150caf74 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 14:42:20 +0800 Subject: [PATCH 008/153] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 22776 -> 22919 bytes data/DB_GameFree.json | 46 +++++++++++++++++++++++++++++++++++++++ data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameFree.xlsx | Bin 61827 -> 62185 bytes 6 files changed, 46 insertions(+) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 7ee49a4984bcbd19cd6046bf42d8b3f9d1c9f6b9..a674eca727daa6495aea27d5d883d7ced0202473 100644 GIT binary patch delta 78 zcmV-U0I~o0u>ps(0kHE*F^mBSfsFG45((v~gXO4$=A6133FU>X<%O~4oQ)vg1UP`( k13&>t0b&6#Xak4=fZLOmN(o145@`2aSL24(;N diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 0ddecf2..f395c70 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -5363,6 +5363,52 @@ "PlayerWaterRate": 100, "BetWaterRate": 100 }, + { + "Id": 6080001, + "Name": "娃娃机", + "Title": "公共服", + "GameId": 607, + "GameRule": 60800, + "GameType": 1, + "SceneType": 1, + "Desc": "0", + "ShowType": 3, + "ShowId": 60800, + "BaseScore": 1000000, + "BetDec": "0", + "Ai": [ + 0 + ], + "MaxChip": 100000000, + "OtherIntParams": [ + 0 + ], + "Jackpot": [ + 0 + ], + "RobotNumRng": [ + 1, + 1 + ], + "RobotTakeCoin": [ + 80000, + 500000 + ], + "RobotLimitCoin": [ + 1000000, + 2000000 + ], + "BetLimit": 1000000, + "SameIpLimit": 1, + "GameDif": "608", + "GameClass": 1, + "PlatformName": "越南棋牌", + "MaxBetCoin": [ + 0 + ], + "PlayerWaterRate": 100, + "BetWaterRate": 100 + }, { "Id": 3010001, "Name": "财运神", diff --git a/data/DB_GiftCard.dat b/data/DB_GiftCard.dat index 96640b07f274cbbbda035ee3e52503c8356a73cb..15600367ff42a73b75826e6378f02a3bde3a8661 100644 GIT binary patch delta 38 pcmcDtoFJjd#&NNYS%6E4lVf2oo4|o-8=15?Aj}q919mG$1^~Z739kSE delta 38 pcmcDtoFJjd$+57PP2j+^jZ8{x92eV|1-P_0AVMv+2JBXh3;@YB39kSE diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index ddbdc0089ad7d52d32fd9b49f8b652cfbc000798..1360bf44c744c6df84887525147cad8375e4fae5 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#RtK~nT|dk{DE0%@f$dY`1iPbQ?IRYhSPm8xhrk?g2kH=*L3lle2i-EQf0A(^fH2?qr literal 384 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 delta 45616 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Ⓢ03GE7cPC{)e=S_6Mk`;|axM-de>FUJTN{G49rsvtqvx>KL? zq;wNU&RSkb7!`R?;B|t+jW9{X=0P^MRjp8%pH@o@U8Jj~YL(SR)(W4&8)_({u-^q! z0^#jFDj^T=2IOPwAi?OaVEE?6ojfv8(21Gx3z;iGtI=%+x|U4Mby~Q!_X*t6NB%Vl z27WZ)6eezNcotCmB3Gt+2*dB~4!^kNX~*ACoFxb7+vXgh$vO#Pp2^n!opmwF9*C)_ zt1-3QU_dZ-Zg$UY*7V3A;m%&MqDzzx2aX-cLZxpRYnG?e6ea1+7+snR*paLYszSRT zrR@Ot|K7hS1y(!cHJ@dFNx{K2?-cRp6DHWta=mR$GZchOOBrQI`pAA1D<609k^H$N zF=UhF#XkRl@Y&3gpwlebO%CIE|CpLTwG#*aJ%7(XnAJHVD^CKB0a-|)S{WasCyGR5YkA90MrB8tY zWbi|^?;yUd>QzN-FY^Mnd&z7F8>8BGnh1;dC_6&SsK6$l-&MGv&f)V`;D;)!FsoUV zLd70!wORTLNm*8op^YGR?eFI7Cfi{)bvU9yxT+*a$An$%r6=D>?K$djpRnk6U~4`E z2R!!8VU$+S%5?DD%TZ}lv(=$<&JvLV1@k?KUUiZDKVDz!54nu$>cWpn8MB}MaYa<9 zkrgDbcCAyyBPZ4VCx;cobm-R)zfOAEV7W0wZD6y;@`lGAfi zayEE%cjHfo zX+S_&>p}PQ<)2vZX~^;(%JD3~!IUUhTlkL3dlG#pqzJ4SV#(skt^Nx_#t4H=XZ!HQZyAG;{`s|ei} zPgYsxb1l`h$P7teIV#vJ36?=Knbj(^!J70xo>i%k>{TXnJ^Q3d|0Md$lyGzciVmt0#4!_(!kWFD9;6Y4NcQ{xh~@s0u@)x4GS&4rP`0Wr%w$ zlK}6x&b@*Qi{G!XyWR8Rl&ONgQv8b<{oer5RekxZTNDsT1|0+0lyRi&RN z(k$n21<1|#Qnbe}p6Jvc5+%zy27U3OEse2Xzqwj^T>UMN!l$FQ5aOp1>Wv1N*AI|m zeEzA>$Ru)|N)TX6ZT`}%o!TYe=ayyrDJn`1S|*Kd4A!K|m}>D|wH4}nNRg@o!)wP} z&R+Xsk3MxnqW)?gWtGN`vMyz>$#}!Qr{se+x&Xw|h`1NWp`&fgJO9)s^E9w*F_NgP zSi&gq#56!#rYA-iJ@^!7F^VCae4SRuaefPOAqY>%Cuh6{-$R7bh=AqT1;&T1&`kYTl+m zwRMI^E}j}DzMrsj>7z^B5zMpATjS8^E7M#oRNR#GL9Zd77rCmyRg5a+c>~-6Jun0r z&TIm>LY$=HWM|l0>G;U$=9&n`s<~?^cr=#HLq3hnnHSbgwv~;~%IEQ+Eo>0peUg2T z5>H)YwQGlh&TxH91s~mG2ZkNG`G^#*LjDG&`f)G4mBUV`;RtbBxS zz&8EBfD)_U3im+pV&lI32k-E+eu`}1{oZwC$oEAIt`)HXAC@lRR|6QfN6O(c=3(AO zWT9btW*)hehpcz~LPv&>u0cPp%MZ`g@G^v`+WbUyV+Nk~=PM*8s|%~~?Z;S7v8HbI z@uj3*{N}Z7|7SHg2~Wssunq{&P>1&6lt)tN8`~fd{PdU{?z2mThcq4#3Wx!D#n^$z z93^7&2XM2gAWcgj&VDRRUV{YQ%||3eOjdml@qc*2{G`A~Uw;lGb* z!2bZhLlVrOfk4#%k^V37>s>hWi6Y8pxWkDgN-wtO;I(5JD|)g0CT1!T-Ng_`lz2 z-h?xrN}wFVO;06I!}s9nr_!iRd+_B`A+RG|_$t9S5D0A-4Mh1L>;Gj=feq)!riLq> dJx4VzLsrS);b*+4qLu$u$Ii$wLJ$AZ{~rMmp Date: Wed, 14 Aug 2024 14:48:28 +0800 Subject: [PATCH 009/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 22919 -> 22919 bytes data/DB_GameFree.json | 2 +- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameFree.xlsx | Bin 62185 -> 62170 bytes 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index a674eca727daa6495aea27d5d883d7ced0202473..c6c3839bde5091c19fa3eee95313d65914f6add5 100644 GIT binary patch delta 18 ZcmZqQ%-Ft}af6`uWTQy2&FbC>d;mhE21)<` delta 16 XcmZqQ%-Ft}af6^Y;IZ(|<*9TS)bO(xkNbZ8U2W-9)C)gbgYag+2#d5HqcmTx#Km%YJ!5#qeVID+x Xz#XW=!46Pj=U4>v=oe-#2HHXZW?DQo literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#RtK~nT|dk{DE0%@f$dY`1iPbQ?IRYhSPm8xhrk?g2kH=*L3lle2i-EQf0A(^fH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index b5ad45cb989814a1334be32cdd22e06206ac58ca..0e66ff123b0c2af28f6783605ae16d224ac67253 100644 GIT binary patch delta 250 zcmdn2xmk0=d#1@H93qpMnG3*lJG0*86g~k)#>vN+_Xu)uEbL_ySa3+ri;d%A8?yk* z=E*EcjFYeP2rx2DW@EF2Dro4e0xDPpRLZ(JfK7#Iaxt^WhY0x=(zv1F!gG fQNBr&Re1#`@8B~4+9^2sCtoJiE@VTC`5jmRcTP$H diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index 5bf483027ef2adf58a458fa70fba802c43366fe3..d230553a0f33583f6b00591abb59082f35bdf38d 100644 GIT binary patch delta 42681 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 delta 42702 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 From 2c8ce6a46715ae38391044167b5fbf3cc1b609d8 Mon Sep 17 00:00:00 2001 From: kxdd <88655@163.com> Date: Wed, 14 Aug 2024 15:53:27 +0800 Subject: [PATCH 010/153] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=8A=E5=88=86?= =?UTF-8?q?=E6=8A=95=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/player_clawdoll.go | 2 +- gamesrv/clawdoll/scenepolicy_clawdoll.go | 33 ++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index bba7f72..f69670f 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -33,7 +33,7 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { func (this *PlayerEx) CanPayCoin() bool { - return false + return true } // 游戏新一局 设置数据 diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 89cf7c2..146a682 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -445,9 +445,29 @@ func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, pa return true } + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return false + } + playerEx, ok := p.ExtraData.(*PlayerEx) + if !ok { + return false + } + switch opcode { case rule.ClawDollPlayerOpPayCoin: + if !playerEx.CanPayCoin() { + return false + } + // 1-前 2-后 3-左 4-右 5-投币 + pack := &machine.SMDollMachineoPerate{ + Snid: proto.Int32(p.SnId), + Id: proto.Int32(int32(sceneEx.machineId)), + Perate: proto.Int32(int32(5)), + } + + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) } return false @@ -524,14 +544,23 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para if !playerEx.CanPayCoin() { return false } - sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) + // 1-前 2-后 3-左 4-右 5-投币 + pack := &machine.SMDollMachineoPerate{ + Snid: proto.Int32(p.SnId), + Id: proto.Int32(int32(sceneEx.machineId)), + Perate: proto.Int32(int32(5)), + } + + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) + + //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) case rule.ClawDollPlayerOpGo: pack := &machine.SMDollMachineGrab{ Snid: proto.Int32(p.SnId), Id: proto.Int32(int32(sceneEx.machineId)), - TypeId: proto.Int32(int32(1)), + TypeId: proto.Int32(int32(2)), } sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack) From 8ff978db72ccf8f1b61ec16e7d3e89452f8b3b27 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 16:22:57 +0800 Subject: [PATCH 011/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=93=8D=E4=BD=9C=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 4 +- gamesrv/clawdoll/action_clawdoll.go | 23 +++- gamesrv/clawdoll/scene_clawdoll.go | 4 +- machine/action/action_server.go | 24 +++- protocol/machine/machine.pb.go | 168 +++++++++++++++------------- protocol/machine/machine.proto | 18 +-- 6 files changed, 146 insertions(+), 95 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index d6a5b9c..4f2f1d5 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -17,7 +17,7 @@ type DollMachine struct { VideoAddr string } -func MSDollMachineList(session *netlib.Session, packetId int, data interface{}) error { +func MSDollMachineListHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("TestHandler %v", data) MachineMap = make(map[int]*DollMachine) if msg, ok := data.(*machine.MSDollMachineList); ok { @@ -74,7 +74,7 @@ func MSUpdateDollMachineStatusHandler(session *netlib.Session, packetId int, dat return nil } func init() { - netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineList) + netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineListHandler) //更新娃娃机链接状态 netlib.Register(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), &machine.MSUpdateDollMachineStatus{}, MSUpdateDollMachineStatusHandler) } diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 591aca8..2340d03 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -4,6 +4,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/protocol/clawdoll" + "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" ) @@ -48,8 +49,28 @@ func (h *CSPlayerOpHandler) Process(s *netlib.Session, packetid int, data interf } return nil } - +func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("收到返回上分结果!!!!!!!!!!") + if msg, ok := data.(*machine.MSDollMachineoPerateResult); ok { + switch msg.TypeId { + case 1: + if msg.Result == 1 { + logger.Logger.Tracef("上分成功!!!!!!!!!!!!snid = ", msg.Snid) + } else { + logger.Logger.Tracef("上分失败!!!!!!!!!!!!snid = ", msg.Snid) + } + case 2: + if msg.Result == 1 { + logger.Logger.Tracef("下抓成功!!!!!!!!!!!!snid = ", msg.Snid) + } else { + logger.Logger.Tracef("下抓失败!!!!!!!!!!!!snid = ", msg.Snid) + } + } + } + return nil +} func init() { common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpHandler{}) netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpPacketFactory{}) + netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) } diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 994eb68..e363fcc 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -210,9 +210,7 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { // 向娃娃机主机发送消息 func (this *SceneEx) SendToMachine(pid int, msg interface{}) { - if this.machineConn == nil { - this.machineConn = srvlib.ServerSessionMgrSington.GetSession(1, 10, 1001) - } + this.machineConn = srvlib.ServerSessionMgrSington.GetSession(1, 10, 1001) if this.machineConn != nil { this.machineConn.Send(pid, msg) } else { diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 7be9270..e7acc8d 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -75,6 +75,25 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte case 5: //投币 Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin, machinedoll.Coin}, []DoneFunc{}, false) + // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return nil + } + if buf[4] == 1 { + fmt.Println("上分成功!!!!n = ", n) + } + if buf[4] == 0 { + fmt.Println("上分失败!!!") + } + //返回消息 + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: msg.Snid, + Id: msg.GetId(), + Result: int32(buf[4]), + }) } return nil } @@ -93,7 +112,7 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf } send := func(net.Conn) { - session.Send(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.MSDollMachineGrab{ + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineGrab), &machine.MSDollMachineGrab{ Snid: msg.Snid, Id: msg.GetId(), Result: 1, @@ -107,9 +126,6 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf case 2: //强力抓 Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) - case 3: - //必中抓 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.SetPower}, []DoneFunc{machinedoll.Grab, send}, false) } return nil } diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index b7f2ec9..65ef2f3 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -24,13 +24,13 @@ const ( type DollMachinePacketID int32 const ( - DollMachinePacketID_PACKET_SMDollMachineZero DollMachinePacketID = 0 - DollMachinePacketID_PACKET_SMGameLinkSucceed DollMachinePacketID = 20000 - DollMachinePacketID_PACKET_SMDollMachinePerate DollMachinePacketID = 20001 - DollMachinePacketID_PACKET_SMDollMachineGrab DollMachinePacketID = 20002 - DollMachinePacketID_PACKET_MSDollMachineGrab DollMachinePacketID = 20003 - DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 20004 - DollMachinePacketID_PACKET_MSUpdateDollMachineStatus DollMachinePacketID = 20005 + DollMachinePacketID_PACKET_SMDollMachineZero DollMachinePacketID = 0 + DollMachinePacketID_PACKET_SMGameLinkSucceed DollMachinePacketID = 20000 + DollMachinePacketID_PACKET_SMDollMachinePerate DollMachinePacketID = 20001 + DollMachinePacketID_PACKET_SMDollMachineGrab DollMachinePacketID = 20002 + DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 20003 + DollMachinePacketID_PACKET_MSUpdateDollMachineStatus DollMachinePacketID = 20004 + DollMachinePacketID_PACKET_MSDollMachineoPerateResult DollMachinePacketID = 20005 ) // Enum value maps for DollMachinePacketID. @@ -40,18 +40,18 @@ var ( 20000: "PACKET_SMGameLinkSucceed", 20001: "PACKET_SMDollMachinePerate", 20002: "PACKET_SMDollMachineGrab", - 20003: "PACKET_MSDollMachineGrab", - 20004: "PACKET_MSDollMachineList", - 20005: "PACKET_MSUpdateDollMachineStatus", + 20003: "PACKET_MSDollMachineList", + 20004: "PACKET_MSUpdateDollMachineStatus", + 20005: "PACKET_MSDollMachineoPerateResult", } DollMachinePacketID_value = map[string]int32{ - "PACKET_SMDollMachineZero": 0, - "PACKET_SMGameLinkSucceed": 20000, - "PACKET_SMDollMachinePerate": 20001, - "PACKET_SMDollMachineGrab": 20002, - "PACKET_MSDollMachineGrab": 20003, - "PACKET_MSDollMachineList": 20004, - "PACKET_MSUpdateDollMachineStatus": 20005, + "PACKET_SMDollMachineZero": 0, + "PACKET_SMGameLinkSucceed": 20000, + "PACKET_SMDollMachinePerate": 20001, + "PACKET_SMDollMachineGrab": 20002, + "PACKET_MSDollMachineList": 20003, + "PACKET_MSUpdateDollMachineStatus": 20004, + "PACKET_MSDollMachineoPerateResult": 20005, } ) @@ -83,6 +83,7 @@ func (DollMachinePacketID) EnumDescriptor() ([]byte, []int) { } //通知链接成功 +//PACKET_SMDollMachinePerate type SMGameLinkSucceed struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -122,6 +123,7 @@ func (*SMGameLinkSucceed) Descriptor() ([]byte, []int) { } //操作 +//PACKET_SMDollMachinePerate type SMDollMachineoPerate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -249,19 +251,20 @@ func (x *SMDollMachineGrab) GetSnid() int32 { return 0 } -//返回下抓结果 -type MSDollMachineGrab struct { +//PACKET_MSDollMachineoPerateResult +type MSDollMachineoPerateResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` //娃娃机标识 - Result int32 `protobuf:"varint,3,opt,name=Result,proto3" json:"Result,omitempty"` //1-中奖 其他未中奖 + Result int32 `protobuf:"varint,3,opt,name=Result,proto3" json:"Result,omitempty"` // 1-成功 0-失败 + TypeId int32 `protobuf:"varint,4,opt,name=TypeId,proto3" json:"TypeId,omitempty"` //1 投币 2 下抓结果 } -func (x *MSDollMachineGrab) Reset() { - *x = MSDollMachineGrab{} +func (x *MSDollMachineoPerateResult) Reset() { + *x = MSDollMachineoPerateResult{} if protoimpl.UnsafeEnabled { mi := &file_machine_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -269,13 +272,13 @@ func (x *MSDollMachineGrab) Reset() { } } -func (x *MSDollMachineGrab) String() string { +func (x *MSDollMachineoPerateResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MSDollMachineGrab) ProtoMessage() {} +func (*MSDollMachineoPerateResult) ProtoMessage() {} -func (x *MSDollMachineGrab) ProtoReflect() protoreflect.Message { +func (x *MSDollMachineoPerateResult) ProtoReflect() protoreflect.Message { mi := &file_machine_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -287,32 +290,39 @@ func (x *MSDollMachineGrab) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MSDollMachineGrab.ProtoReflect.Descriptor instead. -func (*MSDollMachineGrab) Descriptor() ([]byte, []int) { +// Deprecated: Use MSDollMachineoPerateResult.ProtoReflect.Descriptor instead. +func (*MSDollMachineoPerateResult) Descriptor() ([]byte, []int) { return file_machine_proto_rawDescGZIP(), []int{3} } -func (x *MSDollMachineGrab) GetSnid() int32 { +func (x *MSDollMachineoPerateResult) GetSnid() int32 { if x != nil { return x.Snid } return 0 } -func (x *MSDollMachineGrab) GetId() int32 { +func (x *MSDollMachineoPerateResult) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *MSDollMachineGrab) GetResult() int32 { +func (x *MSDollMachineoPerateResult) GetResult() int32 { if x != nil { return x.Result } return 0 } +func (x *MSDollMachineoPerateResult) GetTypeId() int32 { + if x != nil { + return x.TypeId + } + return 0 +} + //返回所有娃娃机连接 type MSDollMachineList struct { state protoimpl.MessageState @@ -496,45 +506,47 @@ var file_machine_proto_rawDesc = []byte{ 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x11, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x3d, 0x0a, 0x11, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x3b, 0x0a, 0x0b, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x22, - 0x61, 0x0a, 0x19, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, - 0x64, 0x72, 0x2a, 0xfd, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, - 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa5, - 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x69, 0x64, 0x22, 0x70, 0x0a, 0x1a, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x11, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x3b, 0x0a, 0x0b, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, + 0x22, 0x61, 0x0a, 0x19, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, + 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, + 0x64, 0x64, 0x72, 0x2a, 0x86, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, + 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, + 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, + 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, + 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -552,14 +564,14 @@ func file_machine_proto_rawDescGZIP() []byte { var file_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_machine_proto_goTypes = []interface{}{ - (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID - (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed - (*SMDollMachineoPerate)(nil), // 2: machine.SMDollMachineoPerate - (*SMDollMachineGrab)(nil), // 3: machine.SMDollMachineGrab - (*MSDollMachineGrab)(nil), // 4: machine.MSDollMachineGrab - (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList - (*DollMachine)(nil), // 6: machine.DollMachine - (*MSUpdateDollMachineStatus)(nil), // 7: machine.MSUpdateDollMachineStatus + (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID + (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed + (*SMDollMachineoPerate)(nil), // 2: machine.SMDollMachineoPerate + (*SMDollMachineGrab)(nil), // 3: machine.SMDollMachineGrab + (*MSDollMachineoPerateResult)(nil), // 4: machine.MSDollMachineoPerateResult + (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList + (*DollMachine)(nil), // 6: machine.DollMachine + (*MSUpdateDollMachineStatus)(nil), // 7: machine.MSUpdateDollMachineStatus } var file_machine_proto_depIdxs = []int32{ 6, // 0: machine.MSDollMachineList.data:type_name -> machine.DollMachine @@ -613,7 +625,7 @@ func file_machine_proto_init() { } } file_machine_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MSDollMachineGrab); i { + switch v := v.(*MSDollMachineoPerateResult); i { case 0: return &v.state case 1: diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 8d941c7..1e4933d 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -10,15 +10,17 @@ enum DollMachinePacketID { PACKET_SMGameLinkSucceed = 20000; PACKET_SMDollMachinePerate = 20001; PACKET_SMDollMachineGrab = 20002; - PACKET_MSDollMachineGrab = 20003; - PACKET_MSDollMachineList = 20004; - PACKET_MSUpdateDollMachineStatus = 20005; + PACKET_MSDollMachineList = 20003; + PACKET_MSUpdateDollMachineStatus = 20004; + PACKET_MSDollMachineoPerateResult = 20005; } //通知链接成功 +//PACKET_SMDollMachinePerate message SMGameLinkSucceed{ } //操作 +//PACKET_SMDollMachinePerate message SMDollMachineoPerate{ int32 Snid = 1; int32 Id = 2; //娃娃机标识 @@ -32,13 +34,15 @@ message SMDollMachineGrab{ int32 Snid = 3; } -//返回下抓结果 -message MSDollMachineGrab{ +//PACKET_MSDollMachineoPerateResult +message MSDollMachineoPerateResult{ int32 Snid = 1; - int32 Id = 2; //娃娃机标识 - int32 Result = 3;//1-中奖 其他未中奖 + int32 Id = 2; //娃娃机标识 + int32 Result = 3;// 1-成功 0-失败 + int32 TypeId = 4;//1 投币 2 下抓结果 } + //返回所有娃娃机连接 message MSDollMachineList{ repeated DollMachine data = 1; From a4b4a0b2a0abd019563b026d6dfd1c904579aee6 Mon Sep 17 00:00:00 2001 From: kxdd <88655@163.com> Date: Wed, 14 Aug 2024 16:23:58 +0800 Subject: [PATCH 012/153] =?UTF-8?q?=E5=B0=81=E8=A3=85=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E6=8A=95=E5=B8=81=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/player_clawdoll.go | 13 ++++++++ gamesrv/clawdoll/scene_clawdoll.go | 25 +++++++++++++++ gamesrv/clawdoll/scenepolicy_clawdoll.go | 39 ++++++------------------ 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index f69670f..1ec2c43 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -31,11 +31,24 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { return true } +// 能否投币 func (this *PlayerEx) CanPayCoin() bool { return true } +// 能否移动 +func (this *PlayerEx) CanMove() bool { + + return true +} + +// 能否下抓 +func (this *PlayerEx) CanGrab() bool { + + return true +} + // 游戏新一局 设置数据 func (this *PlayerEx) ReStartGame() { this.ReDataStartGame() diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 994eb68..df6e0c7 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -6,6 +6,7 @@ import ( "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/proto" "mongo.games.com/game/protocol/clawdoll" + "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" @@ -208,6 +209,30 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { } } +// OnPlayerSMGrabOp 下抓 //1-弱力抓 2 -强力抓 3-必出抓 +func (this *SceneEx) OnPlayerSMGrabOp(SnId, Id, GrabType int32) { + + pack := &machine.SMDollMachineGrab{ + Snid: proto.Int32(SnId), + Id: proto.Int32(Id), + TypeId: proto.Int32(GrabType), + } + + this.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack) +} + +// OnPlayerSCOp 发送玩家操作情况 1-前 2-后 3-左 4-右 5-投币 +func (this *SceneEx) OnPlayerSMPerateOp(SnId, Id, Perate int32) { + + pack := &machine.SMDollMachineoPerate{ + Snid: proto.Int32(SnId), + Id: proto.Int32(Id), + Perate: proto.Int32(Perate), + } + + this.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) +} + // 向娃娃机主机发送消息 func (this *SceneEx) SendToMachine(pid int, msg interface{}) { if this.machineConn == nil { diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 146a682..14db059 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -3,7 +3,6 @@ package clawdoll import ( "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" - "mongo.games.com/game/protocol/machine" "time" "mongo.games.com/goserver/core" @@ -461,13 +460,7 @@ func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, pa } // 1-前 2-后 3-左 4-右 5-投币 - pack := &machine.SMDollMachineoPerate{ - Snid: proto.Int32(p.SnId), - Id: proto.Int32(int32(sceneEx.machineId)), - Perate: proto.Int32(int32(5)), - } - - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(5)) } return false @@ -546,34 +539,22 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para } // 1-前 2-后 3-左 4-右 5-投币 - pack := &machine.SMDollMachineoPerate{ - Snid: proto.Int32(p.SnId), - Id: proto.Int32(int32(sceneEx.machineId)), - Perate: proto.Int32(int32(5)), - } - - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) - + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(5)) //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) case rule.ClawDollPlayerOpGo: - - pack := &machine.SMDollMachineGrab{ - Snid: proto.Int32(p.SnId), - Id: proto.Int32(int32(sceneEx.machineId)), - TypeId: proto.Int32(int32(2)), + if !playerEx.CanGrab() { + return false } - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack) + //1-弱力抓 2 -强力抓 + sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), int32(2)) case rule.ClawDollPlayerOpMove: + if !playerEx.CanMove() { + return false + } // 1-前 2-后 3-左 4-右 5-投币 - pack := &machine.SMDollMachineoPerate{ - Snid: proto.Int32(p.SnId), - Id: proto.Int32(int32(sceneEx.machineId)), - Perate: proto.Int32(int32(params[0])), - } - - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack) + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(params[0])) } return false From 4dc78ff468b153492e2e287d855a6e28f04be000 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 14 Aug 2024 16:23:59 +0800 Subject: [PATCH 013/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=93=8D=E4=BD=9C=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index e7acc8d..117cea1 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -93,6 +93,7 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Snid: msg.Snid, Id: msg.GetId(), Result: int32(buf[4]), + TypeId: 1, }) } return nil @@ -112,10 +113,11 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf } send := func(net.Conn) { - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineGrab), &machine.MSDollMachineGrab{ + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: msg.Snid, Id: msg.GetId(), Result: 1, + TypeId: 2, }) } From 154a037e08d1a3d3377e608a2fb522017ce50fe6 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 15 Aug 2024 11:31:45 +0800 Subject: [PATCH 014/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 2 +- machine/action/action_server.go | 110 +++++++++++++++++++++++++------ machine/machinedoll/command.go | 71 ++++++++++---------- 3 files changed, 126 insertions(+), 57 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index 4f2f1d5..c577f4e 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -13,7 +13,7 @@ var MachineMapLock = sync.Mutex{} type DollMachine struct { Id int MachineStatus int32 //娃娃机链接状态 0:离线 1:在线 - Status bool //是否空闲 + Status bool //标记是否被占用 VideoAddr string } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 117cea1..c67697e 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -1,6 +1,7 @@ package action import ( + "bytes" "fmt" "net" "time" @@ -74,27 +75,9 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) case 5: //投币 - Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin, machinedoll.Coin}, []DoneFunc{}, false) - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return nil - } - if buf[4] == 1 { - fmt.Println("上分成功!!!!n = ", n) - } - if buf[4] == 0 { - fmt.Println("上分失败!!!") - } - //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ - Snid: msg.Snid, - Id: msg.GetId(), - Result: int32(buf[4]), - TypeId: 1, - }) + //Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin}, []DoneFunc{}, false) + machinedoll.Coin(conn) + go CoinResult(session, conn, msg.Snid, msg.GetId()) } return nil } @@ -129,9 +112,94 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf //强力抓 Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) } + go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) return nil } +// 监听抓取结果返回 +func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid, id int32) { + for { + // 读取数据 + fmt.Println("监听抓取结果返回!") + buf := make([]byte, 1024) + conn.SetDeadline(time.Now().Add(10 * time.Second)) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from client:", err) + return + } + + // 将读取到的数据按照 221 进行分割 + parts := bytes.Split(buf[:n], []byte{221}) + fmt.Println("获取到的返回值:", parts) + instruction := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x00} + instruction1 := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x01} + // 遍历分割结果,打印出每个部分 + for i, part := range parts { + if len(part) > 0 { + part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 + fmt.Println("比较返回结果 part = ", part) + if bytes.Contains(part, instruction) { + fmt.Printf("Part %d: %s\n", i+1, part) + //回应数据 + _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: snid, + Id: id, + Result: 0, + TypeId: 2, + }) + fmt.Println("没有抓到礼品!!!!!!!!") + return + } + if bytes.Contains(part, instruction1) { + fmt.Printf("Part %d: %s\n", i+1, part) + //回应数据 + _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: snid, + Id: id, + Result: 1, + TypeId: 2, + }) + fmt.Println("抓到礼品了!!!!!!!!") + return + } + } + } + } +} +func CoinResult(session *netlib.Session, conn *machinedoll.Conn, snid, id int32) { + // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + if buf[4] == 1 { + fmt.Println("上分成功!!!!n = ", n) + } + if buf[4] == 0 { + fmt.Println("上分失败!!!") + } + //返回消息 + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: snid, + Id: id, + Result: int32(buf[4]), + TypeId: 1, + }) +} + // 与游戏服务器连接成功,向游戏服务器推送所有娃娃机连接 func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Trace("与游戏服务器连接成功") diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index 9e56bb7..8932d5a 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -8,7 +8,7 @@ import ( // 向前aa 05 01 50 01 01 54 dd func Forward(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x01, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -19,7 +19,7 @@ func Forward(conn net.Conn) { // 向前停止aa 05 01 50 01 00 55 dd func ForwardStop(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x01, 0x00} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -31,7 +31,7 @@ func ForwardStop(conn net.Conn) { // aa 05 01 50 02 01 57 dd func Backward(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x02, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -42,7 +42,7 @@ func Backward(conn net.Conn) { // 向后停止aa 05 01 50 02 00 56 dd func BackwardStop(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x02, 0x00} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -53,7 +53,7 @@ func BackwardStop(conn net.Conn) { // 向左aa 05 01 50 03 01 56 dd func Left(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x03, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -64,7 +64,7 @@ func Left(conn net.Conn) { // 向左停止aa 05 01 50 03 00 57 dd func LeftStop(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x03, 0x00} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -75,7 +75,7 @@ func LeftStop(conn net.Conn) { // 向右 func Right(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x04, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -86,7 +86,7 @@ func Right(conn net.Conn) { // 向右停止aa 05 01 50 04 00 50 dd func RightStop(conn net.Conn) { instruction := []byte{0xaa, 0x05, 0x01, 0x50, 0x04, 0x00} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -97,25 +97,26 @@ func RightStop(conn net.Conn) { // 强抓下抓 func Grab(conn net.Conn) { instruction := []byte{0xAA, 0x05, 0x01, 0x50, 0x06, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - _, err = conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - instruction = []byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd} - _, err = conn.Write(instruction) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } + /* + // 读取服务端的响应 + buf := make([]byte, 1024) + _, err = conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + instruction = []byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd} + _, err = conn.Write(instruction) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + }*/ } // 必中抓 @@ -123,7 +124,7 @@ func Grab2(conn net.Conn) { //设置电压 instruction := []byte{0xAA, 0x05, 0x01, 0x50, 0x06, 0x01} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -141,7 +142,7 @@ func Grab2(conn net.Conn) { // 弱抓aa 05 01 50 06 00 52 dd func WeakGrab(conn net.Conn) { instruction := []byte{0xAA, 0x05, 0x01, 0x50, 0x06, 0x00} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -152,7 +153,7 @@ func WeakGrab(conn net.Conn) { // 投币 func Coin(conn net.Conn) { moveCommand := []byte{0xaa, 0x08, 0x01, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00} - moveCommand = calculateChecksum(moveCommand) + moveCommand = CalculateChecksum(moveCommand) // 发送指令到服务端 _, err := conn.Write(moveCommand) if err != nil { @@ -177,7 +178,7 @@ func Coin(conn net.Conn) { // 剩余局数清零 func ClearRemainingGames(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x32} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -194,7 +195,7 @@ func ClearRemainingGames(conn net.Conn) { } // 计算校验码 -func calculateChecksum(data []byte) []byte { +func CalculateChecksum(data []byte) []byte { var value = byte(0) for i, datum := range data { if i > 0 { @@ -212,7 +213,7 @@ func OpenMusic(conn net.Conn) { data[43] = 0x01 instruction := []byte{0xAA, 0x33, 0x01, 0x06} instruction = append(instruction, data...) - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) //instruction[1] = byte(len(instruction) - 3) _, err := conn.Write(instruction) if err != nil { @@ -234,7 +235,7 @@ func CloseMusic(conn net.Conn) { data[43] = 0x00 instruction := []byte{0xAA, 0x33, 0x01, 0x06} instruction = append(instruction, data...) - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -253,7 +254,7 @@ func CloseMusic(conn net.Conn) { // 恢复出厂设置 func RestoreFactorySettings(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x38} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -272,7 +273,7 @@ func RestoreFactorySettings(conn net.Conn) { // 重启主板 func Reboot(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x39} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -291,7 +292,7 @@ func Reboot(conn net.Conn) { // 暂停服务 func StopServer(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x37} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -302,7 +303,7 @@ func StopServer(conn net.Conn) { // 开启服务 func StartServer(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x36} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -313,7 +314,7 @@ func StartServer(conn net.Conn) { // 查询基础参数 func queryBaseParam(conn net.Conn) { instruction := []byte{0xAA, 0x03, 0x01, 0x05} - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) @@ -336,7 +337,7 @@ func SetPower(conn net.Conn) { fmt.Println("data.len = ", len(data)) instruction := []byte{0xAA, 0x04, 0x01, 0x06} instruction = append(instruction, data...) - instruction = calculateChecksum(instruction) + instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) if err != nil { fmt.Println("Failed to send command to server:", err) From afe8d3f0b1f0d72a9a9a06d18cb51cf8ae11d9cb Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 15 Aug 2024 14:37:08 +0800 Subject: [PATCH 015/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=B6=88=E6=81=AF=E9=98=9F=E5=88=97=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 206 ++++++++++++++++++++------------ machine/machinedoll/command.go | 138 ++++++++++----------- 2 files changed, 201 insertions(+), 143 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index c67697e..445c2c2 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -3,47 +3,69 @@ package action import ( "bytes" "fmt" - "net" - "time" - - "mongo.games.com/goserver/core/basic" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/core/task" - "mongo.games.com/goserver/core/timer" - "mongo.games.com/game/machine/machinedoll" "mongo.games.com/game/protocol/machine" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/timer" + "sync" + "time" ) -type DoneFunc func(c net.Conn) +type ConnMessageQueue struct { + queue chan []interface{} + conn *machinedoll.Conn + waitGroup *sync.WaitGroup +} -func Process(conn *machinedoll.Conn, sec time.Duration, f1, f2 []DoneFunc, isSync bool) { - var ch chan struct{} - if isSync { - ch = make(chan struct{}, 1) +var connMessageQueues = make(map[*machinedoll.Conn]*ConnMessageQueue) + +func Process(conn *machinedoll.Conn, f1 []func(), f2 []func()) { + // 获取或创建该 conn 对应的消息队列 + queue, ok := connMessageQueues[conn] + if !ok { + queue = &ConnMessageQueue{ + queue: make(chan []interface{}, 100), + conn: conn, + waitGroup: new(sync.WaitGroup), + } + connMessageQueues[conn] = queue + go processConnMessageQueue(queue) } - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - for _, v := range f1 { - v(conn) + + // 将消息添加到队列中 + queue.queue <- []interface{}{f1, f2} +} + +func processConnMessageQueue(queue *ConnMessageQueue) { + for msg := range queue.queue { + f1 := msg[0].([]func()) + f2 := msg[1].([]func()) + + queue.waitGroup.Add(len(f1)) + for _, f := range f1 { + go func(f func()) { + defer queue.waitGroup.Done() + f() + }(f) } + queue.waitGroup.Wait() + if len(f2) > 0 { - timer.AfterTimer(func(h timer.TimerHandle, ud interface{}) bool { - Process(conn, 0, f2, nil, isSync) - if isSync { - ch <- struct{}{} - } - return true - }, nil, sec) - } else { - if isSync { - ch <- struct{}{} - } + queue.waitGroup.Add(1) + go func() { + defer queue.waitGroup.Done() + timer.AfterTimer(func(h timer.TimerHandle, ud interface{}) bool { + for _, f := range f2 { + f() + } + return true + }, nil, 200*time.Millisecond) + }() + } - return nil - }), nil).StartByFixExecutor(fmt.Sprintf("Machine%v", conn.Addr)) - if isSync { - <-ch + + queue.waitGroup.Wait() } } @@ -63,21 +85,48 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte switch msg.Perate { case 1: //向前移动 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Backward}, []DoneFunc{machinedoll.BackwardStop}, false) + f1 := []func(){ + func() { machinedoll.Backward(conn) }, + } + f2 := []func(){ + func() { machinedoll.BackwardStop(conn) }, + } + Process(conn, f1, f2) case 2: //向后移动 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Forward}, []DoneFunc{machinedoll.ForwardStop}, false) + f1 := []func(){ + func() { machinedoll.Forward(conn) }, + } + f2 := []func(){ + func() { machinedoll.ForwardStop(conn) }, + } + Process(conn, f1, f2) + //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Forward}, []DoneFunc{machinedoll.ForwardStop}, false) case 3: //向左移动 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Left}, []DoneFunc{machinedoll.LeftStop}, false) + f1 := []func(){ + func() { machinedoll.Left(conn) }, + } + f2 := []func(){ + func() { machinedoll.LeftStop(conn) }, + } + Process(conn, f1, f2) + //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Left}, []DoneFunc{machinedoll.LeftStop}, false) case 4: //向右移动 - Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) + f1 := []func(){ + func() { machinedoll.Right(conn) }, + } + f2 := []func(){ + func() { machinedoll.RightStop(conn) }, + } + Process(conn, f1, f2) + //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) case 5: //投币 //Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin}, []DoneFunc{}, false) machinedoll.Coin(conn) - go CoinResult(session, conn, msg.Snid, msg.GetId()) + go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } return nil } @@ -95,24 +144,30 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf return nil } - send := func(net.Conn) { - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ - Snid: msg.Snid, - Id: msg.GetId(), - Result: 1, - TypeId: 2, - }) - } - switch msg.GetTypeId() { case 1: //弱抓 - Process(conn, 0, []DoneFunc{machinedoll.WeakGrab}, []DoneFunc{send}, false) + f1 := []func(){ + func() { machinedoll.WeakGrab(conn) }, + } + f2 := []func(){} + Process(conn, f1, f2) + //Process(conn, 0, []DoneFunc{machinedoll.WeakGrab}, []DoneFunc{send}, false) case 2: //强力抓 - Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) + f1 := []func(){ + func() { machinedoll.Grab(conn) }, + } + f2 := []func(){} + Process(conn, f1, f2) + //Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) + } + //go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) + err := conn.SetDeadline(time.Now().Add(15 * time.Second)) + if err != nil { + fmt.Println("Error setting deadline:", err) + return err } - go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) return nil } @@ -122,7 +177,6 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid // 读取数据 fmt.Println("监听抓取结果返回!") buf := make([]byte, 1024) - conn.SetDeadline(time.Now().Add(10 * time.Second)) n, err := conn.Read(buf) if err != nil { fmt.Println("Failed to read response from client:", err) @@ -153,7 +207,8 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 2, }) - fmt.Println("没有抓到礼品!!!!!!!!") + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid) + conn.SetDeadline(time.Time{}) return } if bytes.Contains(part, instruction1) { @@ -170,35 +225,38 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 2, }) - fmt.Println("抓到礼品了!!!!!!!!") + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid) + conn.SetDeadline(time.Time{}) return } + //上分成功 + coinData := []byte{0xAA, 0x04, 0x02, 0x03, 0x01} + if bytes.Contains(part, coinData) { + //返回消息 + fmt.Println("上分成功!") + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: snid, + Id: id, + Result: 1, + TypeId: 1, + }) + } + //上分失败 + coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} + if bytes.Contains(part, coinData) { + //返回消息 + fmt.Println("上分失败!") + session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + Snid: snid, + Id: id, + Result: 0, + TypeId: 1, + }) + } } } } } -func CoinResult(session *netlib.Session, conn *machinedoll.Conn, snid, id int32) { - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - if buf[4] == 1 { - fmt.Println("上分成功!!!!n = ", n) - } - if buf[4] == 0 { - fmt.Println("上分失败!!!") - } - //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ - Snid: snid, - Id: id, - Result: int32(buf[4]), - TypeId: 1, - }) -} // 与游戏服务器连接成功,向游戏服务器推送所有娃娃机连接 func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interface{}) error { diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index 8932d5a..ad56c9a 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -160,19 +160,19 @@ func Coin(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - if buf[4] == 1 { - fmt.Println("上分成功!!!!n = ", n) - } - if buf[4] == 0 { - fmt.Println("上分失败!!!") - } + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + if buf[4] == 1 { + fmt.Println("上分成功!!!!n = ", n) + } + if buf[4] == 0 { + fmt.Println("上分失败!!!") + }*/ } // 剩余局数清零 @@ -184,14 +184,14 @@ func ClearRemainingGames(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } // 计算校验码 @@ -202,7 +202,7 @@ func CalculateChecksum(data []byte) []byte { value ^= datum } } - fmt.Println("校验码 value = ", value) + //fmt.Println("校验码 value = ", value) data = append(data, value, 0xdd) return data @@ -221,13 +221,13 @@ func OpenMusic(conn net.Conn) { return } // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } // 关闭音乐 @@ -241,14 +241,14 @@ func CloseMusic(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } // 恢复出厂设置 @@ -260,14 +260,14 @@ func RestoreFactorySettings(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } // 重启主板 @@ -279,14 +279,14 @@ func Reboot(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } // 暂停服务 @@ -320,15 +320,15 @@ func queryBaseParam(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } - fmt.Println("n", n) + fmt.Println("n", n)*/ } // 设置出奖模式 @@ -343,14 +343,14 @@ func SetPower(conn net.Conn) { fmt.Println("Failed to send command to server:", err) return } - // 读取服务端的响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil { - fmt.Println("Failed to read response from server:", err) - return - } - fmt.Println("n", n) + /* // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n)*/ } var data = []byte{ From 5e60434b6005446cf316992317b57f261fe6ad0c Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 15 Aug 2024 14:38:21 +0800 Subject: [PATCH 016/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 445c2c2..1fcb37e 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -101,7 +101,6 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte func() { machinedoll.ForwardStop(conn) }, } Process(conn, f1, f2) - //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Forward}, []DoneFunc{machinedoll.ForwardStop}, false) case 3: //向左移动 f1 := []func(){ @@ -111,7 +110,6 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte func() { machinedoll.LeftStop(conn) }, } Process(conn, f1, f2) - //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Left}, []DoneFunc{machinedoll.LeftStop}, false) case 4: //向右移动 f1 := []func(){ @@ -121,10 +119,8 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte func() { machinedoll.RightStop(conn) }, } Process(conn, f1, f2) - //Process(conn, 200*time.Millisecond, []DoneFunc{machinedoll.Right}, []DoneFunc{machinedoll.RightStop}, false) case 5: //投币 - //Process(conn, 0*time.Millisecond, []DoneFunc{machinedoll.Coin}, []DoneFunc{}, false) machinedoll.Coin(conn) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } @@ -152,7 +148,6 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf } f2 := []func(){} Process(conn, f1, f2) - //Process(conn, 0, []DoneFunc{machinedoll.WeakGrab}, []DoneFunc{send}, false) case 2: //强力抓 f1 := []func(){ @@ -160,9 +155,7 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf } f2 := []func(){} Process(conn, f1, f2) - //Process(conn, 0, []DoneFunc{machinedoll.Grab}, []DoneFunc{send}, false) } - //go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) err := conn.SetDeadline(time.Now().Add(15 * time.Second)) if err != nil { fmt.Println("Error setting deadline:", err) From 6b8e24cba35615d85e87bbabc0e062b61c78b233 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 15 Aug 2024 16:07:50 +0800 Subject: [PATCH 017/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=8A=95?= =?UTF-8?q?=E5=B8=81=E6=B6=88=E6=81=AF=E5=8A=A0=E5=85=A5=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 1fcb37e..f6f1771 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -121,7 +121,13 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, f1, f2) case 5: //投币 - machinedoll.Coin(conn) + f1 := []func(){ + func() { machinedoll.Coin(conn) }, + } + f2 := []func(){ + func() {}, + } + Process(conn, f1, f2) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } return nil From 37f6b4163e95706bd4f841e58a0337cc3f8f13e1 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 15 Aug 2024 18:35:22 +0800 Subject: [PATCH 018/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 11 +++++++---- machine/machinedoll/machinemgr.go | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index f6f1771..373f439 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -62,10 +62,7 @@ func processConnMessageQueue(queue *ConnMessageQueue) { return true }, nil, 200*time.Millisecond) }() - } - - queue.waitGroup.Wait() } } @@ -172,6 +169,7 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf // 监听抓取结果返回 func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid, id int32) { + num := 1 for { // 读取数据 fmt.Println("监听抓取结果返回!") @@ -181,7 +179,12 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid fmt.Println("Failed to read response from client:", err) return } - + if n != 0 && num == 1 { + num += 1 + fmt.Println("清除脏数据!!!!!!!!!!!!!buf = ", buf[:n]) + continue + } + num++ // 将读取到的数据按照 221 进行分割 parts := bytes.Split(buf[:n], []byte{221}) fmt.Println("获取到的返回值:", parts) diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index 3c6827d..efaaf73 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -96,6 +96,7 @@ func (this *MachineManager) Update() { delConn = append(delConn, v) v.Close() logger.Logger.Tracef("断开连接:%v", v.Addr) + fmt.Println("娃娃机断开连接!!!!!!!!!!!") this.UpdateToGameServer(v, 0) } } @@ -115,6 +116,7 @@ func (this *MachineManager) Update() { continue } logger.Logger.Tracef("重连成功:%v", addr) + fmt.Println("娃娃机重连成功!!!!!!!!!!!") delIds = append(delIds, &Conn{ Id: id, Conn: conn, From 7a2c11d92e394fe7138dd3a6537f11d377797e7a Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 16 Aug 2024 09:10:15 +0800 Subject: [PATCH 019/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 373f439..68ad3b6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -3,6 +3,7 @@ package action import ( "bytes" "fmt" + "math" "mongo.games.com/game/machine/machinedoll" "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" @@ -169,7 +170,7 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf // 监听抓取结果返回 func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid, id int32) { - num := 1 + num := int64(1) for { // 读取数据 fmt.Println("监听抓取结果返回!") @@ -179,12 +180,6 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid fmt.Println("Failed to read response from client:", err) return } - if n != 0 && num == 1 { - num += 1 - fmt.Println("清除脏数据!!!!!!!!!!!!!buf = ", buf[:n]) - continue - } - num++ // 将读取到的数据按照 221 进行分割 parts := bytes.Split(buf[:n], []byte{221}) fmt.Println("获取到的返回值:", parts) @@ -195,7 +190,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid if len(part) > 0 { part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 fmt.Println("比较返回结果 part = ", part) - if bytes.Contains(part, instruction) { + if bytes.Contains(part, instruction) && num != 1 { fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) @@ -213,7 +208,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid conn.SetDeadline(time.Time{}) return } - if bytes.Contains(part, instruction1) { + if bytes.Contains(part, instruction1) && num != 1 { fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) @@ -257,6 +252,10 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid } } } + num++ + if num >= math.MaxInt64 { + num = 2 + } } } From 3b2c207627d49170df0d80a12d754adf86b4e293 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 16 Aug 2024 10:58:45 +0800 Subject: [PATCH 020/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/command.go | 91 ++++++++++--------------------- machine/machinedoll/machinemgr.go | 2 + 2 files changed, 31 insertions(+), 62 deletions(-) diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index ad56c9a..745b590 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -335,7 +335,7 @@ func queryBaseParam(conn net.Conn) { func SetPower(conn net.Conn) { data[3] = 0x01 fmt.Println("data.len = ", len(data)) - instruction := []byte{0xAA, 0x04, 0x01, 0x06} + instruction := []byte{0xAA, 0x33, 0x01, 0x06} instruction = append(instruction, data...) instruction = CalculateChecksum(instruction) _, err := conn.Write(instruction) @@ -353,10 +353,35 @@ func SetPower(conn net.Conn) { fmt.Println("n", n)*/ } +// 基础设置 +func SetBaseParam(conn net.Conn) { + instruction := []byte{0xAA, 0x33, 0x01, 0x06} + instruction = append(instruction, data...) + instruction = CalculateChecksum(instruction) + _, err := conn.Write(instruction) + if err != nil { + fmt.Println("Failed to send command to server:", err) + return + } + // 读取服务端的响应 + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Failed to read response from server:", err) + return + } + fmt.Println("n", n) + if buf[4] == 1 { + fmt.Println("设置成功!") + } else { + fmt.Println("设置失败!") + } +} + var data = []byte{ 0x65, //0 几币几玩 0x00, //1 几币几玩占用位 - 0x1E, //2 游戏时间 + 0x2D, //2 游戏时间 0x00, //3 出奖模式 0x0F, //4 出奖概率 0x00, //5 出奖概率占用位 @@ -380,8 +405,8 @@ var data = []byte{ 0x32, //21 前后速度 0x32, //22 左右速度 0x50, //23 上下速度 - 0x34, //24 放线长度 - 0x08, //25 放线长度占用位 + 0x9A, //24 放线长度 + 0x06, //25 放线长度占用位 0x00, //26 礼品下放高度 0x00, //27 礼品下放高度占用位 0x00, //28 甩抓长度 @@ -407,61 +432,3 @@ var data = []byte{ 0x08, //46 游戏音乐选择 0x00, //47 概率队列自动 } - -/* -var data = []byte{ - 101, //0 几币几玩 - 0, //1 几币几玩占用位 - 30, //2 游戏时间 - 0, //3 出奖模式0无概率 1随机模式 2固定模式 3冠兴模式 - 15, //4 出奖概率 - 0, //5 出奖概率占用位 - 1, //6 空中抓物 0关闭 1开启 - 0, //7 连续投币赠送 范围0~100 - 0, //8 保夹次数 范围0~6, 6为无限次 - 1, //9 保夹赠送模式 0送游戏 1送中奖 2送游戏和中奖 - - 200, //10 强抓力电压 - 0, //11 强抓力电压占用位 - 124, //12 中抓力电压 - 1, //13 中抓力电压占用位 - 90, //14 弱抓力电压 - 0, //15 弱抓力电压占用位 - 224, //16 中奖电压 - 1, //17 中奖电压占用位 - 200, //18 强抓力时间 - 0, //19 强抓力时间占用位 - - 20, //20 放抓时间 - 50, //21 前后速度 - 50, //22 左右速度 - 80, //23 上下速度 - 52, //24 放线长度 - 8, //25 放线长度占用位 - 0, //26 礼品下放高度 - 0, //27 礼品下放高度占用位 - 0, //28 甩抓长度 - 0, //29 甩抓保护 - - 120, //30 甩抓电压 - 0, //31 甩抓电压占用位 - 50, //32 上拉保护 - 2, //33 天车自救时间 - 0, //34 下抓延时 - 0, //35 下抓延时占用位 - 200, //36 抓物延时 - 0, //37 抓物延时占用位 - 150, //38 上停延时 - 0, //39 上停延时占用位 - - 0, //40 摇杆延时 - 0, //41 摇杆延时占用位 - 0, //42 抓物二收 - 1, //43 待机音乐开关 - 15, //44 音量大小调整 - 7, //45 待机音乐选择 - 8, //46 游戏音乐选择 - 0, //47 概率队列自动 -} - -*/ diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index efaaf73..57ad3d2 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -74,6 +74,8 @@ func (this *MachineManager) Init() { Conn: conn, Addr: addr, } + SetBaseParam(conn) + fmt.Println("设置每台娃娃机基础配置!") } /* fmt.Println("Connected to server:\n", this.ConnMap[1].RemoteAddr()) From 33e82b00951c68c259a0265559c5ab8d136b7520 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 16 Aug 2024 18:05:45 +0800 Subject: [PATCH 021/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 68ad3b6..f044962 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -160,11 +160,6 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf f2 := []func(){} Process(conn, f1, f2) } - err := conn.SetDeadline(time.Now().Add(15 * time.Second)) - if err != nil { - fmt.Println("Error setting deadline:", err) - return err - } return nil } @@ -205,7 +200,6 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid TypeId: 2, }) fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid) - conn.SetDeadline(time.Time{}) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -223,7 +217,6 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid TypeId: 2, }) fmt.Println("抓到礼品了!!!!!!!!snid = ", snid) - conn.SetDeadline(time.Time{}) return } //上分成功 From b5e23404c0f47a80c502ae23473adbae613f31be Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 16 Aug 2024 18:24:05 +0800 Subject: [PATCH 022/153] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=9F=B3=E4=B9=90?= =?UTF-8?q?=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/command.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index 745b590..bde15af 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -427,7 +427,7 @@ var data = []byte{ 0x00, //41 摇杆延时占用位 0x00, //42 抓物二收 0x00, //43 待机音乐开关 - 0x0F, //44 音量大小调整 + 0x00, //44 音量大小调整 0x07, //45 待机音乐选择 0x08, //46 游戏音乐选择 0x00, //47 概率队列自动 From 88db5712d897ec2a8f491cb626ca515502efb2d4 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 22 Aug 2024 15:43:28 +0800 Subject: [PATCH 023/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 61 ++++++++ machine/action/action_server.go | 45 +++++- protocol/clawdoll/clawdoll.pb.go | 211 +++++++++++++++++++++++----- protocol/clawdoll/clawdoll.proto | 11 ++ protocol/machine/machine.pb.go | 209 ++++++++++++++++++++++++--- protocol/machine/machine.proto | 13 ++ 6 files changed, 494 insertions(+), 56 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 2340d03..6cd153c 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -69,8 +69,69 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data } return nil } + +type CSGetTokenPacketFactory struct { +} + +type CSGetTokenHandler struct { +} + +func (f *CSGetTokenPacketFactory) CreatePacket() interface{} { + pack := &clawdoll.CSCLAWDOLLGetToken{} + return pack +} + +func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { + //转发到娃娃机主机 + logger.Logger.Tracef("CSGetTokenHandler") + if msg, ok := data.(*clawdoll.CSCLAWDOLLGetToken); ok { + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSGetTokenHandler p == nil") + return nil + } + pack := &machine.SMGetToken{} + pack.Snid = p.SnId + pack.AppId = msg.Appid + pack.ServerSecret = msg.ServerSecret + scene := p.GetScene() + if scene == nil { + return nil + } + sceneEx, ok := scene.ExtraData.(*SceneEx) + if !ok { + return nil + } + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) + } + return nil +} + +// 娃娃机返回token 通知客户端 +func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("MSSendTokenHandler") + if msg, ok := data.(*machine.MSSendToken); ok { + //给客户端返回token + token := msg.Token + p := base.PlayerMgrSington.GetPlayer(int64(msg.Snid)) + if p == nil { + logger.Logger.Warn("MSSendTokenHandler p == nil") + return nil + } + pack := &clawdoll.SCCLAWDOLLSendToken{ + Token: token, + } + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_SENDTOKEN), pack) + } + return nil +} func init() { common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpHandler{}) netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) + //客户端请求token + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSGetTokenHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSGetTokenPacketFactory{}) + //获取token返回 + netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler) } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index f044962..f102677 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -3,6 +3,7 @@ package action import ( "bytes" "fmt" + "github.com/zegoim/zego_server_assistant/token/go/src/token04" "math" "mongo.games.com/game/machine/machinedoll" "mongo.games.com/game/protocol/machine" @@ -199,7 +200,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 2, }) - fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid) + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -216,7 +217,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 2, }) - fmt.Println("抓到礼品了!!!!!!!!snid = ", snid) + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 @@ -267,9 +268,49 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", msg) return nil } + +// 获取进入视频房间token +func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("SMGetTokenHandler %v", data) + msg, ok := data.(*machine.SMGetToken) + if !ok { + return nil + } + // 请将 appId 修改为你的 appId,appid 为数字,从即构控制台获取 + // 举例:1234567890 + var appId uint32 = uint32(msg.GetAppId()) + + // 请修改为你的 serverSecret,serverSecret 为字符串,从即构控制台获取 + // 举例: "fa94dd0f974cf2e293728a526b028271" + serverSecret := msg.ServerSecret + + // 请将 userId 修改为用户的 user_id + userId := msg.GetSnid() + + // token 的有效时长,单位:秒 + var effectiveTimeInSeconds int64 = 3600 + // token业务认证扩展,基础鉴权token此处填空字符串 + var payload string = "" + + //生成token + token, err := token04.GenerateToken04(appId, string(userId), serverSecret, effectiveTimeInSeconds, payload) + if err != nil { + fmt.Println(err) + return err + } + fmt.Println(token) + info := &machine.MSSendToken{} + info.Snid = msg.Snid + info.Token = token + session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) + logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", info) + return nil +} + func init() { netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), &machine.SMDollMachineoPerate{}, SMDollMachinePerateHandler) netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.SMDollMachineGrab{}, SMDollMachineGrabHandler) //链接成功 返回消息 netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}, SMGameLinkSucceedHandler) + netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGetToken), &machine.SMGetToken{}, SMGetTokenHandler) } diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 437be49..30f9f00 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -33,6 +33,8 @@ const ( CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerEnter CLAWDOLLPacketID = 5606 // 玩家进入 CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerLeave CLAWDOLLPacketID = 5607 // 玩家离开 CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PLAYERINFO CLAWDOLLPacketID = 5608 // 玩家状态信息变化 + CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN CLAWDOLLPacketID = 5609 // 获取token + CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_SENDTOKEN CLAWDOLLPacketID = 5610 // 获取token ) // Enum value maps for CLAWDOLLPacketID. @@ -47,6 +49,8 @@ var ( 5606: "PACKET_SC_CLAWDOLL_PlayerEnter", 5607: "PACKET_SC_CLAWDOLL_PlayerLeave", 5608: "PACKET_SC_CLAWDOLL_PLAYERINFO", + 5609: "PACKET_CS_CLAWDOLL_GETTOKEN", + 5610: "PACKET_SC_CLAWDOLL_SENDTOKEN", } CLAWDOLLPacketID_value = map[string]int32{ "PACKET_CLAWDOLL_ZERO": 0, @@ -58,6 +62,8 @@ var ( "PACKET_SC_CLAWDOLL_PlayerEnter": 5606, "PACKET_SC_CLAWDOLL_PlayerLeave": 5607, "PACKET_SC_CLAWDOLL_PLAYERINFO": 5608, + "PACKET_CS_CLAWDOLL_GETTOKEN": 5609, + "PACKET_SC_CLAWDOLL_SENDTOKEN": 5610, } ) @@ -806,6 +812,109 @@ func (x *SCCLAWDOLLPlayerLeave) GetPos() int32 { return 0 } +//玩家请求进入视频地址token +type CSCLAWDOLLGetToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Appid int64 `protobuf:"varint,1,opt,name=Appid,proto3" json:"Appid,omitempty"` + ServerSecret string `protobuf:"bytes,2,opt,name=serverSecret,proto3" json:"serverSecret,omitempty"` +} + +func (x *CSCLAWDOLLGetToken) Reset() { + *x = CSCLAWDOLLGetToken{} + if protoimpl.UnsafeEnabled { + mi := &file_clawdoll_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSCLAWDOLLGetToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSCLAWDOLLGetToken) ProtoMessage() {} + +func (x *CSCLAWDOLLGetToken) ProtoReflect() protoreflect.Message { + mi := &file_clawdoll_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSCLAWDOLLGetToken.ProtoReflect.Descriptor instead. +func (*CSCLAWDOLLGetToken) Descriptor() ([]byte, []int) { + return file_clawdoll_proto_rawDescGZIP(), []int{9} +} + +func (x *CSCLAWDOLLGetToken) GetAppid() int64 { + if x != nil { + return x.Appid + } + return 0 +} + +func (x *CSCLAWDOLLGetToken) GetServerSecret() string { + if x != nil { + return x.ServerSecret + } + return "" +} + +type SCCLAWDOLLSendToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=Token,proto3" json:"Token,omitempty"` +} + +func (x *SCCLAWDOLLSendToken) Reset() { + *x = SCCLAWDOLLSendToken{} + if protoimpl.UnsafeEnabled { + mi := &file_clawdoll_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCCLAWDOLLSendToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCCLAWDOLLSendToken) ProtoMessage() {} + +func (x *SCCLAWDOLLSendToken) ProtoReflect() protoreflect.Message { + mi := &file_clawdoll_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCCLAWDOLLSendToken.ProtoReflect.Descriptor instead. +func (*SCCLAWDOLLSendToken) Descriptor() ([]byte, []int) { + return file_clawdoll_proto_rawDescGZIP(), []int{10} +} + +func (x *SCCLAWDOLLSendToken) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + var File_clawdoll_proto protoreflect.FileDescriptor var file_clawdoll_proto_rawDesc = []byte{ @@ -886,37 +995,49 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x2a, 0xc7, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, - 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, + 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, + 0x70, 0x70, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, + 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x8c, 0x03, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x5a, 0x45, + 0x52, 0x4f, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x22, 0x0a, + 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, + 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, + 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x21, 0x0a, - 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, - 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, - 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, - 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, - 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x22, - 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0xe8, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, - 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, - 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, - 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, - 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, + 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, + 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, + 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, + 0x4e, 0x10, 0xea, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, + 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, + 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, + 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, + 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, + 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, + 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -932,7 +1053,7 @@ func file_clawdoll_proto_rawDescGZIP() []byte { } var file_clawdoll_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_clawdoll_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_clawdoll_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_clawdoll_proto_goTypes = []interface{}{ (CLAWDOLLPacketID)(0), // 0: clawdoll.CLAWDOLLPacketID (OpResultCode)(0), // 1: clawdoll.OpResultCode @@ -945,6 +1066,8 @@ var file_clawdoll_proto_goTypes = []interface{}{ (*SCCLAWDOLLPlayerInfo)(nil), // 8: clawdoll.SCCLAWDOLLPlayerInfo (*SCCLAWDOLLPlayerEnter)(nil), // 9: clawdoll.SCCLAWDOLLPlayerEnter (*SCCLAWDOLLPlayerLeave)(nil), // 10: clawdoll.SCCLAWDOLLPlayerLeave + (*CSCLAWDOLLGetToken)(nil), // 11: clawdoll.CSCLAWDOLLGetToken + (*SCCLAWDOLLSendToken)(nil), // 12: clawdoll.SCCLAWDOLLSendToken } var file_clawdoll_proto_depIdxs = []int32{ 2, // 0: clawdoll.SCCLAWDOLLRoomInfo.Players:type_name -> clawdoll.CLAWDOLLPlayerData @@ -1071,6 +1194,30 @@ func file_clawdoll_proto_init() { return nil } } + file_clawdoll_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSCLAWDOLLGetToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clawdoll_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCCLAWDOLLSendToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1078,7 +1225,7 @@ func file_clawdoll_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_clawdoll_proto_rawDesc, NumEnums: 2, - NumMessages: 9, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index 579ae56..a2d08c4 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -13,6 +13,8 @@ enum CLAWDOLLPacketID { PACKET_SC_CLAWDOLL_PlayerEnter = 5606; // 玩家进入 PACKET_SC_CLAWDOLL_PlayerLeave = 5607; // 玩家离开 PACKET_SC_CLAWDOLL_PLAYERINFO = 5608; // 玩家状态信息变化 + PACKET_CS_CLAWDOLL_GETTOKEN = 5609; // 获取token + PACKET_SC_CLAWDOLL_SENDTOKEN = 5610; // 获取token } //操作结果 @@ -102,4 +104,13 @@ message SCCLAWDOLLPlayerEnter { //PACKET_SCCLAWDOLLPlayerLeave message SCCLAWDOLLPlayerLeave { int32 Pos = 1; //玩家位置 +} +//玩家请求进入视频地址token +message CSCLAWDOLLGetToken { + int64 Appid = 1; + string serverSecret = 2; +} + +message SCCLAWDOLLSendToken { + string Token = 1; } \ No newline at end of file diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 65ef2f3..1f7d7f4 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -31,6 +31,8 @@ const ( DollMachinePacketID_PACKET_MSDollMachineList DollMachinePacketID = 20003 DollMachinePacketID_PACKET_MSUpdateDollMachineStatus DollMachinePacketID = 20004 DollMachinePacketID_PACKET_MSDollMachineoPerateResult DollMachinePacketID = 20005 + DollMachinePacketID_PACKET_SMGetToken DollMachinePacketID = 20006 + DollMachinePacketID_PACKET_MSSendToken DollMachinePacketID = 20007 ) // Enum value maps for DollMachinePacketID. @@ -43,6 +45,8 @@ var ( 20003: "PACKET_MSDollMachineList", 20004: "PACKET_MSUpdateDollMachineStatus", 20005: "PACKET_MSDollMachineoPerateResult", + 20006: "PACKET_SMGetToken", + 20007: "PACKET_MSSendToken", } DollMachinePacketID_value = map[string]int32{ "PACKET_SMDollMachineZero": 0, @@ -52,6 +56,8 @@ var ( "PACKET_MSDollMachineList": 20003, "PACKET_MSUpdateDollMachineStatus": 20004, "PACKET_MSDollMachineoPerateResult": 20005, + "PACKET_SMGetToken": 20006, + "PACKET_MSSendToken": 20007, } ) @@ -490,6 +496,126 @@ func (x *MSUpdateDollMachineStatus) GetVideoAddr() string { return "" } +//获取token +type SMGetToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` + AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` + ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` +} + +func (x *SMGetToken) Reset() { + *x = SMGetToken{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SMGetToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SMGetToken) ProtoMessage() {} + +func (x *SMGetToken) ProtoReflect() protoreflect.Message { + mi := &file_machine_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SMGetToken.ProtoReflect.Descriptor instead. +func (*SMGetToken) Descriptor() ([]byte, []int) { + return file_machine_proto_rawDescGZIP(), []int{7} +} + +func (x *SMGetToken) GetSnid() int32 { + if x != nil { + return x.Snid + } + return 0 +} + +func (x *SMGetToken) GetAppId() int64 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *SMGetToken) GetServerSecret() string { + if x != nil { + return x.ServerSecret + } + return "" +} + +//返回token +type MSSendToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` + Token string `protobuf:"bytes,2,opt,name=Token,proto3" json:"Token,omitempty"` +} + +func (x *MSSendToken) Reset() { + *x = MSSendToken{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MSSendToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MSSendToken) ProtoMessage() {} + +func (x *MSSendToken) ProtoReflect() protoreflect.Message { + mi := &file_machine_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MSSendToken.ProtoReflect.Descriptor instead. +func (*MSSendToken) Descriptor() ([]byte, []int) { + return file_machine_proto_rawDescGZIP(), []int{8} +} + +func (x *MSSendToken) GetSnid() int32 { + if x != nil { + return x.Snid + } + return 0 +} + +func (x *MSSendToken) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -527,26 +653,39 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x2a, 0x86, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, - 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, - 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, - 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x64, 0x72, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, + 0x37, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, + 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, + 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, + 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, + 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, + 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, + 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, + 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, + 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -562,7 +701,7 @@ func file_machine_proto_rawDescGZIP() []byte { } var file_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_machine_proto_goTypes = []interface{}{ (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed @@ -572,6 +711,8 @@ var file_machine_proto_goTypes = []interface{}{ (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList (*DollMachine)(nil), // 6: machine.DollMachine (*MSUpdateDollMachineStatus)(nil), // 7: machine.MSUpdateDollMachineStatus + (*SMGetToken)(nil), // 8: machine.SMGetToken + (*MSSendToken)(nil), // 9: machine.MSSendToken } var file_machine_proto_depIdxs = []int32{ 6, // 0: machine.MSDollMachineList.data:type_name -> machine.DollMachine @@ -672,6 +813,30 @@ func file_machine_proto_init() { return nil } } + file_machine_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SMGetToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_machine_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MSSendToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -679,7 +844,7 @@ func file_machine_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_machine_proto_rawDesc, NumEnums: 1, - NumMessages: 7, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 1e4933d..a5b5e5c 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -13,6 +13,8 @@ enum DollMachinePacketID { PACKET_MSDollMachineList = 20003; PACKET_MSUpdateDollMachineStatus = 20004; PACKET_MSDollMachineoPerateResult = 20005; + PACKET_SMGetToken = 20006; + PACKET_MSSendToken = 20007; } //通知链接成功 //PACKET_SMDollMachinePerate @@ -56,4 +58,15 @@ message MSUpdateDollMachineStatus{ int32 Id = 1; int32 Status = 2; //1-空闲 0-无法使用 string VideoAddr = 3; +} +//获取token +message SMGetToken{ + int32 Snid = 1; + int64 AppId = 2; + string ServerSecret = 3; +} +//返回token +message MSSendToken{ + int32 Snid = 1; + string Token = 2; } \ No newline at end of file From b98b2246eb4aef06d56a276e4b137c8dc14cd87c Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 23 Aug 2024 16:35:58 +0800 Subject: [PATCH 024/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index f102677..f42592d 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -303,7 +303,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info.Snid = msg.Snid info.Token = token session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) - logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", info) + logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) return nil } From 4c0c6f7c2b42f9d99effffdb51f96d5f23e140dc Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 23 Aug 2024 18:10:22 +0800 Subject: [PATCH 025/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/keyconf.go | 2 + model/config.go | 32 ++- protocol/webapi/common.pb.go | 518 ++++++++++++++++++++++++++++------- protocol/webapi/common.proto | 29 ++ worldsrv/etcd.go | 161 ++++++++++- 5 files changed, 626 insertions(+), 116 deletions(-) diff --git a/etcd/keyconf.go b/etcd/keyconf.go index 1dc4fd5..0f1813b 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -41,4 +41,6 @@ const ( ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众 ETCDKEY_Spirit = "/game/spirit" // 小精灵配置 + ETCDKEY_RoomType = "/game/room_type" // 房间类型配置 + ETCDKEY_RoomConfig = "/game/room_config" // 房间配置 ) diff --git a/model/config.go b/model/config.go index f3336f8..e60e6fa 100644 --- a/model/config.go +++ b/model/config.go @@ -1,10 +1,13 @@ package model import ( + "strconv" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/protocol/shop" "mongo.games.com/game/protocol/webapi" - "strconv" ) /* @@ -138,6 +141,10 @@ type AllConfig struct { MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 key: 玩家id // 小精灵配置 *webapi.SpiritConfig + // 房卡场房间类型 + RoomType map[int32]*webapi.RoomType // key: 房间类型id + // 房卡场房间配置 + RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id } type GlobalConfig struct { @@ -167,6 +174,8 @@ func (cm *ConfigMgr) GetConfig(platform string) *AllConfig { ShopInfos: make(map[int32]*ShopInfo), ChannelSwitch: make(map[int32]*webapi.ChannelSwitchConfig), MatchAudience: make(map[int32]*webapi.MatchAudience), + RoomType: make(map[int32]*webapi.RoomType), + RoomConfig: make(map[int32]*webapi.RoomConfig), } cm.platform[platform] = c } @@ -366,8 +375,9 @@ func (cm *ConfigMgr) AddMatchAudience(d *webapi.MatchAudience) { cfg.MatchAudience[d.GetSnId()] = d } -func (cm *ConfigMgr) DelMatchAudience(d *webapi.MatchAudience) { - delete(cm.GetConfig(d.Platform).MatchAudience, d.GetSnId()) +func (cm *ConfigMgr) DelMatchAudience(plt string, snid int32) { + logger.Logger.Tracef("del match audience plt:%s, snid:%d", plt, snid) + delete(cm.GetConfig(plt).MatchAudience, snid) } // IsMatchAudience 是不是比赛场观众 @@ -375,3 +385,19 @@ func (cm *ConfigMgr) IsMatchAudience(plt string, snId int32) bool { _, ok := cm.GetConfig(plt).MatchAudience[snId] return ok } + +func (cm *ConfigMgr) UpdateRoomType(data *webapi.RoomType) { + cm.GetConfig(data.GetPlatform()).RoomType[data.GetId()] = data +} + +func (cm *ConfigMgr) DelRoomType(plt string, id int32) { + delete(cm.GetConfig(plt).RoomType, id) +} + +func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { + cm.GetConfig(data.GetPlatform()).RoomConfig[data.GetId()] = data +} + +func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { + delete(cm.GetConfig(plt).RoomConfig, id) +} diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index cecb617..d672d3c 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8273,6 +8273,254 @@ func (x *SpiritConfig) GetUrl() string { return "" } +// etcd /game/room_type +type RoomType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置ID + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 类型名称 + On int32 `protobuf:"varint,4,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,5,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID +} + +func (x *RoomType) Reset() { + *x = RoomType{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomType) ProtoMessage() {} + +func (x *RoomType) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[88] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoomType.ProtoReflect.Descriptor instead. +func (*RoomType) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{88} +} + +func (x *RoomType) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *RoomType) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomType) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomType) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +// etcd /game/room_config +type RoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置id + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 配置名称 + RoomType int32 `protobuf:"varint,4,opt,name=RoomType,proto3" json:"RoomType,omitempty"` // 房间类型id + On int32 `protobuf:"varint,5,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,6,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + Cost []*ItemInfo `protobuf:"bytes,7,rep,name=Cost,proto3" json:"Cost,omitempty"` // 进入房间消耗 + Reward []*ItemInfo `protobuf:"bytes,8,rep,name=Reward,proto3" json:"Reward,omitempty"` // 进入房间奖励 + OnChannelName []string `protobuf:"bytes,9,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 + GameFreeId []int32 `protobuf:"varint,10,rep,packed,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + Round []int32 `protobuf:"varint,11,rep,packed,name=Round,proto3" json:"Round,omitempty"` // 局数 + PlayerNum []int32 `protobuf:"varint,12,rep,packed,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 人数 + NeedPassword int32 `protobuf:"varint,13,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` // 是否需要密码 1是 2否 3自定义 + CostType int32 `protobuf:"varint,14,opt,name=CostType,proto3" json:"CostType,omitempty"` // 消耗类型 1AA 2房主 3自定义 + Voice int32 `protobuf:"varint,15,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1是 2否 3自定义 + ImageURI string `protobuf:"bytes,16,opt,name=ImageURI,proto3" json:"ImageURI,omitempty"` // 奖励图片 +} + +func (x *RoomConfig) Reset() { + *x = RoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomConfig) ProtoMessage() {} + +func (x *RoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[89] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoomConfig.ProtoReflect.Descriptor instead. +func (*RoomConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{89} +} + +func (x *RoomConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *RoomConfig) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomConfig) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomConfig) GetRoomType() int32 { + if x != nil { + return x.RoomType + } + return 0 +} + +func (x *RoomConfig) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomConfig) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomConfig) GetCost() []*ItemInfo { + if x != nil { + return x.Cost + } + return nil +} + +func (x *RoomConfig) GetReward() []*ItemInfo { + if x != nil { + return x.Reward + } + return nil +} + +func (x *RoomConfig) GetOnChannelName() []string { + if x != nil { + return x.OnChannelName + } + return nil +} + +func (x *RoomConfig) GetGameFreeId() []int32 { + if x != nil { + return x.GameFreeId + } + return nil +} + +func (x *RoomConfig) GetRound() []int32 { + if x != nil { + return x.Round + } + return nil +} + +func (x *RoomConfig) GetPlayerNum() []int32 { + if x != nil { + return x.PlayerNum + } + return nil +} + +func (x *RoomConfig) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *RoomConfig) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomConfig) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *RoomConfig) GetImageURI() string { + if x != nil { + return x.ImageURI + } + return "" +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -9569,10 +9817,46 @@ var file_common_proto_rawDesc = []byte{ 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, + 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, + 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, + 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, + 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9587,7 +9871,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 98) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 100) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -9677,105 +9961,109 @@ var file_common_proto_goTypes = []interface{}{ (*GuideConfig)(nil), // 85: webapi.GuideConfig (*MatchAudience)(nil), // 86: webapi.MatchAudience (*SpiritConfig)(nil), // 87: webapi.SpiritConfig - nil, // 88: webapi.Platform.BindTelRewardEntry - nil, // 89: webapi.PlayerData.RankScoreEntry - nil, // 90: webapi.ItemShop.AwardEntry - nil, // 91: webapi.VIPcfg.AwardEntry - nil, // 92: webapi.VIPcfg.Privilege1Entry - nil, // 93: webapi.VIPcfg.Privilege7Entry - nil, // 94: webapi.VIPcfg.Privilege9Entry - nil, // 95: webapi.ActInviteConfig.PayScoreEntry - nil, // 96: webapi.SkinLevel.UpItemEntry - nil, // 97: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 98: server.DB_GameFree - (*server.DB_GameItem)(nil), // 99: server.DB_GameItem + (*RoomType)(nil), // 88: webapi.RoomType + (*RoomConfig)(nil), // 89: webapi.RoomConfig + nil, // 90: webapi.Platform.BindTelRewardEntry + nil, // 91: webapi.PlayerData.RankScoreEntry + nil, // 92: webapi.ItemShop.AwardEntry + nil, // 93: webapi.VIPcfg.AwardEntry + nil, // 94: webapi.VIPcfg.Privilege1Entry + nil, // 95: webapi.VIPcfg.Privilege7Entry + nil, // 96: webapi.VIPcfg.Privilege9Entry + nil, // 97: webapi.ActInviteConfig.PayScoreEntry + nil, // 98: webapi.SkinLevel.UpItemEntry + nil, // 99: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 100: server.DB_GameFree + (*server.DB_GameItem)(nil), // 101: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ - 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch - 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig - 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 88, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry - 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 98, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree - 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree - 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting - 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting - 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 98, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 89, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry - 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo - 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo - 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo - 14, // 15: webapi.PlayerData.PetSkillUnlockList:type_name -> webapi.ModInfo - 14, // 16: webapi.PlayerData.SkinUnlockList:type_name -> webapi.ModInfo - 21, // 17: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt - 23, // 18: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice - 27, // 19: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType - 26, // 20: webapi.ExchangeShop.TelData:type_name -> webapi.TelChargeData - 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo - 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop - 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 90, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry - 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop - 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo - 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward - 32, // 28: webapi.GameMatchDate.SignupCostItem:type_name -> webapi.ItemInfo - 34, // 29: webapi.GameMatchDateList.List:type_name -> webapi.GameMatchDate - 36, // 30: webapi.GameMatchType.List:type_name -> webapi.MatchTypeInfo - 38, // 31: webapi.WelfareTurnplateDate.Date:type_name -> webapi.WelfareDate - 39, // 32: webapi.WelfareTurnplateDateList.List:type_name -> webapi.WelfareTurnplateDate - 40, // 33: webapi.WelfareTurnplateDateList.RateList:type_name -> webapi.WelfareTurnplateRate - 38, // 34: webapi.AddUpWelfareDate.AddUpDate:type_name -> webapi.WelfareDate - 38, // 35: webapi.Welfare7SignDate.Date:type_name -> webapi.WelfareDate - 42, // 36: webapi.Welfare7SignDate.AddUpDate:type_name -> webapi.AddUpWelfareDate - 42, // 37: webapi.Welfare7SignDate.AddUpDate2:type_name -> webapi.AddUpWelfareDate - 42, // 38: webapi.Welfare7SignDate.AddUpDate2Google:type_name -> webapi.AddUpWelfareDate - 43, // 39: webapi.Welfare7SignDate.AddUpDate2Type:type_name -> webapi.AddUpDate2TypeData - 44, // 40: webapi.Welfare7SignDateList.List:type_name -> webapi.Welfare7SignDate - 46, // 41: webapi.WelfareBlindBoxDataList.List:type_name -> webapi.BlindBoxData - 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate - 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree - 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 91, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 92, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 93, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 94, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry - 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg - 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate - 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 95, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry - 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward - 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward - 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward - 32, // 56: webapi.PermitLevelConfig.Award1:type_name -> webapi.ItemInfo - 32, // 57: webapi.PermitLevelConfig.Award2:type_name -> webapi.ItemInfo - 32, // 58: webapi.PermitExchangeConfig.Gain:type_name -> webapi.ItemInfo - 32, // 59: webapi.PermitExchangeConfig.Cost:type_name -> webapi.ItemInfo - 32, // 60: webapi.PermitRankConfig.ItemId:type_name -> webapi.ItemInfo - 64, // 61: webapi.PermitChannelConfig.LevelConfig:type_name -> webapi.PermitLevelConfig - 65, // 62: webapi.PermitChannelConfig.ExchangeConfig:type_name -> webapi.PermitExchangeConfig - 66, // 63: webapi.PermitChannelConfig.RankConfig:type_name -> webapi.PermitRankConfig - 67, // 64: webapi.ActPermitConfig.Configs:type_name -> webapi.PermitChannelConfig - 71, // 65: webapi.DiamondLotteryPlayers.Award:type_name -> webapi.AwardData - 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo - 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers - 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 99, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem - 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo - 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo - 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 96, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 97, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry - 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel - 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem - 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData - 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo - 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo - 80, // [80:80] is the sub-list for method output_type - 80, // [80:80] is the sub-list for method input_type - 80, // [80:80] is the sub-list for extension type_name - 80, // [80:80] is the sub-list for extension extendee - 0, // [0:80] is the sub-list for field type_name + 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch + 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig + 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame + 90, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus + 100, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree + 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting + 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting + 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting + 100, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 91, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo + 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo + 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo + 14, // 15: webapi.PlayerData.PetSkillUnlockList:type_name -> webapi.ModInfo + 14, // 16: webapi.PlayerData.SkinUnlockList:type_name -> webapi.ModInfo + 21, // 17: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt + 23, // 18: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice + 27, // 19: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType + 26, // 20: webapi.ExchangeShop.TelData:type_name -> webapi.TelChargeData + 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo + 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop + 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight + 92, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop + 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo + 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward + 32, // 28: webapi.GameMatchDate.SignupCostItem:type_name -> webapi.ItemInfo + 34, // 29: webapi.GameMatchDateList.List:type_name -> webapi.GameMatchDate + 36, // 30: webapi.GameMatchType.List:type_name -> webapi.MatchTypeInfo + 38, // 31: webapi.WelfareTurnplateDate.Date:type_name -> webapi.WelfareDate + 39, // 32: webapi.WelfareTurnplateDateList.List:type_name -> webapi.WelfareTurnplateDate + 40, // 33: webapi.WelfareTurnplateDateList.RateList:type_name -> webapi.WelfareTurnplateRate + 38, // 34: webapi.AddUpWelfareDate.AddUpDate:type_name -> webapi.WelfareDate + 38, // 35: webapi.Welfare7SignDate.Date:type_name -> webapi.WelfareDate + 42, // 36: webapi.Welfare7SignDate.AddUpDate:type_name -> webapi.AddUpWelfareDate + 42, // 37: webapi.Welfare7SignDate.AddUpDate2:type_name -> webapi.AddUpWelfareDate + 42, // 38: webapi.Welfare7SignDate.AddUpDate2Google:type_name -> webapi.AddUpWelfareDate + 43, // 39: webapi.Welfare7SignDate.AddUpDate2Type:type_name -> webapi.AddUpDate2TypeData + 44, // 40: webapi.Welfare7SignDateList.List:type_name -> webapi.Welfare7SignDate + 46, // 41: webapi.WelfareBlindBoxDataList.List:type_name -> webapi.BlindBoxData + 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate + 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree + 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree + 93, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 94, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 95, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 96, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg + 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate + 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig + 97, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward + 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward + 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward + 32, // 56: webapi.PermitLevelConfig.Award1:type_name -> webapi.ItemInfo + 32, // 57: webapi.PermitLevelConfig.Award2:type_name -> webapi.ItemInfo + 32, // 58: webapi.PermitExchangeConfig.Gain:type_name -> webapi.ItemInfo + 32, // 59: webapi.PermitExchangeConfig.Cost:type_name -> webapi.ItemInfo + 32, // 60: webapi.PermitRankConfig.ItemId:type_name -> webapi.ItemInfo + 64, // 61: webapi.PermitChannelConfig.LevelConfig:type_name -> webapi.PermitLevelConfig + 65, // 62: webapi.PermitChannelConfig.ExchangeConfig:type_name -> webapi.PermitExchangeConfig + 66, // 63: webapi.PermitChannelConfig.RankConfig:type_name -> webapi.PermitRankConfig + 67, // 64: webapi.ActPermitConfig.Configs:type_name -> webapi.PermitChannelConfig + 71, // 65: webapi.DiamondLotteryPlayers.Award:type_name -> webapi.AwardData + 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo + 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers + 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData + 101, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo + 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo + 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo + 98, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 99, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel + 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem + 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData + 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo + 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo + 32, // 80: webapi.RoomConfig.Cost:type_name -> webapi.ItemInfo + 32, // 81: webapi.RoomConfig.Reward:type_name -> webapi.ItemInfo + 82, // [82:82] is the sub-list for method output_type + 82, // [82:82] is the sub-list for method input_type + 82, // [82:82] is the sub-list for extension type_name + 82, // [82:82] is the sub-list for extension extendee + 0, // [0:82] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -10840,6 +11128,30 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10847,7 +11159,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 98, + NumMessages: 100, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index 77e0520..f02ef15 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -904,4 +904,33 @@ message SpiritConfig { string Platform = 1; // 平台 int32 On = 2; // 精灵开关 1开启 2关闭 string Url = 3; +} + +// etcd /game/room_type +message RoomType { + string Platform = 1; // 平台 + int32 Id = 2; // 配置ID + string Name = 3; // 类型名称 + int32 On = 4; // 开关 1开启 2关闭 + int32 SortId = 5; // 排序ID +} + +// etcd /game/room_config +message RoomConfig { + string Platform = 1; // 平台 + int32 Id = 2; // 配置id + string Name = 3; // 配置名称 + int32 RoomType = 4; // 房间类型id + int32 On = 5; // 开关 1开启 2关闭 + int32 SortId = 6; // 排序ID + repeated ItemInfo Cost = 7; // 进入房间消耗 + repeated ItemInfo Reward = 8; // 进入房间奖励 + repeated string OnChannelName = 9; // 开启的渠道名称 + repeated int32 GameFreeId = 10; // 场次id + repeated int32 Round = 11; // 局数 + repeated int32 PlayerNum = 12; // 人数 + int32 NeedPassword = 13; // 是否需要密码 1是 2否 3自定义 + int32 CostType = 14; // 消耗类型 1AA 2房主 3自定义 + int32 Voice = 15; // 是否开启语音 1是 2否 3自定义 + string ImageURI = 16; // 奖励图片 } \ No newline at end of file diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index ba725f7..5eadcbc 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -56,7 +56,7 @@ func init() { // 代理 etcd.Register(etcd.ETCDKEY_PROMOTER_PREFIX, PromoterConfig{}, handlerEvent) // 赠送 - etcd.Register(etcd.ETCDKEY_ACT_GIVE_PREFIX, PromoterConfig{}, handlerEvent) + etcd.Register(etcd.ETCDKEY_ACT_GIVE_PREFIX, ActGivePlateformConfig{}, handlerEvent) // 7日签到 etcd.Register(etcd.ETCDKEY_ACT_7SIGN, webapi.Welfare7SignDateList{}, platformConfigEvent) // 转盘 @@ -93,6 +93,46 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) + + PlatformMgrSingleton.GetConfig("1").RoomType = map[int32]*webapi.RoomType{ + 1: { + Platform: "1", + Id: 1, + Name: "话费赛", + On: 1, + SortId: 1, + }, + } + PlatformMgrSingleton.GetConfig("1").RoomConfig = map[int32]*webapi.RoomConfig{ + 1: { + Platform: "1", + Id: 1, + Name: "1元话费赛", + RoomType: 1, + On: 1, + SortId: 1, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }, + } } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -331,12 +371,43 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e } func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { - if data == nil { - return + var plt string + var param []int + equalFunc := func(key string) bool { + plt = "" + param = param[:0] + if strings.HasPrefix(completeKey, key) { + arr := strings.Split(strings.TrimPrefix(completeKey, key), "/") + for k, v := range arr { + if v == "" { + continue + } + if len(v) > 0 { + plt = v + for _, v := range arr[k+1:] { + n, err := strconv.Atoi(v) + if err != nil { + continue + } + param = append(param, n) + } + return true + } + } + } + return false } - switch config := data.(type) { - case *BlackInfoApi: + + switch { + case equalFunc(etcd.ETCDKEY_BLACKLIST_PREFIX): + var config *BlackInfoApi + if data != nil { + config = data.(*BlackInfoApi) + } if isInit { + if config == nil { + return + } BlackListMgrSington.InitBlackInfo(config) } else { switch event.Type { @@ -353,6 +424,9 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } case clientv3.EventTypePut: + if config == nil { + return + } BlackListMgrSington.UpsertBlackInfo(config) if (config.Space & int32(BlackState_Login)) != 0 { var targetPlayer []*Player //确定用户是否在线 @@ -372,8 +446,16 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } } - case *PromoterConfig: + + case equalFunc(etcd.ETCDKEY_PROMOTER_PREFIX): + var config *PromoterConfig + if data != nil { + config = data.(*PromoterConfig) + } if isInit { + if config == nil { + return + } PromoterMgrSington.AddConfig(config) } else { switch event.Type { @@ -385,16 +467,32 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c PromoterMgrSington.RemoveConfigByKey(promoterConfig) } case clientv3.EventTypePut: + if config == nil { + return + } PromoterMgrSington.AddConfig(config) } } - case *ActGivePlateformConfig: + + case equalFunc(etcd.ETCDKEY_ACT_GIVE_PREFIX): + var config *ActGivePlateformConfig + if data != nil { + config = data.(*ActGivePlateformConfig) + } + if config == nil { + return + } if isInit || event.Type == clientv3.EventTypePut { ActMgrSington.AddGiveConfig(config, config.Platform) } - case *webapi.MatchAudience: + + case equalFunc(etcd.ETCDKEY_MatchAudience): switch event.Type { case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.MatchAudience) PlatformMgrSingleton.AddMatchAudience(config) if !isInit { p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) @@ -403,15 +501,58 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } case clientv3.EventTypeDelete: - PlatformMgrSingleton.DelMatchAudience(config) + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelMatchAudience(plt, int32(param[0])) if !isInit { - p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) + p := PlayerMgrSington.GetPlayerBySnId(int32(param[0])) if p != nil { p.SCDataConfig(common.DataConfigMatchAudience) } } } + case equalFunc(etcd.ETCDKEY_RoomType): + switch event.Type { + case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.RoomType) + PlatformMgrSingleton.UpdateRoomType(config) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + } + case clientv3.EventTypeDelete: + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelRoomType(plt, int32(param[0])) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + } + } + case equalFunc(etcd.ETCDKEY_RoomConfig): + switch event.Type { + case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.RoomConfig) + PlatformMgrSingleton.UpdateRoomConfig(config) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + } + case clientv3.EventTypeDelete: + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelRoomConfig(plt, int32(param[0])) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + } + } default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } From c6ee48573b2a2d054fac259cb0cd0491ae403cbd Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 24 Aug 2024 12:03:54 +0800 Subject: [PATCH 026/153] =?UTF-8?q?=E7=94=B5=E5=8E=8B=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/command.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index bde15af..26c0031 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -382,7 +382,7 @@ var data = []byte{ 0x65, //0 几币几玩 0x00, //1 几币几玩占用位 0x2D, //2 游戏时间 - 0x00, //3 出奖模式 + 0x00, //3 出奖模式0 无概率 1 随机模式 2 固定模式 3 冠兴模式 0x0F, //4 出奖概率 0x00, //5 出奖概率占用位 0x00, //6 空中抓物 0关闭 1开启 @@ -390,11 +390,11 @@ var data = []byte{ 0x00, //8 保夹次数 范围0~6, 6为无限次 0x01, //9 保夹赠送模式 0送游戏 1送中奖 2送游戏和中奖 - 0x04, //10 强抓力电压 - 0x50, //11 强抓力电压占用位 - 0x7C, //12 中抓力电压 - 0x00, //13 中抓力电压占用位 - 0x5A, //14 弱抓力电压 + 0x80, //10 强抓力电压 + 0x01, //11 强抓力电压占用位 + 0x80, //12 中抓力电压 + 0x01, //13 中抓力电压占用位 + 0x78, //14 弱抓力电压 0x00, //15 弱抓力电压占用位 0xE0, //16 中奖电压 0x01, //17 中奖电压占用位 From 87486f1a485f391a98fa8459683d6408016b04d5 Mon Sep 17 00:00:00 2001 From: kxdd <88655@163.com> Date: Sat, 24 Aug 2024 15:13:22 +0800 Subject: [PATCH 027/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=B5=81=E7=A8=8B=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 20 +- gamerule/clawdoll/queue.go | 221 +++++++++++++++++++++ gamesrv/clawdoll/player_clawdoll.go | 5 +- gamesrv/clawdoll/scene_clawdoll.go | 69 +++++++ gamesrv/clawdoll/scenepolicy_clawdoll.go | 241 ++++++++++++++++------- 5 files changed, 473 insertions(+), 83 deletions(-) create mode 100644 gamerule/clawdoll/queue.go diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index 735ee60..abcd61a 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -8,13 +8,17 @@ const ( ClawDollSceneStateStart //开始倒计时 ClawDollSceneStatePlayGame //游戏中 ClawDollSceneStateBilled //结算 + ClawDollSceneWaitPayCoin //等待下一局投币 ClawDollSceneStateMax ) const ( - ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时 - ClawDollSceneStartTimeout = time.Second * 15 //开始倒计时 - ClawDollSceneBilledTimeout = time.Second * 2 //结算 + ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时 + ClawDollSceneStartTimeout = time.Second * 5 //开始倒计时 + ClawDollScenePlayTimeout = time.Second * 30 //娃娃机下抓倒计时 + ClawDollSceneBilledTimeout = time.Second * 2 //结算 + ClawDollSceneWaitPayCoinimeout = time.Second * 10 //等待下一局投币 + ) // 玩家操作 @@ -24,11 +28,13 @@ const ( ClawDollPlayerOpMove // 玩家操控动作 // 1-前 2-后 3-左 4-右 ) +// 1-前 2-后 3-左 4-右 5-投币 const ( - ButtonFront = iota + 1 /*前*/ - ButtonBack /*后*/ - ButtonLeft /*左*/ - ButtonRight /*右*/ + ButtonFront = iota + 1 /*前*/ + ButtonBack /*后*/ + ButtonLeft /*左*/ + ButtonRight /*右*/ + ButtonPayCoin /*投币*/ ) const ( diff --git a/gamerule/clawdoll/queue.go b/gamerule/clawdoll/queue.go new file mode 100644 index 0000000..c051bae --- /dev/null +++ b/gamerule/clawdoll/queue.go @@ -0,0 +1,221 @@ +package clawdoll + +// queue队列容器包 +// 以动态数组的形式实现 +// 该容器可以在尾部实现线性增加元素,在首部实现线性减少元素 +// 队列的扩容和缩容同vector一样,即数组小采用翻倍扩缩容/折半缩容,数组大时采用固定扩/缩容 +// 该容器满足FIFO的先进先出模式 +// 可接纳不同类型的元素 + +// queue队列结构体 +// 包含泛型切片和该切片的首尾位的下标 +// 当删除节点时仅仅需要后移首位一位即可 +// 当剩余长度较小时采用缩容策略进行缩容以释放空间 +// 当添加节点时若未占满全部已分配空间则尾指针后移一位同时进行覆盖存放 +// 当添加节点时尾指针大于已分配空间长度,则先去掉首部多出来的空间,如果还不足则进行扩容 +// 首节点指针始终不能超过尾节点指针 +type Queue struct { + data []interface{} //泛型切片 + begin uint64 //首节点下标 + end uint64 //尾节点下标 + cap uint64 //容量 +} + +//queue队列容器接口 +//存放了queue容器可使用的函数 +//对应函数介绍见下方 + +type queuer interface { + Size() (size uint64) //返回该队列中元素的使用空间大小 + Clear() //清空该队列 + Empty() (b bool) //判断该队列是否为空 + Push(e interface{}) //将元素e添加到该队列末尾 + Pop() (e interface{}) //将该队列首元素弹出并返回 + Front() (e interface{}) //获取该队列首元素 + Back() (e interface{}) //获取该队列尾元素 +} + +// 新建一个queue队列容器并返回 +// 初始queue的切片数组为空 +// 初始queue的首尾指针均置零 +// +// @receiver nil +// @param nil +// @return q *Queue 新建的queue指针 +func New() (q *Queue) { + return &Queue{ + data: make([]interface{}, 1, 1), + begin: 0, + end: 0, + cap: 1, + } +} + +// 返回该容器当前含有元素的数量 +// 该长度并非实际占用空间数量 +// 若容器为空则返回0 +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return size uint64 容器中实际使用元素所占空间大小 +func (q *Queue) Size() (size uint64) { + if q == nil { + q = New() + } + return q.end - q.begin +} + +// 以queue队列容器做接收者 +// 将该容器中所承载的元素清空 +// 将该容器的首尾指针均置0,容量设为1 +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return nil +func (q *Queue) Clear() { + if q == nil { + q = New() + } + + q.data = make([]interface{}, 1, 1) + q.begin = 0 + q.end = 0 + q.cap = 1 +} + +// 判断该queue队列容器是否含有元素 +// 如果含有元素则不为空,返回false +// 如果不含有元素则说明为空,返回true +// 如果容器不存在,返回true +// 该判断过程通过首尾指针数值进行判断 +// 当尾指针数值等于首指针时说明不含有元素 +// 当尾指针数值大于首指针时说明含有元素 +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return b bool 该容器是空的吗? +func (q *Queue) Empty() (b bool) { + if q == nil { + q = New() + } + return q.Size() <= 0 +} + +// 在容器尾部插入元素 +// 若尾指针小于切片实际使用长度,则对当前指针位置进行覆盖,同时尾下标后移一位 +// 若尾指针等于切片实际使用长度,则对实际使用量和实际占用量进行判断 +// 当首部还有冗余时则删将实际使用整体前移到首部,否则对尾部进行扩容即可 +// +// @receiver q *Queue 接受者queue的指针 +// @param e interface{} 待插入元素 +// @return nil +func (q *Queue) Push(e interface{}) { + if q == nil { + q = New() + } + + if q.end < q.cap { + //不需要扩容 + q.data[q.end] = e + } else { + //需要扩容 + if q.begin > 0 { + //首部有冗余,整体前移 + for i := uint64(0); i < q.end-q.begin; i++ { + q.data[i] = q.data[i+q.begin] + } + q.end -= q.begin + q.begin = 0 + } else { + //冗余不足,需要扩容 + if q.cap <= 65536 { + //容量翻倍 + if q.cap == 0 { + q.cap = 1 + } + q.cap *= 2 + } else { + //容量增加2^16 + q.cap += 2 ^ 16 + } + //复制扩容前的元素 + tmp := make([]interface{}, q.cap, q.cap) + copy(tmp, q.data) + q.data = tmp + } + q.data[q.end] = e + } + q.end++ +} + +// 弹出容器第一个元素,同时首下标后移一位 +// 若容器为空,则不进行弹出 +// 弹出结束后,进行缩容判断,考虑到queue的冗余会存在于前后两个方向 +// 所以需要对前后两方分别做判断, 但由于首部主要是减少,并不会增加,所以不需要太多冗余量,而尾部只做添加,所以需要更多的冗余 +// 所以可以对首部预留2^10的冗余,当超过时直接对首部冗余清除即可,释放首部空间时尾部空间仍然保留不变 +// 当首部冗余不足2^10时,但冗余超过实际使用空间,也会对首部进行缩容,尾部不变 +// 同时返回队首元素 +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return e interface{} 队首元素 +func (q *Queue) Pop() (e interface{}) { + if q == nil { + q = New() + return nil + } + if q.Empty() { + q.Clear() + return nil + } + + e = q.data[q.begin] + q.begin++ + if q.begin >= 1024 || q.begin*2 > q.end { + //首部冗余超过2^10或首部冗余超过实际使用 + q.cap -= q.begin + q.end -= q.begin + tmp := make([]interface{}, q.cap, q.cap) + copy(tmp, q.data[q.begin:]) + q.data = tmp + q.begin = 0 + } + + return e +} + +// 返回该容器的第一个元素 +// 若该容器当前为空,则返回nil +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return e interface{} 容器的第一个元素 +func (q *Queue) Front() (e interface{}) { + if q == nil { + q = New() + return nil + } + if q.Empty() { + q.Clear() + return nil + } + return q.data[q.begin] +} + +// 返回该容器的最后一个元素 +// 若该容器当前为空,则返回nil +// +// @receiver q *Queue 接受者queue的指针 +// @param nil +// @return e interface{} 容器的最后一个元素 +func (q *Queue) Back() (e interface{}) { + if q == nil { + q = New() + return nil + } + if q.Empty() { + q.Clear() + return nil + } + return q.data[q.end-1] +} diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 1ec2c43..68887da 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -8,6 +8,8 @@ import ( type PlayerEx struct { *base.Player //玩家信息 + dollCardsCnt int32 // 娃娃卡数量 + gainCoin int64 // 本局赢的金币 taxCoin int64 // 本局税收 odds int32 @@ -33,7 +35,6 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { // 能否投币 func (this *PlayerEx) CanPayCoin() bool { - return true } @@ -62,7 +63,7 @@ func (this *PlayerEx) InitData(baseScore int32) { } -// 重置下注数据 +// 重置数据 func (this *PlayerEx) ResetData() { } diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 340b7cc..d794269 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + "container/list" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" @@ -43,6 +44,9 @@ type SceneEx struct { PlayerBackup map[int32]*PlayerData // 本局离场玩家数据备份 seats []*PlayerEx // 本局游戏中的玩家状态数据 + waitPlayers *list.List + playingSnid int32 // 正在玩的玩家snid + RoundId int // 局数,第几局 robotNum int // 参与游戏的机器人数量 logid string @@ -65,6 +69,7 @@ func (this *SceneEx) delPlayer(p *base.Player) { if p, exist := this.players[p.SnId]; exist { this.seats[p.GetPos()] = nil delete(this.players, p.SnId) + this.RemoveWaitPlayer(p.SnId) } } @@ -159,6 +164,7 @@ func NewClawdollSceneData(s *base.Scene) *SceneEx { players: make(map[int32]*PlayerEx), seats: make([]*PlayerEx, s.GetPlayerNum()), PlayerBackup: make(map[int32]*PlayerData), + waitPlayers: list.New(), } return sceneEx @@ -179,11 +185,34 @@ func (this *SceneEx) Clear() { this.PlayerBackup = make(map[int32]*PlayerData) this.RoundId = 0 + for e := this.waitPlayers.Front(); e != nil; e = e.Next() { + if e != nil { + p := e.Value.(*PlayerEx) + p.Clear(0) + } + } + for i := 0; i < this.GetPlayerNum(); i++ { if this.seats[i] != nil { this.seats[i].Clear(this.GetBaseScore()) } } + +} + +// 是否有玩家正在玩 +func (this *SceneEx) IsHasPlaying() bool { + if this.playingSnid == 0 { + return false + } + + return true +} + +// 等待下一个玩家 +func (this *SceneEx) WaitNextPlayer() { + this.playingSnid = 0 + } func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { @@ -209,6 +238,46 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { } } +func (this *SceneEx) GetPlayGrabType(player *PlayerEx) int32 { + if player == nil { + return rule.ClawWeak + } + + if this.RoundId%100 == 0 && this.RoundId != 0 { + return rule.ClawStrong + } + + return rule.ClawWeak +} + +func (this *SceneEx) AddWaitPlayer(player *PlayerEx) { + if player == nil { + return + } + + this.waitPlayers.PushBack(player) +} + +func (this *SceneEx) RemoveWaitPlayer(SnId int32) bool { + l := this.waitPlayers + for e := l.Front(); e != nil; e = e.Next() { + if p := e.Value.(*PlayerEx); p.SnId == SnId { + this.waitPlayers.Remove(e) + return true + } + } + + return false +} + +// 时间到 系统开始下抓 +func (this *SceneEx) TimeOutPlayGrab() bool { + + this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), rule.ClawWeak) + + return true +} + // OnPlayerSMGrabOp 下抓 //1-弱力抓 2 -强力抓 3-必出抓 func (this *SceneEx) OnPlayerSMGrabOp(SnId, Id, GrabType int32) { diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 14db059..64884fa 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -93,35 +93,26 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { if s == nil || p == nil { return } + logger.Logger.Trace("(this *PolicyClawdoll) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*SceneEx); ok { - pos := -1 - for i := 0; i < sceneEx.GetPlayerNum(); i++ { - if sceneEx.seats[i] == nil { - pos = i - break - } + playerEx := &PlayerEx{Player: p} + sceneEx.players[p.SnId] = playerEx + baseScore := sceneEx.GetBaseScore() + p.ExtraData = playerEx + playerEx.Clear(baseScore) + + if sceneEx.playingSnid == 0 { + p.MarkFlag(base.PlayerState_WaitNext) + p.UnmarkFlag(base.PlayerState_Ready) + sceneEx.playingSnid = p.GetSnId() } - if pos != -1 { - playerEx := &PlayerEx{Player: p} - sceneEx.seats[pos] = playerEx - sceneEx.players[p.SnId] = playerEx - baseScore := sceneEx.GetBaseScore() + sceneEx.AddWaitPlayer(playerEx) - p.Pos = pos - p.ExtraData = playerEx - playerEx.Clear(baseScore) - - if sceneEx.Gaming { - p.MarkFlag(base.PlayerState_WaitNext) - p.UnmarkFlag(base.PlayerState_Ready) - } - - //给自己发送房间信息 - this.SendRoomInfo(s, p, sceneEx) - s.FirePlayerEvent(p, base.PlayerEventEnter, nil) - } + //给自己发送房间信息 + this.SendRoomInfo(s, p, sceneEx) + s.FirePlayerEvent(p, base.PlayerEventEnter, nil) } } @@ -231,9 +222,6 @@ func (this *PolicyClawdoll) IsCompleted(s *base.Scene) bool { } func (this *PolicyClawdoll) IsCanForceStart(s *base.Scene) bool { - if sceneEx, ok := s.ExtraData.(*SceneEx); ok { - return len(s.Players) >= 2 && !sceneEx.Gaming - } return false } @@ -342,7 +330,6 @@ func (this *StateWait) CanChangeTo(s base.SceneState) bool { } func (this *StateWait) GetTimeout(s *base.Scene) int { - return this.BaseState.GetTimeout(s) } @@ -354,7 +341,7 @@ func (this *StateWait) OnEnter(s *base.Scene) { } s.Gaming = false - ClawdollBroadcastRoomState(s, float32(0), float32(0)) + ClawdollBroadcastRoomState(s, float32(0)) if sceneEx.CanStart() { s.ChangeSceneState(rule.ClawDollSceneStateStart) @@ -385,13 +372,42 @@ func (this *StateWait) OnTick(s *base.Scene) { sceneEx.SceneDestroy(true) return } - if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitTimeout { - //切换到准备开局状态 - if sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStateStart) - } + } +} + +func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { + if this.BaseState.OnPlayerOp(s, p, opcode, params) { + return true + } + + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return false + } + playerEx, ok := p.ExtraData.(*PlayerEx) + if !ok { + return false + } + + switch opcode { + case rule.ClawDollPlayerOpPayCoin: + if sceneEx.IsHasPlaying() { + return false + } + + if !playerEx.CanPayCoin() { + return false + } + + // 1-前 2-后 3-左 4-右 5-投币 + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin) + + if sceneEx.CanStart() { + s.ChangeSceneState(rule.ClawDollSceneStateStart) } } + + return false } //===================================== @@ -409,6 +425,7 @@ func (this *StateStart) GetState() int { func (this *StateStart) CanChangeTo(s base.SceneState) bool { switch s.GetState() { case rule.ClawDollSceneStatePlayGame: + case rule.ClawDollSceneStateWait: return true } return false @@ -417,11 +434,10 @@ func (this *StateStart) CanChangeTo(s base.SceneState) bool { func (this *StateStart) OnEnter(s *base.Scene) { this.BaseState.OnEnter(s) if sceneEx, ok := s.ExtraData.(*SceneEx); ok { - ClawdollBroadcastRoomState(s, float32(0), float32(0)) + ClawdollBroadcastRoomState(s) s.Gaming = false sceneEx.GameNowTime = time.Now() sceneEx.NumOfGames++ - } } @@ -440,29 +456,6 @@ func (this *StateStart) OnTick(s *base.Scene) { } func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { - if this.BaseState.OnPlayerOp(s, p, opcode, params) { - return true - } - - sceneEx, ok := s.ExtraData.(*SceneEx) - if !ok { - return false - } - playerEx, ok := p.ExtraData.(*PlayerEx) - if !ok { - return false - } - - switch opcode { - case rule.ClawDollPlayerOpPayCoin: - if !playerEx.CanPayCoin() { - return false - } - - // 1-前 2-后 3-左 4-右 5-投币 - sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(5)) - } - return false } @@ -532,27 +525,26 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para } switch opcode { - case rule.ClawDollPlayerOpPayCoin: - // 投币检测 - if !playerEx.CanPayCoin() { - return false - } - - // 1-前 2-后 3-左 4-右 5-投币 - sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(5)) - //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) case rule.ClawDollPlayerOpGo: if !playerEx.CanGrab() { return false } + grapType := sceneEx.GetPlayGrabType(playerEx) + + logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " grapType: ", grapType) //1-弱力抓 2 -强力抓 - sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), int32(2)) + sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) + case rule.ClawDollPlayerOpMove: if !playerEx.CanMove() { return false } + if params[0] < rule.ButtonFront || params[0] > rule.ButtonRight { + logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " opcode: ", opcode, " params:", params) + return false + } // 1-前 2-后 3-左 4-右 5-投币 sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(params[0])) } @@ -562,6 +554,17 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para func (this *PlayGame) OnTick(s *base.Scene) { this.BaseState.OnTick(s) + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { + + if sceneEx.TimeOutPlayGrab() { + + } + + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + return + } + } } //===================================== @@ -610,11 +613,100 @@ func (this *StateBilled) OnTick(s *base.Scene) { this.BaseState.OnTick(s) if sceneEx, ok := s.ExtraData.(*SceneEx); ok { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneBilledTimeout { - if sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStateStart) - } else { - s.ChangeSceneState(rule.ClawDollSceneStateWait) - } + + s.ChangeSceneState(rule.ClawDollSceneWaitPayCoin) + + return + } + } +} + +//===================================== +// StateWaitPayCoin 等待下一局投币 +//===================================== + +type StateWaitPayCoin struct { + BaseState +} + +func (this *StateWaitPayCoin) GetState() int { + return rule.ClawDollSceneWaitPayCoin +} + +func (this *StateWaitPayCoin) CanChangeTo(s base.SceneState) bool { + switch s.GetState() { + case rule.ClawDollSceneStateStart: + case rule.ClawDollSceneStateWait: + return true + } + return false +} + +func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { + logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " opcode: ", opcode, " params:", params) + + if this.BaseState.OnPlayerOp(s, p, opcode, params) { + return true + } + + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return false + } + playerEx, ok := p.ExtraData.(*PlayerEx) + if !ok { + return false + } + + switch opcode { + case rule.ClawDollPlayerOpPayCoin: + + if sceneEx.playingSnid != playerEx.SnId { + logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----sceneEx.playingSnid:", sceneEx.playingSnid, " playerEx.SnId: ", playerEx.SnId) + return false + } + + // 投币检测 + if !playerEx.CanPayCoin() { + logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----CanPayCoin: false") + return false + } + + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin) + + s.ChangeSceneState(rule.ClawDollSceneStateStart) + //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) + } + return false +} + +func (this *StateWaitPayCoin) OnEnter(s *base.Scene) { + logger.Logger.Trace("(this *StateWaitPayCoin) OnEnter, sceneid=", s.GetSceneId()) + this.BaseState.OnEnter(s) +} + +func (this *StateWaitPayCoin) OnLeave(s *base.Scene) { + logger.Logger.Trace("(this *StateWaitPayCoin) OnLeave, sceneid=", s.GetSceneId()) + this.BaseState.OnLeave(s) + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + + sceneEx.PlayerBackup = make(map[int32]*PlayerData) + + if s.CheckNeedDestroy() { + sceneEx.SceneDestroy(true) + } + } +} + +func (this *StateWaitPayCoin) OnTick(s *base.Scene) { + this.BaseState.OnTick(s) + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitPayCoinimeout { + + // 时间到,重置scene数据 + sceneEx.WaitNextPlayer() + + s.ChangeSceneState(rule.ClawDollSceneStateWait) return } } @@ -645,6 +737,7 @@ func init() { PolicyClawdollSingleton.RegisteSceneState(&StateStart{}) PolicyClawdollSingleton.RegisteSceneState(&PlayGame{}) PolicyClawdollSingleton.RegisteSceneState(&StateBilled{}) + PolicyClawdollSingleton.RegisteSceneState(&StateWaitPayCoin{}) core.RegisteHook(core.HOOK_BEFORE_START, func() error { base.RegisteScenePolicy(common.GameId_Clawdoll, 0, PolicyClawdollSingleton) From a040d3035411f2967a32be2d1ce750c78bd89d40 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 15:49:07 +0800 Subject: [PATCH 028/153] =?UTF-8?q?=E9=81=93=E5=85=B7=E5=87=BA=E5=94=AE?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E7=94=A8int64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_bag.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index ad535f0..3049b2f 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -286,12 +286,13 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess if item.SaleGold > 0 { + n := int64(item.SaleGold) * int64(msg.ItemNum) if item.SaleType == 1 { - p.AddCoin(int64(item.SaleGold*msg.ItemNum), 0, common.GainWay_Item_Sale, "sys", remark) - pack.Coin = int64(item.SaleGold * msg.ItemNum) + p.AddCoin(n, 0, common.GainWay_Item_Sale, "sys", remark) + pack.Coin = n } else if item.SaleType == 2 { - p.AddDiamond(int64(item.SaleGold*msg.ItemNum), 0, common.GainWay_Item_Sale, "sys", remark) - pack.Diamond = int64(item.SaleGold * msg.ItemNum) + p.AddDiamond(n, 0, common.GainWay_Item_Sale, "sys", remark) + pack.Diamond = n } } pack.NowItemId = item.ItemId From 4580f69514e221f64f164ba22d90cd55c8124de5 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 24 Aug 2024 16:10:28 +0800 Subject: [PATCH 029/153] =?UTF-8?q?=E8=AF=B7=E6=B1=82token=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E5=8D=8F=E8=AE=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 6cd153c..72a0692 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -130,8 +130,8 @@ func init() { netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) //客户端请求token - common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSGetTokenHandler{}) - netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSGetTokenPacketFactory{}) + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN), &CSGetTokenHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN), &CSGetTokenPacketFactory{}) //获取token返回 netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler) } From f4434bd945d37cbd0b891302ace7a42009f1b3db Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:21:06 +0800 Subject: [PATCH 030/153] =?UTF-8?q?=E5=8E=BB=E6=8E=89ParamsEx,agentor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_server.go | 3 +- gamesrv/base/player.go | 2 +- gamesrv/base/scene.go | 60 ++------------------ gamesrv/base/scene_mgr.go | 4 +- gamesrv/fishing/scenedata_fishing.go | 1 - gamesrv/thirteen/scene.go | 1 - gamesrv/tienlen/scenepolicy_tienlen.go | 5 ++ model/config.go | 76 +++++++++++++++++++++++++- protocol/server/server.pb.go | 6 +- protocol/server/server.proto | 2 +- 10 files changed, 93 insertions(+), 67 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 10b4483..7089130 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -64,7 +64,6 @@ func init() { gameMode := int(msg.GetGameMode()) sceneMode := int(msg.GetSceneMode()) gameId := int(msg.GetGameId()) - paramsEx := msg.GetParamsEx() hallId := msg.GetHallId() groupId := msg.GetGroupId() dbGameFree := msg.GetDBGameFree() @@ -74,7 +73,7 @@ func init() { playerNum := int(msg.GetPlayerNum()) scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(), msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree, - bEnterAfterStart, baseScore, playerNum, msg.GetChessRank(), paramsEx...) + bEnterAfterStart, baseScore, playerNum, msg.GetChessRank()) if scene != nil { if scene.IsMatchScene() { if len(scene.Params) > 0 { diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 6611f02..b3543ee 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -628,7 +628,7 @@ func (this *Player) SaveSceneCoinLog(takeCoin, changecoin, coin, totalbet, taxco } log := model.NewSceneCoinLogEx(this.SnId, changecoin, takeCoin, coin, eventType, int64(this.scene.DbGameFree.GetBaseScore()), totalbet, int32(this.scene.GameId), this.PlayerData.Ip, - this.scene.paramsEx[0], this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), + this.scene.GetGameFreeId(), this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), this.scene.DbGameFree.GetGameMode(), this.scene.GetGameFreeId(), taxcoin, wincoin, jackpotWinCoin, smallGameWinCoin, this.PackageID) if log != nil { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 704027a..d4d70d1 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -63,7 +63,6 @@ type Scene struct { SceneType int // 场次,新手场,中级场... Platform string // 平台id Params []int64 - paramsEx []int32 Creator int32 agentor int32 hallId int32 @@ -139,7 +138,8 @@ type Scene struct { } func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, - agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32, paramsEx ...int32) *Scene { + agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, + bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32) *Scene { sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("Game id %v not register in ScenePolicyPool.", gameId) @@ -154,9 +154,7 @@ func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, plat SceneMode: sceneMode, SceneType: int(dbGameFree.GetSceneType()), Params: params, - paramsEx: paramsEx, Creator: creator, - agentor: agentor, replayCode: replayCode, Players: make(map[int32]*Player), audiences: make(map[int32]*Player), @@ -236,23 +234,10 @@ func (this *Scene) init() bool { this.nextInviteTime = tNow.Add(time.Second * time.Duration(this.Rand.Int63n(model.GameParamData.RobotInviteInitInterval))) this.RandRobotCnt() - if len(this.paramsEx) != 0 { - if this.IsMatchScene() { - //this.mp = GetMatchPolicy(this.gameId) - baseScore := this.GetParamEx(common.PARAMEX_MATCH_BASESCORE) - this.DbGameFree.BaseScore = proto.Int32(baseScore) - } else { - if this.DbGameFree.GetSceneType() == -1 { - this.Testing = true - } else { - this.Testing = false - } - } + this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) + this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) + this.KeyGameDif = this.DbGameFree.GetGameDif() - this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) - this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) - this.KeyGameDif = this.DbGameFree.GetGameDif() - } // test //for i := 0; i < 100; i++ { // n := this.rand.Intn(10) @@ -284,29 +269,6 @@ func (this *Scene) IsDisbanding() bool { return this.hDisband != timer.TimerHandle(0) } -func (this *Scene) GetParamEx(idx int) int32 { - if idx < 0 || idx > len(this.paramsEx) { - return -1 - } - - return this.paramsEx[idx] -} - -func (this *Scene) SetParamEx(idx int, val int32) { - cnt := len(this.paramsEx) - if idx >= 0 && idx < cnt { - this.paramsEx[idx] = val - } -} - -func (this *Scene) GetMatchTotalOfGame() int { - return int(this.GetParamEx(common.PARAMEX_MATCH_NUMOFGAME)) -} - -func (this *Scene) GetMatchBaseScore() int32 { - return this.GetParamEx(common.PARAMEX_MATCH_BASESCORE) -} - func (this *Scene) GetGameFreeId() int32 { return this.DbGameFree.Id } @@ -394,12 +356,6 @@ func (this *Scene) GetParams() []int64 { func (this *Scene) SetParams(params []int64) { this.Params = params } -func (this *Scene) GetParamsEx() []int32 { - return this.paramsEx -} -func (this *Scene) SetParamsEx(paramsEx []int32) { - this.paramsEx = paramsEx -} func (this *Scene) GetStateStartTime() time.Time { return this.StateStartTime } @@ -433,12 +389,6 @@ func (this *Scene) SetCpCtx(cpCtx model.CoinPoolCtx) { func (this *Scene) GetAudiences() map[int32]*Player { return this.audiences } -func (this *Scene) GetAgentor() int32 { - return this.agentor -} -func (this *Scene) SetAgentor(agentor int32) { - this.agentor = agentor -} func (this *Scene) GetDisbandGen() int { return this.disbandGen } diff --git a/gamesrv/base/scene_mgr.go b/gamesrv/base/scene_mgr.go index 1b5b320..1fef20c 100644 --- a/gamesrv/base/scene_mgr.go +++ b/gamesrv/base/scene_mgr.go @@ -34,9 +34,9 @@ func (this *SceneMgr) makeKey(gameid, gamemode int) int { func (this *SceneMgr) CreateScene(s *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, - dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32, paramsEx ...int32) *Scene { + dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32) *Scene { scene := NewScene(s, sceneId, gameMode, sceneMode, gameId, platform, params, agentor, creator, replayCode, - hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank, paramsEx...) + hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank) if scene == nil { logger.Logger.Error("(this *SceneMgr) CreateScene, scene == nil") return nil diff --git a/gamesrv/fishing/scenedata_fishing.go b/gamesrv/fishing/scenedata_fishing.go index c0ffaff..e8b4bc8 100644 --- a/gamesrv/fishing/scenedata_fishing.go +++ b/gamesrv/fishing/scenedata_fishing.go @@ -113,7 +113,6 @@ func (this *FishingSceneData) init() bool { this.testing = this.GetTesting() this.gamefreeId = this.GetGameFreeId() this.groupId = this.GetGroupId() - this.agentor = this.GetAgentor() this.sceneMode = this.GetSceneMode() this.TimePoint = 0 this.lastLittleBossTime = time.Now().Unix() diff --git a/gamesrv/thirteen/scene.go b/gamesrv/thirteen/scene.go index 2f5e805..1236c1e 100644 --- a/gamesrv/thirteen/scene.go +++ b/gamesrv/thirteen/scene.go @@ -173,7 +173,6 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl Creator: proto.Int32(s.GetCreator()), GameId: proto.Int(s.GetGameId()), RoomMode: proto.Int(s.GetSceneMode()), - AgentId: proto.Int32(s.GetAgentor()), SceneType: s.GetDBGameFree().SceneType, State: proto.Int(s.GetSceneState().GetState()), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 57ed170..525fe17 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2780,6 +2780,11 @@ func init() { base.RegisteScenePolicy(common.GameId_TienLenRank_toend, 0, ScenePolicyTienLenSingleton) base.RegisteScenePolicy(common.GameId_TienLenRank_yl, 0, ScenePolicyTienLenSingleton) base.RegisteScenePolicy(common.GameId_TienLenRank_yl_toend, 0, ScenePolicyTienLenSingleton) + // 房卡场 + base.RegisteScenePolicy(common.GameId_TienLenCustom, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_toend, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_yl, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_yl_toend, 0, ScenePolicyTienLenSingleton) return nil }) } diff --git a/model/config.go b/model/config.go index e60e6fa..bd47bb1 100644 --- a/model/config.go +++ b/model/config.go @@ -1,6 +1,7 @@ package model import ( + "mongo.games.com/game/protocol/gamehall" "strconv" "mongo.games.com/goserver/core/logger" @@ -144,7 +145,8 @@ type AllConfig struct { // 房卡场房间类型 RoomType map[int32]*webapi.RoomType // key: 房间类型id // 房卡场房间配置 - RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id + RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id + RoomTypeMap map[int32][]*webapi.RoomConfig // key: 房间类型id:房间配置 } type GlobalConfig struct { @@ -176,6 +178,7 @@ func (cm *ConfigMgr) GetConfig(platform string) *AllConfig { MatchAudience: make(map[int32]*webapi.MatchAudience), RoomType: make(map[int32]*webapi.RoomType), RoomConfig: make(map[int32]*webapi.RoomConfig), + RoomTypeMap: make(map[int32][]*webapi.RoomConfig), } cm.platform[platform] = c } @@ -396,8 +399,79 @@ func (cm *ConfigMgr) DelRoomType(plt string, id int32) { func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { cm.GetConfig(data.GetPlatform()).RoomConfig[data.GetId()] = data + d := cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] + if d == nil { + d = make([]*webapi.RoomConfig, 0) + } + d = append(d, data) + cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] = d } func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { + d := cm.GetConfig(plt).RoomConfig[id] + if d != nil { + b := cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] + if b != nil { + for i, v := range b { + if v.GetId() == id { + b = append(b[:i], b[i+1:]...) + cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b + } + } + } + } delete(cm.GetConfig(plt).RoomConfig, id) } + +func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { + pack := &gamehall.SCRoomConfig{} + for _, v := range cm.GetConfig(plt).RoomType { + if v.GetOn() != common.On { + continue + } + var list []*gamehall.RoomConfigInfo + for _, vv := range cm.GetConfig(plt).RoomTypeMap[v.GetId()] { + if vv.GetOn() != common.On { + continue + } + var cost, reward []*gamehall.ItemInfo + for _, item := range vv.GetCost() { + cost = append(cost, &gamehall.ItemInfo{ + Id: item.GetItemId(), + Num: int32(item.GetItemNum()), + }) + } + for _, item := range vv.GetReward() { + reward = append(reward, &gamehall.ItemInfo{ + Id: item.GetItemId(), + Num: int32(item.GetItemNum()), + }) + } + list = append(list, &gamehall.RoomConfigInfo{ + Id: vv.GetId(), + Name: vv.GetName(), + RoomType: vv.GetRoomType(), + On: vv.GetOn(), + SortId: vv.GetSortId(), + Cost: cost, + Reward: reward, + OnChannelName: vv.GetOnChannelName(), + GameFreeId: vv.GetGameFreeId(), + Round: vv.GetRound(), + PlayerNum: vv.GetPlayerNum(), + NeedPassword: vv.GetNeedPassword(), + CostType: vv.GetCostType(), + Voice: vv.GetVoice(), + ImageURI: vv.GetImageURI(), + }) + } + pack.List = append(pack.List, &gamehall.RoomTypeInfo{ + Id: v.GetId(), + Name: v.GetName(), + On: v.GetOn(), + SortId: v.GetSortId(), + List: list, + }) + } + return pack +} diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 19e37f1..f3d15c9 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -858,7 +858,7 @@ type WGCreateScene struct { Creator int32 `protobuf:"varint,5,opt,name=Creator,proto3" json:"Creator,omitempty"` Agentor int32 `protobuf:"varint,6,opt,name=Agentor,proto3" json:"Agentor,omitempty"` ReplayCode string `protobuf:"bytes,7,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` - ParamsEx []int32 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` + ParamsEx []int64 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` SceneMode int32 `protobuf:"varint,9,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` HallId int32 `protobuf:"varint,10,opt,name=HallId,proto3" json:"HallId,omitempty"` Platform string `protobuf:"bytes,11,opt,name=Platform,proto3" json:"Platform,omitempty"` @@ -957,7 +957,7 @@ func (x *WGCreateScene) GetReplayCode() string { return "" } -func (x *WGCreateScene) GetParamsEx() []int32 { +func (x *WGCreateScene) GetParamsEx() []int64 { if x != nil { return x.ParamsEx } @@ -8757,7 +8757,7 @@ var file_server_proto_rawDesc = []byte{ 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index f460326..c6b140b 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -170,7 +170,7 @@ message WGCreateScene { int32 Creator = 5; int32 Agentor = 6; string ReplayCode = 7; - repeated int32 ParamsEx = 8; + repeated int64 ParamsEx = 8; int32 SceneMode = 9; int32 HallId = 10; string Platform = 11; From 1db62f9d9068e626616fae6d7c027afed83b2d13 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:23:47 +0800 Subject: [PATCH 031/153] gameconfig --- data/gameconfig/tienlen_m.json | 1 + data/gameconfig/tienlen_m_toend.json | 1 + 2 files changed, 2 insertions(+) diff --git a/data/gameconfig/tienlen_m.json b/data/gameconfig/tienlen_m.json index 6411cc8..8e18938 100644 --- a/data/gameconfig/tienlen_m.json +++ b/data/gameconfig/tienlen_m.json @@ -12,6 +12,7 @@ "DependentPlayerCnt":true, "EnterAfterStart":true, "PerGameTakeCard":100, + "BaseScore": 10, "Params":[ ] } \ No newline at end of file diff --git a/data/gameconfig/tienlen_m_toend.json b/data/gameconfig/tienlen_m_toend.json index 86cf29a..1a883b5 100644 --- a/data/gameconfig/tienlen_m_toend.json +++ b/data/gameconfig/tienlen_m_toend.json @@ -12,6 +12,7 @@ "DependentPlayerCnt":true, "EnterAfterStart":true, "PerGameTakeCard":100, + "BaseScore": 10, "Params":[ ] } \ No newline at end of file From 72224264697165aa43e3dc917b2b27ce48d0c869 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:25:03 +0800 Subject: [PATCH 032/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 94 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 30 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 5eadcbc..51d5c27 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -98,41 +98,75 @@ func init() { 1: { Platform: "1", Id: 1, - Name: "话费赛", + Name: "{\"zh\":\"话费赛\",\"kh\":\"话费赛\",\"vi\":\"话费赛\",\"en\":\"话费赛\"}", On: 1, SortId: 1, }, - } - PlatformMgrSingleton.GetConfig("1").RoomConfig = map[int32]*webapi.RoomConfig{ - 1: { + 2: { Platform: "1", - Id: 1, - Name: "1元话费赛", - RoomType: 1, + Id: 2, + Name: "{\"zh\":\"物品赛\",\"kh\":\"物品赛\",\"vi\":\"物品赛\",\"en\":\"物品赛\"}", On: 1, - SortId: 1, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", + SortId: 2, }, } + + PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ + Platform: "1", + Id: 1, + Name: "{\"zh\":\"1元话费赛\",\"kh\":\"1元话费赛\",\"vi\":\"1元话费赛\",\"en\":\"1元话费赛\"}", + RoomType: 1, + On: 1, + SortId: 1, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }) + PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ + Platform: "1", + Id: 1, + Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", + RoomType: 1, + On: 1, + SortId: 2, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -542,7 +576,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c config := data.(*webapi.RoomConfig) PlatformMgrSingleton.UpdateRoomConfig(config) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) } case clientv3.EventTypeDelete: if plt == "" || len(param) == 0 { @@ -550,7 +584,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } PlatformMgrSingleton.DelRoomConfig(plt, int32(param[0])) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) } } default: From 4e6b92cd333bf3acc30ecf183d181e78ff7dde3b Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:26:31 +0800 Subject: [PATCH 033/153] review --- worldsrv/action_hundredscene.go | 282 -------------------------------- 1 file changed, 282 deletions(-) diff --git a/worldsrv/action_hundredscene.go b/worldsrv/action_hundredscene.go index aa7e96d..d0befc0 100644 --- a/worldsrv/action_hundredscene.go +++ b/worldsrv/action_hundredscene.go @@ -2,8 +2,6 @@ package main import ( "fmt" - "time" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" @@ -201,290 +199,10 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da return nil } -type CSGameObservePacketFactory struct { -} -type CSGameObserveHandler struct { -} - -func (this *CSGameObservePacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSGameObserve{} - return pack -} - -func (this *CSGameObserveHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSGameObserveHandler Process recv ", data) - if msg, ok := data.(*gamehall.CSGameObserve); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p != nil { - if msg.GetStartOrEnd() { - gameStateMgr.PlayerRegiste(p, msg.GetGameId(), msg.GetStartOrEnd()) - pack := &gamehall.SCGameSubList{} - statePack := &gamehall.SCGameState{} - scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) - for _, value := range scenes { - pack.List = append(pack.List, &gamehall.GameSubRecord{ - GameFreeId: proto.Int32(value.dbGameFree.GetId()), - NewLog: proto.Int32(-1), - LogCnt: proto.Int(len(value.GameLog)), - TotleLog: value.GameLog, - }) - leftTime := int64(value.StateSec) - (time.Now().Unix() - value.StateTs) - if leftTime < 0 { - leftTime = 0 - } - statePack.List = append(statePack.List, &gamehall.GameState{ - GameFreeId: proto.Int32(value.dbGameFree.GetId()), - Ts: proto.Int64(leftTime), - Sec: proto.Int32(value.StateSec), - }) - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GAMESUBLIST), pack) - logger.Logger.Trace("SCGameSubList:", pack) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GAMESTATE), statePack) - logger.Logger.Trace("SCGameState:", statePack) - } else { - gameStateMgr.PlayerClear(p) - } - } - } - return nil -} - -//type CSHundredSceneGetGameJackpotPacketFactory struct { -//} -//type CSHundredSceneGetGameJackpotHandler struct { -//} -// -//func (this *CSHundredSceneGetGameJackpotPacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSHundredSceneGetPlayerNum{} -// return pack -//} -// -//func (this *CSHundredSceneGetGameJackpotHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// logger.Logger.Trace("CSHundredSceneGetGameJackpotHandler Process recv ", data) -// if _, ok := data.(*gamehall.CSHundredSceneGetPlayerNum); ok { -// p := PlayerMgrSington.GetPlayer(sid) -// if p != nil { -// //gameid := int(msg.GetGameId()) -// //// 冰河世纪, 百战成神, 财神, 复仇者联盟, 复活岛 -// //if gameid == common.GameId_IceAge || gameid == common.GameId_TamQuoc || gameid == common.GameId_CaiShen || -// // gameid == common.GameId_Avengers || gameid == common.GameId_EasterIsland { -// // gameStateMgr.PlayerRegiste(p, msg.GetGameId(), true) -// // pack := &gamehall.SCHundredSceneGetGameJackpot{} -// // scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) -// // for _, v := range scenes { -// // jpfi := &gamehall.GameJackpotFundInfo{ -// // GameFreeId: proto.Int32(v.dbGameFree.GetId()), -// // JackPotFund: proto.Int64(v.JackPotFund), -// // } -// // pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) -// // } -// // proto.SetDefaults(pack) -// // p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack) -// // logger.Logger.Trace("SCHundredSceneGetGameJackpot:", pack) -// //} -// } -// } -// return nil -//} -// -//type CSHundredSceneGetGameHistoryInfoPacketFactory struct { -//} -//type CSHundredSceneGetGameHistoryInfoHandler struct { -//} -// -//func (this *CSHundredSceneGetGameHistoryInfoPacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSHundredSceneGetHistoryInfo{} -// return pack -//} -// -//func (this *CSHundredSceneGetGameHistoryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// logger.Logger.Trace("World CSHundredSceneGetGameHistoryInfoHandler Process recv ", data) -// if msg, ok := data.(*gamehall.CSHundredSceneGetHistoryInfo); ok { -// gameid := int(msg.GetGameId()) -// historyModel := msg.GetGameHistoryModel() -// p := PlayerMgrSington.GetPlayer(sid) -// if p != nil { -// switch historyModel { -// case PLAYER_HISTORY_MODEL: // 历史记录 -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// var genPlayerHistoryInfo = func(spinID string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *gamehall.PlayerHistoryInfo) { -// player.SpinID = proto.String(spinID) -// player.CreatedTime = proto.Int64(createdTime) -// player.TotalBetValue = proto.Int64(totalBetValue) -// player.TotalPriceValue = proto.Int64(totalPriceValue) -// player.IsFree = proto.Bool(isFree) -// player.TotalBonusValue = proto.Int64(totalBonusValue) -// player.Multiple = proto.Int64(multiple) -// } -// -// var genPlayerHistoryInfoMsg = func(spinid string, v *model.NeedGameRecord, gdl *model.GameDetailedLog, player *gamehall.PlayerHistoryInfo) { -// switch gameid { -// //case common.GameId_IceAge: -// // data, err := model.UnMarshalIceAgeGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalIceAgeGameNote error:%v", err) -// // } -// // gnd := data.(*model.IceAgeType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// //case common.GameId_TamQuoc: -// // data, err := model.UnMarshalTamQuocGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalTamQuocGameNote error:%v", err) -// // } -// // gnd := data.(*model.TamQuocType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// //case common.GameId_CaiShen: -// // data, err := model.UnMarshalCaiShenGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalCaiShenGameNote error:%v", err) -// // } -// // gnd := data.(*model.CaiShenType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// case common.GameId_Crash: -// data, err := model.UnMarshalGameNoteByHUNDRED(gdl.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// jsonString, _ := json.Marshal(data) -// -// // convert json to struct -// gnd := model.CrashType{} -// json.Unmarshal(jsonString, &gnd) -// -// //gnd := data.(*model.CrashType) -// for _, curplayer := range gnd.PlayerData { -// if curplayer.UserId == p.SnId { -// genPlayerHistoryInfo(spinid, false, int64(v.Ts), int64(curplayer.UserBetTotal), curplayer.ChangeCoin, 0, int64(curplayer.UserMultiple), player) -// break -// } -// } -// case common.GameId_Avengers: -// data, err := model.UnMarshalAvengersGameNote(gdl.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// gnd := data.(*model.GameResultLog) -// genPlayerHistoryInfo(spinid, gnd.BaseResult.IsFree, int64(v.Ts), int64(gnd.BaseResult.TotalBet), gnd.BaseResult.WinTotal, gnd.BaseResult.WinSmallGame, 0, player) -// //case common.GameId_EasterIsland: -// // data, err := model.UnMarshalEasterIslandGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalEasterIslandGameNote error:%v", err) -// // } -// // gnd := data.(*model.EasterIslandType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// default: -// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive gameid(%v) error", gameid) -// } -// } -// -// gameclass := int32(2) -// spinid := strconv.FormatInt(int64(p.SnId), 10) -// dbGameFrees := srvdata.PBDB_GameFreeMgr.Datas.Arr //.GetData(data.DbGameFree.Id) -// roomtype := int32(0) -// for _, v := range dbGameFrees { -// if int32(gameid) == v.GetGameId() { -// gameclass = v.GetGameClass() -// roomtype = v.GetSceneType() -// break -// } -// } -// -// gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 50, 0, 0, roomtype, gameclass, gameid) -// pack := &gamehall.SCPlayerHistory{} -// for _, v := range gpl.Data { -// if v.GameDetailedLogId == "" { -// logger.Logger.Error("World PlayerHistory GameDetailedLogId is nil") -// break -// } -// gdl := model.GetPlayerHistory(p.Platform, v.GameDetailedLogId) -// player := &gamehall.PlayerHistoryInfo{} -// genPlayerHistoryInfoMsg(spinid, v, gdl, player) -// pack.PlayerHistory = append(pack.PlayerHistory, player) -// } -// proto.SetDefaults(pack) -// logger.Logger.Infof("World gameid:%v PlayerHistory:%v ", gameid, pack) -// return pack -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data == nil { -// logger.Logger.Error("World PlayerHistory data is nil") -// return -// } -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEPLAYERHISTORY), data) -// }), "CSGetPlayerHistoryHandlerWorld").Start() -// case BIGWIN_HISTORY_MODEL: // 爆奖记录 -// jackpotList := JackpotListMgrSington.GetJackpotList(gameid) -// //if len(jackpotList) < 1 { -// // JackpotListMgrSington.GenJackpot(gameid) // 初始化爆奖记录 -// // JackpotListMgrSington.after(gameid) // 开启定时器 -// // jackpotList = JackpotListMgrSington.GetJackpotList(gameid) -// //} -// pack := JackpotListMgrSington.GetStoCMsg(jackpotList) -// pack.GameId = msg.GetGameId() -// logger.Logger.Infof("World BigWinHistory: %v %v", gameid, pack) -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEBIGWINHISTORY), pack) -// case GAME_HISTORY_MODEL: -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *gamehall.GameHistoryInfo) { -// gamehistory.GameNumber = proto.String(gameNumber) -// gamehistory.CreatedTime = proto.Int64(createdTime) -// gamehistory.Hash = proto.String(hash) -// gamehistory.Multiple = proto.Int64(multiple) -// } -// -// gls := model.GetAllGameDetailedLogsByGameIdAndTs(p.Platform, gameid, 20) -// -// pack := &gamehall.SCPlayerHistory{} -// for _, v := range gls { -// -// gamehistory := &gamehall.GameHistoryInfo{} -// -// data, err := model.UnMarshalGameNoteByHUNDRED(v.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// jsonString, _ := json.Marshal(data) -// -// // convert json to struct -// gnd := model.CrashType{} -// json.Unmarshal(jsonString, &gnd) -// -// genGameHistoryInfo(v.LogId, int64(v.Ts), int64(gnd.Rate), gnd.Hash, gamehistory) -// pack.GameHistory = append(pack.GameHistory, gamehistory) -// } -// proto.SetDefaults(pack) -// logger.Logger.Infof("World gameid:%v History:%v ", gameid, pack) -// return pack -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data == nil { -// logger.Logger.Error("World GameHistory data is nil") -// return -// } -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEPLAYERHISTORY), data) -// }), "CSGetGameHistoryHandlerWorld").Start() -// default: -// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive historyModel(%v) error", historyModel) -// } -// } -// } -// return nil -//} - func init() { common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_GETPLAYERNUM), &CSHundredSceneGetPlayerNumHandler{}) netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_GETPLAYERNUM), &CSHundredSceneGetPlayerNumPacketFactory{}) common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_OP), &CSHundredSceneOpHandler{}) netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_OP), &CSHundredSceneOpPacketFactory{}) - //请求游戏列表 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_GAMEOBSERVE), &CSGameObserveHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_GAMEOBSERVE), &CSGameObservePacketFactory{}) - - //// 请求奖池信息 - //common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEJACKPOT), &CSHundredSceneGetGameJackpotHandler{}) - //netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEJACKPOT), &CSHundredSceneGetGameJackpotPacketFactory{}) - - ////// 请求历史记录和爆奖记录 - //common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEHISTORYINFO), &CSHundredSceneGetGameHistoryInfoHandler{}) - //netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEHISTORYINFO), &CSHundredSceneGetGameHistoryInfoPacketFactory{}) } From 377482ce6d47c598dd5b395be0e25a9245efbc68 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Mon, 26 Aug 2024 10:50:03 +0800 Subject: [PATCH 034/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BAlog=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 18 ++++++++---------- machine/machinedoll/machinemgr.go | 12 ++++++------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index f42592d..7f7acd6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -169,11 +169,11 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid num := int64(1) for { // 读取数据 - fmt.Println("监听抓取结果返回!") + logger.Logger.Trace("监听抓取结果返回!") buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { - fmt.Println("Failed to read response from client:", err) + logger.Logger.Error("Failed to read response from client:", err) return } // 将读取到的数据按照 221 进行分割 @@ -185,7 +185,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid for i, part := range parts { if len(part) > 0 { part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 - fmt.Println("比较返回结果 part = ", part) + //fmt.Println("比较返回结果 part = ", part) if bytes.Contains(part, instruction) && num != 1 { fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 @@ -200,7 +200,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 2, }) - fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) + logger.Logger.Trace("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -208,7 +208,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - fmt.Println("Failed to read response from server:", err) + logger.Logger.Error("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ @@ -217,14 +217,13 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 2, }) - fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) + logger.Logger.Trace("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 coinData := []byte{0xAA, 0x04, 0x02, 0x03, 0x01} if bytes.Contains(part, coinData) { //返回消息 - fmt.Println("上分成功!") session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, @@ -236,7 +235,6 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} if bytes.Contains(part, coinData) { //返回消息 - fmt.Println("上分失败!") session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, @@ -295,10 +293,10 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) //生成token token, err := token04.GenerateToken04(appId, string(userId), serverSecret, effectiveTimeInSeconds, payload) if err != nil { - fmt.Println(err) + logger.Logger.Error(err) return err } - fmt.Println(token) + logger.Logger.Trace(token) info := &machine.MSSendToken{} info.Snid = msg.Snid info.Token = token diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index 57ad3d2..b385e46 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -46,11 +46,11 @@ func (this *MachineManager) Init() { var serverAddrs []string programDir, err := os.Getwd() if err != nil { - fmt.Println("Error getting working directory:", err) + logger.Logger.Error("Error getting working directory:", err) return } configFile := filepath.Join(programDir, "machineIPConfig.json") - fmt.Println("构建配置文件的路径", configFile) + logger.Logger.Trace("构建配置文件的路径", configFile) fileData, err := os.ReadFile(configFile) if err != nil { logger.Logger.Error("Read robot account file error:", err) @@ -66,7 +66,7 @@ func (this *MachineManager) Init() { for i, addr := range serverAddrs { conn, err := net.DialTimeout("tcp", addr, 5*time.Second) if err != nil { - fmt.Println("Failed to connect to server:", err) + logger.Logger.Error("Failed to connect to server:", err) continue } this.ConnMap[i+1] = &Conn{ @@ -75,7 +75,7 @@ func (this *MachineManager) Init() { Addr: addr, } SetBaseParam(conn) - fmt.Println("设置每台娃娃机基础配置!") + logger.Logger.Trace("设置每台娃娃机基础配置!") } /* fmt.Println("Connected to server:\n", this.ConnMap[1].RemoteAddr()) @@ -98,7 +98,7 @@ func (this *MachineManager) Update() { delConn = append(delConn, v) v.Close() logger.Logger.Tracef("断开连接:%v", v.Addr) - fmt.Println("娃娃机断开连接!!!!!!!!!!!") + logger.Logger.Error("娃娃机断开连接!!!!!!!!!!!") this.UpdateToGameServer(v, 0) } } @@ -118,7 +118,7 @@ func (this *MachineManager) Update() { continue } logger.Logger.Tracef("重连成功:%v", addr) - fmt.Println("娃娃机重连成功!!!!!!!!!!!") + logger.Logger.Trace("娃娃机重连成功!!!!!!!!!!!") delIds = append(delIds, &Conn{ Id: id, Conn: conn, From dcc68130d234d83a99c965e73dde7bee52507bc8 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Mon, 26 Aug 2024 10:53:25 +0800 Subject: [PATCH 035/153] =?UTF-8?q?log=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/machinemgr.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index b385e46..3fc997e 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -98,7 +98,6 @@ func (this *MachineManager) Update() { delConn = append(delConn, v) v.Close() logger.Logger.Tracef("断开连接:%v", v.Addr) - logger.Logger.Error("娃娃机断开连接!!!!!!!!!!!") this.UpdateToGameServer(v, 0) } } @@ -117,8 +116,7 @@ func (this *MachineManager) Update() { if err != nil { continue } - logger.Logger.Tracef("重连成功:%v", addr) - logger.Logger.Trace("娃娃机重连成功!!!!!!!!!!!") + logger.Logger.Tracef("娃娃机重连成功!addr = %v", addr) delIds = append(delIds, &Conn{ Id: id, Conn: conn, From 904982158a3486c5aa1107d71f5c22e0e33bd476 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 26 Aug 2024 16:54:07 +0800 Subject: [PATCH 036/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E6=B8=B8?= =?UTF-8?q?=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 8 + data/DB_GameRule.dat | Bin 1273 -> 1273 bytes data/DB_GameRule.json | 8 +- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes gamesrv/action/action_game.go | 4 + gamesrv/base/player.go | 3 - gamesrv/base/scene.go | 103 +- gamesrv/tienlen/scenedata_tienlen.go | 19 +- gamesrv/tienlen/scenepolicy_tienlen.go | 54 +- model/gamedetailedlog.go | 7 +- protocol/gamehall/coinscene.proto | 4 +- protocol/gamehall/convert.sh | 5 - protocol/gamehall/copytoccc.sh | 4 - protocol/gamehall/copytowin88.sh | 4 - protocol/gamehall/game.pb.go | 9985 ++--- protocol/gamehall/game.proto | 906 +- protocol/gamehall/gamehall.js | 46999 ----------------------- protocol/server/server.pb.go | 1554 +- protocol/server/server.proto | 3 +- protocol/tienlen/tienlen.pb.go | 271 +- protocol/tienlen/tienlen.proto | 15 +- worldsrv/action_bag.go | 4 +- worldsrv/action_friend.go | 2 +- worldsrv/action_game.go | 417 +- worldsrv/action_pets.go | 4 +- worldsrv/action_phonelottery.go | 6 +- worldsrv/action_player.go | 15 +- worldsrv/action_server.go | 26 +- worldsrv/action_welfare.go | 6 +- worldsrv/bagmgr.go | 14 +- worldsrv/coinscenepool_base.go | 21 +- worldsrv/coinscenepool_local.go | 47 +- worldsrv/etcd.go | 2 +- worldsrv/gameconfig.go | 6 +- worldsrv/gamesess.go | 40 +- worldsrv/hundredscenemgr.go | 30 +- worldsrv/matchscenemgr.go | 21 +- worldsrv/platform.go | 96 +- worldsrv/platformgamehall.go | 71 - worldsrv/player.go | 17 - worldsrv/scene.go | 558 +- worldsrv/scenemgr.go | 214 +- worldsrv/scenepolicy.go | 83 +- worldsrv/scenepolicydata.go | 347 +- worldsrv/trascate_webapi.go | 7 +- worldsrv/welfmgr.go | 6 +- xlsx/DB_GameRule.xlsx | Bin 12784 -> 12785 bytes 48 files changed, 5260 insertions(+), 56756 deletions(-) delete mode 100644 protocol/gamehall/convert.sh delete mode 100644 protocol/gamehall/copytoccc.sh delete mode 100644 protocol/gamehall/copytowin88.sh delete mode 100644 protocol/gamehall/gamehall.js delete mode 100644 worldsrv/platformgamehall.go diff --git a/common/constant.go b/common/constant.go index fd8a9f0..7f570f6 100644 --- a/common/constant.go +++ b/common/constant.go @@ -309,6 +309,7 @@ const ( GainWayItemFenGain = 103 // 道具分解获得 GainWayGuide = 104 //新手引导奖励 GainWayVipGift9 = 105 //vip等级礼包 + GainWayRoomCost = 106 //房费消耗 ) // 后台选择 金币变化类型 的充值 类型id号起始 @@ -867,3 +868,10 @@ const ( DataConfigSprite = 1 // 精灵配置 DataConfigMatchAudience = 2 // 赛事观战开关 ) + +// 房间状态 +const ( + SceneStateWaite = 0 // 等待 + SceneStateStart = 1 // 开始 + SceneStateEnd = 2 // 结束 +) diff --git a/data/DB_GameRule.dat b/data/DB_GameRule.dat index 3e94de63ec4cb336d5bdc1b5ebec1784a40de21d..54c601584a63c38e854c44b53d543c0725327b10 100644 GIT binary patch delta 32 kcmey#`IB?QD@I0^$*&o;7&#`3F&P6%FA%x8j;Wdn0I+ol2><{9 delta 32 kcmey#`IB?QD@I0!$*&o;7#SyvF&P6%FA%x8j;Wdn0IwMc@Bjb+ diff --git a/data/DB_GameRule.json b/data/DB_GameRule.json index d200ca5..ec4d5e9 100644 --- a/data/DB_GameRule.json +++ b/data/DB_GameRule.json @@ -71,7 +71,7 @@ "Name": "十三张(四人场)", "GameId": 211, "Params": [ - 0, + 4, 0, 30, 50, @@ -84,7 +84,7 @@ "Name": "十三张(八人场)", "GameId": 212, "Params": [ - 1, + 8, 0, 30, 50, @@ -97,7 +97,7 @@ "Name": "十三张(自由场经典场)", "GameId": 213, "Params": [ - 1, + 8, 0, 30, 50, @@ -110,7 +110,7 @@ "Name": "十三张(自由场癞子场)", "GameId": 214, "Params": [ - 1, + 8, 0, 30, 50, diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index f9031710cf856fc3845657304ab3d4d2da51d05f..72db3e8a73873ae51f1c0e2ac3e4d7c127881859 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwf4)Pd!J_QLd|+XpiTY%jX|lsLieXjuD*g)5eW1;ybo3(z&v=oe-#2HHXZWimW9 literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#HWz3=%p9;jB=^AVM=@WC6YP$LwU1c1VmVmA4neUPXuut)LtqBLEP{Cq XW+BXAlmJj-=U4>v=oe-#2HHXZW^z0= diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 5c05cb71f34940747b3f81de2a97d99721b9ef06..51cc1b583659bcaa00dac6101f25d501e9a8d27a 100644 GIT binary patch delta 291 zcmdn2xmj~UxgZR delta 262 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl&Fr!WNNHYYP?GDC$YEaV5Oz1YSqz%=u6u4U@0)2rx2DW@BpsDp&+Gmm}plD_kO*=kc^K%0d*gdO>|~NG^(rk&(-R<0{Z) jvXdQn#W#oXd4bdmPTt6`CkS%|MEQXh+sz;N53>LOHqcBd diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 023c97a..9f76f66 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -42,6 +42,10 @@ func (this *CSDestroyRoomHandler) Process(s *netlib.Session, packetid int, data logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") return nil } + // 房卡场开始后不能解散 + if scene.IsCustom() && scene.NumOfGames > 0 { + return nil + } scene.Destroy(true) return nil } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index b3543ee..ddd273f 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -467,9 +467,6 @@ func (this *Player) AddCoin(num int64, gainWay int32, syncFlag int, oper, remark if this.Coin < 0 { this.Coin = 0 } - if this.scene.IsHundredScene() { - this.scene.NewBigCoinNotice(this, int64(num), 5) - } } //增加玩家经验 if num > 0 { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index d4d70d1..56ea1fc 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -24,12 +24,6 @@ import ( "mongo.games.com/game/srvdata" ) -const ( - SCENE_STATE_INITED int = iota - SCENE_STATE_RUNNING - SCENE_STATE_OVER -) - const ReplayIdTf = "20060102150405" var sceneRandSeed = time.Now().UnixNano() @@ -119,22 +113,15 @@ type Scene struct { matchChgData *SceneMatchChgData //比赛变化数据 ChessRank []int32 - LoopNum int // 循环计数 - results []int // 本局游戏结果 - WebUser string // 操作人 - resultHistory [][]int // 记录数 [控制结果,局数...] - BaseScore int32 //tienlen游戏底分 - MatchId int64 //标记本次比赛的id,并不是后台id - MatchFinals bool //比赛场决赛 + BaseScore int32 //tienlen游戏底分 + MatchId int64 //标记本次比赛的id,并不是后台id + MatchFinals bool //比赛场决赛 MatchRound int64 MatchCurPlayerNum int64 MatchNextNeed int64 MatchType int64 // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 - MatchStop bool RealCtrl bool - Novice bool - Welfare bool - KillPoints bool + CycleID string } func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, @@ -168,11 +155,11 @@ func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, plat GroupId: groupId, bEnterAfterStart: bEnterAfterStart, TotalOfGames: int(totalOfGames), - results: make([]int, common.MaxLoopNum), BaseScore: baseScore, playerNum: playerNum, ChessRank: cherank, } + s.CycleID, _ = model.AutoIncGameLogId() if s != nil && s.init() { logger.Logger.Trace("NewScene init success.") if !s.Testing { @@ -227,6 +214,7 @@ func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { func (this *Scene) GetInit() bool { return this.init() } + func (this *Scene) init() bool { tNow := time.Now() sceneRandSeed++ @@ -237,19 +225,6 @@ func (this *Scene) init() bool { this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) this.KeyGameDif = this.DbGameFree.GetGameDif() - - // test - //for i := 0; i < 100; i++ { - // n := this.rand.Intn(10) - // r := this.rand.Intn(3) + 1 - // str := fmt.Sprint(this.rand.Intn(1000), ":", r) - // for j := 0; j < n; j++ { - // str += fmt.Sprint(",", this.rand.Intn(1000), ":", r) - // } - // logger.Logger.Trace("--> str ", str) - // this.ParserResults1(str, "") - //} - // test return true } @@ -875,6 +850,7 @@ func (this *Scene) RobotBroadcast(packetid int, msg rawproto.Message) { } } } + func (this *Scene) BroadcastToAudience(packetid int, msg rawproto.Message) { if len(this.audiences) > 0 { mgs := make(map[*netlib.Session][]*srvlibproto.MCSessionUnion) @@ -933,7 +909,7 @@ func (this *Scene) ChangeSceneState(stateid int) { logger.Logger.Tracef("(this *Scene) [%v] ChangeSceneState -> %v", this.SceneId, state.GetState()) this.SceneState = state this.SceneState.OnEnter(this) - //this.NotifySceneState(stateid) + //this.SyncSceneState(stateid) } if this.aiMgr != nil { @@ -1024,6 +1000,10 @@ func (this *Scene) IsMatchScene() bool { return this.SceneId >= common.MatchSceneStartId && this.SceneId <= common.MatchSceneMaxId } +func (this *Scene) IsCustom() bool { + return this.GetDBGameFree().GetIsCustom() > 0 +} + func (this *Scene) IsFull() bool { return len(this.Players) >= this.playerNum } @@ -1288,14 +1268,15 @@ func (this *Scene) SyncPlayerCoin() { // this.SendToWorld(int(server.SSPacketID_PACKET_GW_SYNCPLAYERCOIN), pack) //} } -func (this *Scene) NotifySceneStateFishing(state int) { + +func (this *Scene) SyncSceneState(state int) { pack := &server.GWSceneState{ - RoomId: proto.Int(this.SceneId), - Fishing: proto.Int32(int32(state)), + RoomId: int32(this.SceneId), + RoomState: int32(state), } - proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTATE), pack) } + func (this *Scene) NotifySceneRoundStart(round int) { pack := &server.GWSceneStart{ RoomId: proto.Int(this.SceneId), @@ -1317,6 +1298,7 @@ func (this *Scene) NotifySceneRoundPause() { proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) } + func (this *Scene) SyncGameState(sec, bl int) { if this.SceneState != nil { pack := &server.GWGameState{ @@ -1331,7 +1313,7 @@ func (this *Scene) SyncGameState(sec, bl int) { } } -// 游戏开始的时候同步防伙牌数据 +// SyncScenePlayer 游戏开始的时候同步防伙牌数据 func (this *Scene) SyncScenePlayer() { pack := &server.GWScenePlayerLog{ GameId: proto.Int(this.GameId), @@ -1342,23 +1324,10 @@ func (this *Scene) SyncScenePlayer() { continue } pack.Snids = append(pack.Snids, value.SnId) - pack.IsGameing = append(pack.IsGameing, value.IsGameing()) } this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENEPLAYERLOG), pack) } -// 防伙牌换桌 -func (this *Scene) ChangeSceneEvent() { - timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { - if this.DbGameFree.GetMatchMode() == 1 { - return true - } - this.SendToWorld(int(server.SSPacketID_PACKET_GW_CHANGESCENEEVENT), &server.GWChangeSceneEvent{ - SceneId: proto.Int(this.SceneId), - }) - return true - }), nil, time.Second*3, 1) -} func (this *Scene) RecordReplayStart() { if !this.IsHundredScene() && !this.IsMatchScene() { logger.Logger.Trace("RecordReplayStart-----", this.replayCode, this.NumOfGames, this.replayAddId) @@ -1473,6 +1442,7 @@ func (this *Scene) CreateGameRecPacket() *server.GWGameRec { GameTime: proto.Int(int(time.Now().Sub(this.GameStartTime) / time.Second)), } } + func (this *Scene) IsAllReady() bool { for _, p := range this.Players { if !p.IsOnLine() || !p.IsReady() { @@ -1547,6 +1517,7 @@ func (this *Scene) CoinPoolCanOut() bool { return int32(noRobotPlayerCount) >= this.dbGameFree.GetMinOutPlayerNum() */ } + func (this *Scene) ClearAutoPlayer() { for _, p := range this.Players { if p.IsAuto() { @@ -1556,31 +1527,6 @@ func (this *Scene) ClearAutoPlayer() { } } -func (this *Scene) NewBigCoinNotice(player *Player, num int64, msgType int64) { - //if !this.Testing && !this.IsMatchScene() { - // if num < model.GameParamData.NoticeCoinMin || model.GameParamData.NoticeCoinMax < num { - // return - // } - // start := time.Now().Add(time.Second * 30).Unix() - // content := fmt.Sprintf("%v|%v|%v", player.GetName(), this.GetHundredSceneName(), num) - // pack := &server.GWNewNotice{ - // Ch: proto.String(""), - // Content: proto.String(content), - // Start: proto.Int64(start), - // Interval: proto.Int64(0), - // Count: proto.Int64(1), - // Msgtype: proto.Int64(msgType), - // Platform: proto.String(player.Platform), - // Isrob: proto.Bool(player.IsRob), - // Priority: proto.Int32(int32(num)), - // } - // if common.HorseRaceLampPriority_Rand == model.GameParamData.NoticePolicy { - // pack.Priority = proto.Int32(rand.Int31n(100)) - // } - // this.SendToWorld(int(server.SSPacketID_PACKET_GW_NEWNOTICE), pack) - //} -} - type GameDetailedParam struct { Trend20Lately string //最近20局开奖结果 CtrlType int @@ -1610,6 +1556,9 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this.IsMatchScene() { log.MatchId = this.MatchId } + if this.IsCustom() { + log.CycleId = this.CycleID + } LogChannelSingleton.WriteLog(log) } } @@ -1624,6 +1573,9 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this.IsMatchScene() { log.MatchId = this.MatchId } + if this.IsCustom() { + log.CycleId = this.CycleID + } newLog := new(model.GameDetailedLog) *newLog = *log LogChannelSingleton.WriteLog(log) @@ -1796,6 +1748,7 @@ func (this *Scene) RandRobotCnt() { //logger.Logger.Tracef("===(this *Scene) RandRobotCnt() sceneid:%v gameid:%v mode:%v robotLimit:%v robotNum:%v", this.SceneId, this.GameId, this.GameMode, this.robotLimit, this.robotNum) } } + func (this *Scene) GetRobotTime() int64 { l := int64(common.RandInt(model.NormalParamData.RobotRandomTimeMin, model.NormalParamData.RobotRandomTimeMax)) return l + time.Now().Unix() diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index cd8d905..dd5ffad 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -21,6 +21,12 @@ import ( "mongo.games.com/game/srvdata" ) +type BilledInfo struct { + Round int32 // 第几局 + ChangeScore int64 // 积分变化 + Score int64 // 结算后积分 +} + // 房间上的额外数据 type TienLenSceneData struct { *base.Scene //场景 @@ -56,13 +62,15 @@ type TienLenSceneData struct { isCardsKu bool //是否是牌库 cardsKuId int32 //牌库ID ctrlType int // 1控赢 2控输 0不控 + BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { sceneEx := &TienLenSceneData{ - Scene: s, - poker: rule.NewPoker(), - players: make(map[int32]*TienLenPlayerData), + Scene: s, + poker: rule.NewPoker(), + players: make(map[int32]*TienLenPlayerData), + BilledList: map[int32]*[]*BilledInfo{}, } sceneEx.Clear() return sceneEx @@ -143,6 +151,11 @@ func (this *TienLenSceneData) CanStart() bool { return false } } + + if this.IsCustom() { + return this.IsAllReady() && this.GetPlayerCnt() >= this.GetPlayerNum() + } + // 房间人数>=2开始,并且有真人或者是预创建房间,并且有房主 if nPlayerCount >= 2 && (this.GetRealPlayerNum() > 0 || this.IsPreCreateScene()) { //人数>=2开始 return true diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 525fe17..340402b 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -953,13 +953,17 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) { s.NotifySceneRoundStart(s.NumOfGames) this.BroadcastRoomState(s, this.GetState(), int64(s.NumOfGames)) + if s.IsCustom() && s.NumOfGames == 1 { + s.SyncSceneState(common.SceneStateStart) + } + //同步防伙牌数据 sceneEx.SyncScenePlayer() //发牌 if rule.TestOpen { sceneEx.SendHandCardTest() } else { - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { sceneEx.SendHandCard_Match() } else { sceneEx.SendHandCardOdds() @@ -1772,7 +1776,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainScore = losePlayerCoin } losePlayerScore = gainScore - if sceneEx.IsMatchScene() { //比赛场是积分,不应该增加账变 + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { //比赛场是积分,不应该增加账变 losePlayer.AddCoinNoLog(int64(-gainScore), 0) } else { losePlayer.AddCoin(int64(-gainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -1914,7 +1918,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { astWinGainScore = lastWinPlayerCoin } lastWinPlayerScore = astWinGainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { lastWinPlayer.AddCoinNoLog(int64(-astWinGainScore), 0) } else { lastWinPlayer.AddCoin(int64(-astWinGainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -2027,7 +2031,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainTaxScore = losePlayerScore + lastWinPlayerScore - gainScore rankScore = loseRankScore + lastWinPlayerRankScore } - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2132,7 +2136,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 gainScore := int64(float64(lastWinPlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := lastWinPlayerScore - gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2274,7 +2278,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainScore = losePlayerCoin } winScore += gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(-gainScore), 0) } else { playerEx.AddCoin(int64(-gainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -2413,7 +2417,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 gainScore := int64(float64(winScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := winScore - gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2530,6 +2534,39 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), pack, 0) logger.Logger.Trace("TienLenPacketID_PACKET_SCTienLenGameBilled gameFreeId:", sceneEx.GetGameFreeId(), ";pack:", pack) + for _, v := range tienlenType.PlayerData { + d := sceneEx.BilledList[v.UserId] + if d == nil { + arr := make([]*BilledInfo, 0) + d = &arr + sceneEx.BilledList[v.UserId] = d + } + *d = append(*d, &BilledInfo{ + Round: int32(sceneEx.NumOfGames), + ChangeScore: v.BillCoin, + Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), + }) + } + if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + packBilled := &tienlen.SCTienLenCycleBilled{} + for snid, billedList := range sceneEx.BilledList { + info := &tienlen.TienLenCycleBilledInfo{ + SnId: snid, + } + for _, bill := range *billedList { + info.RoundScore = append(info.RoundScore, bill.ChangeScore) + info.Score = 1000 + } + packBilled.List = append(packBilled.List, info) + } + s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) + + if s.IsCustom() { + s.SyncSceneState(common.SceneStateEnd) + } + } + // 牌局记录 info, err := model.MarshalGameNoteByFIGHT(&tienlenType) if err == nil { @@ -2696,6 +2733,9 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } + if s.TotalOfGames > 0 && s.NumOfGames >= s.TotalOfGames { + sceneEx.SceneDestroy(true) + } s.RankMatchDestroy() s.TryRelease() } diff --git a/model/gamedetailedlog.go b/model/gamedetailedlog.go index 2796720..6ab0260 100644 --- a/model/gamedetailedlog.go +++ b/model/gamedetailedlog.go @@ -35,15 +35,15 @@ type GameDetailedLogType struct { type GameDetailedLog struct { Id bson.ObjectId `bson:"_id"` //记录ID - LogId string //记录ID + LogId string //记录ID,每局游戏唯一 GameId int32 //游戏id ClubId int32 //俱乐部Id ClubRoom string //俱乐部包间 Platform string //平台id Channel string //渠道 Promoter string //推广员 - MatchId int64 //比赛ID - SceneId int32 //场景ID + MatchId int64 //比赛ID,应该用字符串的 + SceneId int32 //房间id,会重复 GameMode int32 //游戏类型 GameFreeid int32 //游戏类型房间号 PlayerCount int32 //玩家数量 @@ -57,6 +57,7 @@ type GameDetailedLog struct { Ts int64 //时间戳 CtrlType int // 1控赢 2控输 0不控 PlayerPool map[int]int // 个人水池分 + CycleId string // 本轮id,打一轮有多局 } func NewGameDetailedLog() *GameDetailedLog { diff --git a/protocol/gamehall/coinscene.proto b/protocol/gamehall/coinscene.proto index 338a425..c0e01b5 100644 --- a/protocol/gamehall/coinscene.proto +++ b/protocol/gamehall/coinscene.proto @@ -30,14 +30,14 @@ enum OpResultCode { } //自由场协议编号 2320-2339 enum CoinSceneGamePacketID { - PACKET_CoinSceneGame_ZERO = 0; // 弃用消息号 + PACKET_CoinSceneGame_ZERO = 0; // 弃用消息号 PACKET_CS_COINSCENE_GETPLAYERNUM = 2320; PACKET_SC_COINSCENE_GETPLAYERNUM = 2321; PACKET_CS_COINSCENE_OP = 2322; PACKET_SC_COINSCENE_OP = 2323; PACKET_CS_COINSCENE_LISTROOM = 2324; PACKET_SC_COINSCENE_LISTROOM = 2325; - PACKET_SC_COINSCENE_QUEUESTATE = 2326; + PACKET_SC_COINSCENE_QUEUESTATE = 2326; } //PACKET_CS_COINSCENE_GETPLAYERNUM diff --git a/protocol/gamehall/convert.sh b/protocol/gamehall/convert.sh deleted file mode 100644 index d4b0b8b..0000000 --- a/protocol/gamehall/convert.sh +++ /dev/null @@ -1,5 +0,0 @@ -cd $CCC_CLIENT_DIR/protocol/gamehall -npx pbjs --dependency protobufjs/minimal.js --target static-module --wrap commonjs --out gamehall.js ./*.proto -npx pbts --main --out ./gamehall.d.ts ./gamehall.js - -cp ./gamehall.d.ts ./gamehall.js $CCC_CLIENT_DIR/vietnam/assets/ScriptCore/protocol \ No newline at end of file diff --git a/protocol/gamehall/copytoccc.sh b/protocol/gamehall/copytoccc.sh deleted file mode 100644 index 45b87fe..0000000 --- a/protocol/gamehall/copytoccc.sh +++ /dev/null @@ -1,4 +0,0 @@ -# 将chesstitians目录拷贝到client工程目录下的protocol文件夹 -echo WIN88_DIR=$WIN88_DIR -echo CCC_CLIENT_DIR=$CCC_CLIENT_DIR -cp -R $WIN88_DIR/protocol/gamehall $CCC_CLIENT_DIR/protocol \ No newline at end of file diff --git a/protocol/gamehall/copytowin88.sh b/protocol/gamehall/copytowin88.sh deleted file mode 100644 index 353fb1f..0000000 --- a/protocol/gamehall/copytowin88.sh +++ /dev/null @@ -1,4 +0,0 @@ -# 将chesstitians目录拷贝到client工程目录下的protocol文件夹 -echo WIN88_DIR=$WIN88_DIR -echo CCC_CLIENT_DIR=$CCC_CLIENT_DIR -cp -R $CCC_CLIENT_DIR/protocol/gamehall $WIN88_DIR/protocol \ No newline at end of file diff --git a/protocol/gamehall/game.pb.go b/protocol/gamehall/game.pb.go index fb0a199..eb530e9 100644 --- a/protocol/gamehall/game.pb.go +++ b/protocol/gamehall/game.pb.go @@ -50,6 +50,8 @@ const ( OpResultCode_Game_OPRC_AllocRoomIdFailed_Game OpResultCode_Game = 1097 //房间id获取失败 OpResultCode_Game_OPRC_PrivateRoomCountLimit_Game OpResultCode_Game = 1098 //私人房间上限 OpResultCode_Game_OPRC_RoomNotExit OpResultCode_Game = 1099 // 已经不在房间了 + OpResultCode_Game_OPRC_PasswordError OpResultCode_Game = 1101 //密码错误 + OpResultCode_Game_OPRC_CostNotEnough OpResultCode_Game = 1102 //房卡不足 OpResultCode_Game_OPRC_LowerRice_ScenceMax_Game OpResultCode_Game = 1075 //超过最大下米数量 OpResultCode_Game_OPRC_LowerRice_PlayerMax_Game OpResultCode_Game = 1076 //超过单个用户最大下米数 OpResultCode_Game_OPRC_LowerRice_PlayerDownMax_Game OpResultCode_Game = 1077 @@ -95,6 +97,8 @@ var ( 1097: "OPRC_AllocRoomIdFailed_Game", 1098: "OPRC_PrivateRoomCountLimit_Game", 1099: "OPRC_RoomNotExit", + 1101: "OPRC_PasswordError", + 1102: "OPRC_CostNotEnough", 1075: "OPRC_LowerRice_ScenceMax_Game", 1076: "OPRC_LowerRice_PlayerMax_Game", 1077: "OPRC_LowerRice_PlayerDownMax_Game", @@ -136,6 +140,8 @@ var ( "OPRC_AllocRoomIdFailed_Game": 1097, "OPRC_PrivateRoomCountLimit_Game": 1098, "OPRC_RoomNotExit": 1099, + "OPRC_PasswordError": 1101, + "OPRC_CostNotEnough": 1102, "OPRC_LowerRice_ScenceMax_Game": 1075, "OPRC_LowerRice_PlayerMax_Game": 1076, "OPRC_LowerRice_PlayerDownMax_Game": 1077, @@ -179,207 +185,118 @@ func (OpResultCode_Game) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{0} } -//消息id 2200-2319 type GameHallPacketID int32 const ( - GameHallPacketID_PACKET_GameHall_ZERO GameHallPacketID = 0 // 弃用消息号 - GameHallPacketID_PACKET_CS_JOINGAME GameHallPacketID = 2200 - GameHallPacketID_PACKET_SC_JOINGAME GameHallPacketID = 2201 - GameHallPacketID_PACKET_CS_CREATEROOM GameHallPacketID = 2202 - GameHallPacketID_PACKET_SC_CREATEROOM GameHallPacketID = 2203 - GameHallPacketID_PACKET_CS_ENTERROOM GameHallPacketID = 2204 - GameHallPacketID_PACKET_SC_ENTERROOM GameHallPacketID = 2205 - GameHallPacketID_PACKET_CS_RETURNROOM GameHallPacketID = 2206 - GameHallPacketID_PACKET_SC_RETURNROOM GameHallPacketID = 2207 - GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM GameHallPacketID = 2208 - GameHallPacketID_PACKET_CS_ENTERGAME GameHallPacketID = 2209 - GameHallPacketID_PACKET_SC_ENTERGAME GameHallPacketID = 2210 - GameHallPacketID_PACKET_CS_QUITGAME GameHallPacketID = 2211 - GameHallPacketID_PACKET_SC_QUITGAME GameHallPacketID = 2212 - GameHallPacketID_PACKET_SC_CARDGAINWAY GameHallPacketID = 2213 - GameHallPacketID_PACKET_CS_TASKLIST GameHallPacketID = 2214 - GameHallPacketID_PACKET_SC_TASKLIST GameHallPacketID = 2215 - GameHallPacketID_PACKET_SC_TASKCHG GameHallPacketID = 2216 - GameHallPacketID_PACKET_SC_TACKCOMPLETE GameHallPacketID = 2217 - GameHallPacketID_PACKET_SC_TASKDEL GameHallPacketID = 2218 - GameHallPacketID_PACKET_CS_TACKDRAWPRIZE GameHallPacketID = 2219 - GameHallPacketID_PACKET_SC_TACKDRAWPRIZE GameHallPacketID = 2220 - GameHallPacketID_PACKET_CS_GETAGENTGAMEREC GameHallPacketID = 2223 - GameHallPacketID_PACKET_SC_GETAGENTGAMEREC GameHallPacketID = 2224 - GameHallPacketID_PACKET_CS_DELAGENTGAMEREC GameHallPacketID = 2225 - GameHallPacketID_PACKET_CS_SHOPBUY GameHallPacketID = 2226 - GameHallPacketID_PACKET_SC_SHOPBUY GameHallPacketID = 2227 - GameHallPacketID_PACKET_SC_LIMITLIST GameHallPacketID = 2228 - GameHallPacketID_PACKET_CS_GETLATELYGAMEIDS GameHallPacketID = 2229 - GameHallPacketID_PACKET_SC_GETLATELYGAMEIDS GameHallPacketID = 2230 - GameHallPacketID_PACKET_CS_GETGAMECONFIG GameHallPacketID = 2231 - GameHallPacketID_PACKET_SC_GETGAMECONFIG GameHallPacketID = 2232 - GameHallPacketID_PACKET_SC_CHANGEGAMESTATUS GameHallPacketID = 2233 - GameHallPacketID_PACKET_CS_ENTERHALL GameHallPacketID = 2240 - GameHallPacketID_PACKET_SC_ENTERHALL GameHallPacketID = 2241 - GameHallPacketID_PACKET_CS_LEAVEHALL GameHallPacketID = 2242 - GameHallPacketID_PACKET_SC_LEAVEHALL GameHallPacketID = 2243 - GameHallPacketID_PACKET_CS_HALLROOMLIST GameHallPacketID = 2244 - GameHallPacketID_PACKET_SC_HALLROOMLIST GameHallPacketID = 2245 - GameHallPacketID_PACKET_SC_ROOMPLAYERENTER GameHallPacketID = 2246 - GameHallPacketID_PACKET_SC_ROOMPLAYERLEAVE GameHallPacketID = 2247 - GameHallPacketID_PACKET_SC_ROOMSTATECHANG GameHallPacketID = 2248 - GameHallPacketID_PACKET_SC_HALLPLAYERNUM GameHallPacketID = 2249 - GameHallPacketID_PACKET_SC_BULLETIONINFO GameHallPacketID = 2250 - GameHallPacketID_PACKET_CS_BULLETIONINFO GameHallPacketID = 2251 - GameHallPacketID_PACKET_CS_CUSTOMERINFOLIST GameHallPacketID = 2252 - GameHallPacketID_PACKET_SC_CUSTOMERINFOLIST GameHallPacketID = 2253 - GameHallPacketID_PACKET_CS_ENTERDGGAME GameHallPacketID = 2254 - GameHallPacketID_PACKET_SC_ENTERDGGAME GameHallPacketID = 2255 - GameHallPacketID_PACKET_CS_LEAVEDGGAME GameHallPacketID = 2256 - GameHallPacketID_PACKET_SC_LEAVEDGGAME GameHallPacketID = 2257 - GameHallPacketID_PACKET_SC_PLAYERRECHARGEANSWER GameHallPacketID = 2258 //充值弹框协议 - GameHallPacketID_PACKET_CS_THRIDACCOUNTSTATICSTIC GameHallPacketID = 2259 - GameHallPacketID_PACKET_SC_THRIDACCOUNTSTATICSTIC GameHallPacketID = 2260 - GameHallPacketID_PACKET_CS_THRIDACCOUNTTRANSFER GameHallPacketID = 2261 - GameHallPacketID_PACKET_SC_THRIDACCOUNTTRANSFER GameHallPacketID = 2262 - GameHallPacketID_PACKET_CS_ENTERTHRIDGAME GameHallPacketID = 2263 - GameHallPacketID_PACKET_SC_ENTERTHRIDGAME GameHallPacketID = 2264 - GameHallPacketID_PACKET_CS_LEAVETHRIDGAME GameHallPacketID = 2265 - GameHallPacketID_PACKET_SC_LEAVETHRIDGAME GameHallPacketID = 2266 - GameHallPacketID_PACKET_CS_THRIDGAMELIST GameHallPacketID = 2267 - GameHallPacketID_PACKET_SC_THRIDGAMELIST GameHallPacketID = 2268 - GameHallPacketID_PACKET_CS_THRIDGAMEBALANCEUPDATE GameHallPacketID = 2269 - GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE GameHallPacketID = 2270 - GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE GameHallPacketID = 2271 - GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM GameHallPacketID = 2272 - GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM GameHallPacketID = 2273 - GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST GameHallPacketID = 2274 - GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST GameHallPacketID = 2275 - GameHallPacketID_PACKET_CS_GETPRIVATEROOMHISTORY GameHallPacketID = 2276 - GameHallPacketID_PACKET_SC_GETPRIVATEROOMHISTORY GameHallPacketID = 2277 - GameHallPacketID_PACKET_CS_DESTROYPRIVATEROOM GameHallPacketID = 2278 - GameHallPacketID_PACKET_SC_DESTROYPRIVATEROOM GameHallPacketID = 2279 - GameHallPacketID_PACKET_CS_QUERYROOMINFO GameHallPacketID = 2280 - GameHallPacketID_PACKET_SC_QUERYROOMINFO GameHallPacketID = 2281 - GameHallPacketID_PACKET_SC_GAMESUBLIST GameHallPacketID = 2283 - GameHallPacketID_PACKET_CS_GAMEOBSERVE GameHallPacketID = 2284 - GameHallPacketID_PACKET_SC_GAMESTATE GameHallPacketID = 2285 - GameHallPacketID_PACKET_SC_SYNCGAMEFREE GameHallPacketID = 2286 - GameHallPacketID_PACKET_SC_LOTTERYSYNC GameHallPacketID = 2287 - GameHallPacketID_PACKET_CS_LOTTERYLOG GameHallPacketID = 2288 - GameHallPacketID_PACKET_SC_LOTTERYLOG GameHallPacketID = 2289 - GameHallPacketID_PACKET_SC_LOTTERYBILL GameHallPacketID = 2290 - GameHallPacketID_PACKET_CS_UPLOADLOC GameHallPacketID = 2291 - GameHallPacketID_PACKET_SC_UPLOADLOC GameHallPacketID = 2292 - GameHallPacketID_PACKET_CS_AUDIENCESIT GameHallPacketID = 2293 - GameHallPacketID_PACKET_SC_AUDIENCESIT GameHallPacketID = 2294 - GameHallPacketID_PACKET_CS_COMNOTICE GameHallPacketID = 2295 - GameHallPacketID_PACKET_SC_COMNOTICE GameHallPacketID = 2296 - GameHallPacketID_PACKET_SC_CHANGEENTRYSWITCH GameHallPacketID = 2297 //界面入口开关 - GameHallPacketID_PACKET_SC_NoticeChange GameHallPacketID = 2298 // 公告更新 - GameHallPacketID_PACKET_CS_LEAVEROOM GameHallPacketID = 8001 - GameHallPacketID_PACKET_SC_LEAVEROOM GameHallPacketID = 8002 - GameHallPacketID_PACKET_CS_DESTROYROOM GameHallPacketID = 8003 - GameHallPacketID_PACKET_SC_DESTROYROOM GameHallPacketID = 8004 - GameHallPacketID_PACKET_CS_FORCESTART GameHallPacketID = 8005 - GameHallPacketID_PACKET_SC_FORCESTART GameHallPacketID = 8006 - GameHallPacketID_PACKET_CS_AUDIENCE_LEAVEROOM GameHallPacketID = 8007 - GameHallPacketID_PACKET_CS_PLAYER_SWITCHFLAG GameHallPacketID = 8008 - GameHallPacketID_PACKET_CSRoomEvent GameHallPacketID = 8009 // 房间事件 - GameHallPacketID_PACKET_SCRoomEvent GameHallPacketID = 8010 // 房间事件 + // client -> worldsrv 协议 + // 消息id 2200-2319 + // 弃用消息号 + GameHallPacketID_PACKET_GameHall_ZERO GameHallPacketID = 0 + // 创建房间 + GameHallPacketID_PACKET_CS_CREATEROOM GameHallPacketID = 2202 + GameHallPacketID_PACKET_SC_CREATEROOM GameHallPacketID = 2203 + // 进入房间 + GameHallPacketID_PACKET_CS_ENTERROOM GameHallPacketID = 2204 + GameHallPacketID_PACKET_SC_ENTERROOM GameHallPacketID = 2205 + // 返回房间 + GameHallPacketID_PACKET_CS_RETURNROOM GameHallPacketID = 2206 + GameHallPacketID_PACKET_SC_RETURNROOM GameHallPacketID = 2207 + // 进入游戏 + GameHallPacketID_PACKET_CS_ENTERGAME GameHallPacketID = 2209 + GameHallPacketID_PACKET_SC_ENTERGAME GameHallPacketID = 2210 + // 退出游戏 + GameHallPacketID_PACKET_CS_QUITGAME GameHallPacketID = 2211 + GameHallPacketID_PACKET_SC_QUITGAME GameHallPacketID = 2212 + // 获取游戏分场配置 + GameHallPacketID_PACKET_CS_GETGAMECONFIG GameHallPacketID = 2231 + GameHallPacketID_PACKET_SC_GETGAMECONFIG GameHallPacketID = 2232 + // 修改游戏开关 + GameHallPacketID_PACKET_SC_CHANGEGAMESTATUS GameHallPacketID = 2233 + // 充值弹框协议 + GameHallPacketID_PACKET_SC_PLAYERRECHARGEANSWER GameHallPacketID = 2258 + // 创建竞技馆私人房 + GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM GameHallPacketID = 2272 + GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM GameHallPacketID = 2273 + // 查询竞技馆私人房列表 + GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST GameHallPacketID = 2274 + GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST GameHallPacketID = 2275 + // 查询自由桌房间列表 + GameHallPacketID_PACKET_CS_QUERYROOMINFO GameHallPacketID = 2280 + GameHallPacketID_PACKET_SC_QUERYROOMINFO GameHallPacketID = 2281 + // 同步房间下注状态 + GameHallPacketID_PACKET_SC_GAMESTATE GameHallPacketID = 2285 + // 观众进入房间 + GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM GameHallPacketID = 2208 + // 观众坐下 + GameHallPacketID_PACKET_CS_AUDIENCESIT GameHallPacketID = 2293 + GameHallPacketID_PACKET_SC_AUDIENCESIT GameHallPacketID = 2294 + // 公告 + GameHallPacketID_PACKET_CS_COMNOTICE GameHallPacketID = 2295 + GameHallPacketID_PACKET_SC_COMNOTICE GameHallPacketID = 2296 + // 界面入口开关 + GameHallPacketID_PACKET_SC_CHANGEENTRYSWITCH GameHallPacketID = 2297 + // 公告更新 + GameHallPacketID_PACKET_SC_NoticeChange GameHallPacketID = 2298 + // 保持更新 + GameHallPacketID_PACKET_CSTouchType GameHallPacketID = 2299 + // 竞技馆房间信息 + GameHallPacketID_PACKET_CSRoomConfig GameHallPacketID = 2300 + GameHallPacketID_PACKET_SCRoomConfig GameHallPacketID = 2301 + // client -> gamesrv 协议 + // 消息id 8000~8099 + // 离开房间 + GameHallPacketID_PACKET_CS_LEAVEROOM GameHallPacketID = 8001 + GameHallPacketID_PACKET_SC_LEAVEROOM GameHallPacketID = 8002 + // 解散房间 + GameHallPacketID_PACKET_CS_DESTROYROOM GameHallPacketID = 8003 + GameHallPacketID_PACKET_SC_DESTROYROOM GameHallPacketID = 8004 + // 强制开始 + GameHallPacketID_PACKET_CS_FORCESTART GameHallPacketID = 8005 + GameHallPacketID_PACKET_SC_FORCESTART GameHallPacketID = 8006 + // 观众离开房间 + GameHallPacketID_PACKET_CS_AUDIENCE_LEAVEROOM GameHallPacketID = 8007 + // 玩家切换标志,暂离状态 + GameHallPacketID_PACKET_CS_PLAYER_SWITCHFLAG GameHallPacketID = 8008 + // 房间事件,互动表情 + GameHallPacketID_PACKET_CSRoomEvent GameHallPacketID = 8009 + GameHallPacketID_PACKET_SCRoomEvent GameHallPacketID = 8010 ) // Enum value maps for GameHallPacketID. var ( GameHallPacketID_name = map[int32]string{ 0: "PACKET_GameHall_ZERO", - 2200: "PACKET_CS_JOINGAME", - 2201: "PACKET_SC_JOINGAME", 2202: "PACKET_CS_CREATEROOM", 2203: "PACKET_SC_CREATEROOM", 2204: "PACKET_CS_ENTERROOM", 2205: "PACKET_SC_ENTERROOM", 2206: "PACKET_CS_RETURNROOM", 2207: "PACKET_SC_RETURNROOM", - 2208: "PACKET_CS_AUDIENCE_ENTERROOM", 2209: "PACKET_CS_ENTERGAME", 2210: "PACKET_SC_ENTERGAME", 2211: "PACKET_CS_QUITGAME", 2212: "PACKET_SC_QUITGAME", - 2213: "PACKET_SC_CARDGAINWAY", - 2214: "PACKET_CS_TASKLIST", - 2215: "PACKET_SC_TASKLIST", - 2216: "PACKET_SC_TASKCHG", - 2217: "PACKET_SC_TACKCOMPLETE", - 2218: "PACKET_SC_TASKDEL", - 2219: "PACKET_CS_TACKDRAWPRIZE", - 2220: "PACKET_SC_TACKDRAWPRIZE", - 2223: "PACKET_CS_GETAGENTGAMEREC", - 2224: "PACKET_SC_GETAGENTGAMEREC", - 2225: "PACKET_CS_DELAGENTGAMEREC", - 2226: "PACKET_CS_SHOPBUY", - 2227: "PACKET_SC_SHOPBUY", - 2228: "PACKET_SC_LIMITLIST", - 2229: "PACKET_CS_GETLATELYGAMEIDS", - 2230: "PACKET_SC_GETLATELYGAMEIDS", 2231: "PACKET_CS_GETGAMECONFIG", 2232: "PACKET_SC_GETGAMECONFIG", 2233: "PACKET_SC_CHANGEGAMESTATUS", - 2240: "PACKET_CS_ENTERHALL", - 2241: "PACKET_SC_ENTERHALL", - 2242: "PACKET_CS_LEAVEHALL", - 2243: "PACKET_SC_LEAVEHALL", - 2244: "PACKET_CS_HALLROOMLIST", - 2245: "PACKET_SC_HALLROOMLIST", - 2246: "PACKET_SC_ROOMPLAYERENTER", - 2247: "PACKET_SC_ROOMPLAYERLEAVE", - 2248: "PACKET_SC_ROOMSTATECHANG", - 2249: "PACKET_SC_HALLPLAYERNUM", - 2250: "PACKET_SC_BULLETIONINFO", - 2251: "PACKET_CS_BULLETIONINFO", - 2252: "PACKET_CS_CUSTOMERINFOLIST", - 2253: "PACKET_SC_CUSTOMERINFOLIST", - 2254: "PACKET_CS_ENTERDGGAME", - 2255: "PACKET_SC_ENTERDGGAME", - 2256: "PACKET_CS_LEAVEDGGAME", - 2257: "PACKET_SC_LEAVEDGGAME", 2258: "PACKET_SC_PLAYERRECHARGEANSWER", - 2259: "PACKET_CS_THRIDACCOUNTSTATICSTIC", - 2260: "PACKET_SC_THRIDACCOUNTSTATICSTIC", - 2261: "PACKET_CS_THRIDACCOUNTTRANSFER", - 2262: "PACKET_SC_THRIDACCOUNTTRANSFER", - 2263: "PACKET_CS_ENTERTHRIDGAME", - 2264: "PACKET_SC_ENTERTHRIDGAME", - 2265: "PACKET_CS_LEAVETHRIDGAME", - 2266: "PACKET_SC_LEAVETHRIDGAME", - 2267: "PACKET_CS_THRIDGAMELIST", - 2268: "PACKET_SC_THRIDGAMELIST", - 2269: "PACKET_CS_THRIDGAMEBALANCEUPDATE", - 2270: "PACKET_SC_THRIDGAMEBALANCEUPDATE", - 2271: "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE", 2272: "PACKET_CS_CREATEPRIVATEROOM", 2273: "PACKET_SC_CREATEPRIVATEROOM", 2274: "PACKET_CS_GETPRIVATEROOMLIST", 2275: "PACKET_SC_GETPRIVATEROOMLIST", - 2276: "PACKET_CS_GETPRIVATEROOMHISTORY", - 2277: "PACKET_SC_GETPRIVATEROOMHISTORY", - 2278: "PACKET_CS_DESTROYPRIVATEROOM", - 2279: "PACKET_SC_DESTROYPRIVATEROOM", 2280: "PACKET_CS_QUERYROOMINFO", 2281: "PACKET_SC_QUERYROOMINFO", - 2283: "PACKET_SC_GAMESUBLIST", - 2284: "PACKET_CS_GAMEOBSERVE", 2285: "PACKET_SC_GAMESTATE", - 2286: "PACKET_SC_SYNCGAMEFREE", - 2287: "PACKET_SC_LOTTERYSYNC", - 2288: "PACKET_CS_LOTTERYLOG", - 2289: "PACKET_SC_LOTTERYLOG", - 2290: "PACKET_SC_LOTTERYBILL", - 2291: "PACKET_CS_UPLOADLOC", - 2292: "PACKET_SC_UPLOADLOC", + 2208: "PACKET_CS_AUDIENCE_ENTERROOM", 2293: "PACKET_CS_AUDIENCESIT", 2294: "PACKET_SC_AUDIENCESIT", 2295: "PACKET_CS_COMNOTICE", 2296: "PACKET_SC_COMNOTICE", 2297: "PACKET_SC_CHANGEENTRYSWITCH", 2298: "PACKET_SC_NoticeChange", + 2299: "PACKET_CSTouchType", + 2300: "PACKET_CSRoomConfig", + 2301: "PACKET_SCRoomConfig", 8001: "PACKET_CS_LEAVEROOM", 8002: "PACKET_SC_LEAVEROOM", 8003: "PACKET_CS_DESTROYROOM", @@ -392,107 +309,48 @@ var ( 8010: "PACKET_SCRoomEvent", } GameHallPacketID_value = map[string]int32{ - "PACKET_GameHall_ZERO": 0, - "PACKET_CS_JOINGAME": 2200, - "PACKET_SC_JOINGAME": 2201, - "PACKET_CS_CREATEROOM": 2202, - "PACKET_SC_CREATEROOM": 2203, - "PACKET_CS_ENTERROOM": 2204, - "PACKET_SC_ENTERROOM": 2205, - "PACKET_CS_RETURNROOM": 2206, - "PACKET_SC_RETURNROOM": 2207, - "PACKET_CS_AUDIENCE_ENTERROOM": 2208, - "PACKET_CS_ENTERGAME": 2209, - "PACKET_SC_ENTERGAME": 2210, - "PACKET_CS_QUITGAME": 2211, - "PACKET_SC_QUITGAME": 2212, - "PACKET_SC_CARDGAINWAY": 2213, - "PACKET_CS_TASKLIST": 2214, - "PACKET_SC_TASKLIST": 2215, - "PACKET_SC_TASKCHG": 2216, - "PACKET_SC_TACKCOMPLETE": 2217, - "PACKET_SC_TASKDEL": 2218, - "PACKET_CS_TACKDRAWPRIZE": 2219, - "PACKET_SC_TACKDRAWPRIZE": 2220, - "PACKET_CS_GETAGENTGAMEREC": 2223, - "PACKET_SC_GETAGENTGAMEREC": 2224, - "PACKET_CS_DELAGENTGAMEREC": 2225, - "PACKET_CS_SHOPBUY": 2226, - "PACKET_SC_SHOPBUY": 2227, - "PACKET_SC_LIMITLIST": 2228, - "PACKET_CS_GETLATELYGAMEIDS": 2229, - "PACKET_SC_GETLATELYGAMEIDS": 2230, - "PACKET_CS_GETGAMECONFIG": 2231, - "PACKET_SC_GETGAMECONFIG": 2232, - "PACKET_SC_CHANGEGAMESTATUS": 2233, - "PACKET_CS_ENTERHALL": 2240, - "PACKET_SC_ENTERHALL": 2241, - "PACKET_CS_LEAVEHALL": 2242, - "PACKET_SC_LEAVEHALL": 2243, - "PACKET_CS_HALLROOMLIST": 2244, - "PACKET_SC_HALLROOMLIST": 2245, - "PACKET_SC_ROOMPLAYERENTER": 2246, - "PACKET_SC_ROOMPLAYERLEAVE": 2247, - "PACKET_SC_ROOMSTATECHANG": 2248, - "PACKET_SC_HALLPLAYERNUM": 2249, - "PACKET_SC_BULLETIONINFO": 2250, - "PACKET_CS_BULLETIONINFO": 2251, - "PACKET_CS_CUSTOMERINFOLIST": 2252, - "PACKET_SC_CUSTOMERINFOLIST": 2253, - "PACKET_CS_ENTERDGGAME": 2254, - "PACKET_SC_ENTERDGGAME": 2255, - "PACKET_CS_LEAVEDGGAME": 2256, - "PACKET_SC_LEAVEDGGAME": 2257, - "PACKET_SC_PLAYERRECHARGEANSWER": 2258, - "PACKET_CS_THRIDACCOUNTSTATICSTIC": 2259, - "PACKET_SC_THRIDACCOUNTSTATICSTIC": 2260, - "PACKET_CS_THRIDACCOUNTTRANSFER": 2261, - "PACKET_SC_THRIDACCOUNTTRANSFER": 2262, - "PACKET_CS_ENTERTHRIDGAME": 2263, - "PACKET_SC_ENTERTHRIDGAME": 2264, - "PACKET_CS_LEAVETHRIDGAME": 2265, - "PACKET_SC_LEAVETHRIDGAME": 2266, - "PACKET_CS_THRIDGAMELIST": 2267, - "PACKET_SC_THRIDGAMELIST": 2268, - "PACKET_CS_THRIDGAMEBALANCEUPDATE": 2269, - "PACKET_SC_THRIDGAMEBALANCEUPDATE": 2270, - "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE": 2271, - "PACKET_CS_CREATEPRIVATEROOM": 2272, - "PACKET_SC_CREATEPRIVATEROOM": 2273, - "PACKET_CS_GETPRIVATEROOMLIST": 2274, - "PACKET_SC_GETPRIVATEROOMLIST": 2275, - "PACKET_CS_GETPRIVATEROOMHISTORY": 2276, - "PACKET_SC_GETPRIVATEROOMHISTORY": 2277, - "PACKET_CS_DESTROYPRIVATEROOM": 2278, - "PACKET_SC_DESTROYPRIVATEROOM": 2279, - "PACKET_CS_QUERYROOMINFO": 2280, - "PACKET_SC_QUERYROOMINFO": 2281, - "PACKET_SC_GAMESUBLIST": 2283, - "PACKET_CS_GAMEOBSERVE": 2284, - "PACKET_SC_GAMESTATE": 2285, - "PACKET_SC_SYNCGAMEFREE": 2286, - "PACKET_SC_LOTTERYSYNC": 2287, - "PACKET_CS_LOTTERYLOG": 2288, - "PACKET_SC_LOTTERYLOG": 2289, - "PACKET_SC_LOTTERYBILL": 2290, - "PACKET_CS_UPLOADLOC": 2291, - "PACKET_SC_UPLOADLOC": 2292, - "PACKET_CS_AUDIENCESIT": 2293, - "PACKET_SC_AUDIENCESIT": 2294, - "PACKET_CS_COMNOTICE": 2295, - "PACKET_SC_COMNOTICE": 2296, - "PACKET_SC_CHANGEENTRYSWITCH": 2297, - "PACKET_SC_NoticeChange": 2298, - "PACKET_CS_LEAVEROOM": 8001, - "PACKET_SC_LEAVEROOM": 8002, - "PACKET_CS_DESTROYROOM": 8003, - "PACKET_SC_DESTROYROOM": 8004, - "PACKET_CS_FORCESTART": 8005, - "PACKET_SC_FORCESTART": 8006, - "PACKET_CS_AUDIENCE_LEAVEROOM": 8007, - "PACKET_CS_PLAYER_SWITCHFLAG": 8008, - "PACKET_CSRoomEvent": 8009, - "PACKET_SCRoomEvent": 8010, + "PACKET_GameHall_ZERO": 0, + "PACKET_CS_CREATEROOM": 2202, + "PACKET_SC_CREATEROOM": 2203, + "PACKET_CS_ENTERROOM": 2204, + "PACKET_SC_ENTERROOM": 2205, + "PACKET_CS_RETURNROOM": 2206, + "PACKET_SC_RETURNROOM": 2207, + "PACKET_CS_ENTERGAME": 2209, + "PACKET_SC_ENTERGAME": 2210, + "PACKET_CS_QUITGAME": 2211, + "PACKET_SC_QUITGAME": 2212, + "PACKET_CS_GETGAMECONFIG": 2231, + "PACKET_SC_GETGAMECONFIG": 2232, + "PACKET_SC_CHANGEGAMESTATUS": 2233, + "PACKET_SC_PLAYERRECHARGEANSWER": 2258, + "PACKET_CS_CREATEPRIVATEROOM": 2272, + "PACKET_SC_CREATEPRIVATEROOM": 2273, + "PACKET_CS_GETPRIVATEROOMLIST": 2274, + "PACKET_SC_GETPRIVATEROOMLIST": 2275, + "PACKET_CS_QUERYROOMINFO": 2280, + "PACKET_SC_QUERYROOMINFO": 2281, + "PACKET_SC_GAMESTATE": 2285, + "PACKET_CS_AUDIENCE_ENTERROOM": 2208, + "PACKET_CS_AUDIENCESIT": 2293, + "PACKET_SC_AUDIENCESIT": 2294, + "PACKET_CS_COMNOTICE": 2295, + "PACKET_SC_COMNOTICE": 2296, + "PACKET_SC_CHANGEENTRYSWITCH": 2297, + "PACKET_SC_NoticeChange": 2298, + "PACKET_CSTouchType": 2299, + "PACKET_CSRoomConfig": 2300, + "PACKET_SCRoomConfig": 2301, + "PACKET_CS_LEAVEROOM": 8001, + "PACKET_SC_LEAVEROOM": 8002, + "PACKET_CS_DESTROYROOM": 8003, + "PACKET_SC_DESTROYROOM": 8004, + "PACKET_CS_FORCESTART": 8005, + "PACKET_SC_FORCESTART": 8006, + "PACKET_CS_AUDIENCE_LEAVEROOM": 8007, + "PACKET_CS_PLAYER_SWITCHFLAG": 8008, + "PACKET_CSRoomEvent": 8009, + "PACKET_SCRoomEvent": 8010, } ) @@ -523,791 +381,52 @@ func (GameHallPacketID) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{1} } -//进入游戏大厅 -//PACKET_CS_ENTERHALL -type CSEnterHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type DataType int32 - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) -} +const ( + DataType_Zero DataType = 0 + DataType_PrivateRoomList DataType = 1 // 竞技馆房间列表 返回消息 PACKET_SC_GETPRIVATEROOMLIST +) -func (x *CSEnterHall) Reset() { - *x = CSEnterHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Enum value maps for DataType. +var ( + DataType_name = map[int32]string{ + 0: "Zero", + 1: "PrivateRoomList", } -} - -func (x *CSEnterHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterHall) ProtoMessage() {} - -func (x *CSEnterHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + DataType_value = map[string]int32{ + "Zero": 0, + "PrivateRoomList": 1, } - return mi.MessageOf(x) +) + +func (x DataType) Enum() *DataType { + p := new(DataType) + *p = x + return p } -// Deprecated: Use CSEnterHall.ProtoReflect.Descriptor instead. -func (*CSEnterHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{0} +func (x DataType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *CSEnterHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 +func (DataType) Descriptor() protoreflect.EnumDescriptor { + return file_game_proto_enumTypes[2].Descriptor() } -//PACKET_SC_ENTERHALL -type SCEnterHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +func (DataType) Type() protoreflect.EnumType { + return &file_game_proto_enumTypes[2] } -func (x *SCEnterHall) Reset() { - *x = SCEnterHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x DataType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *SCEnterHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterHall) ProtoMessage() {} - -func (x *SCEnterHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCEnterHall.ProtoReflect.Descriptor instead. -func (*SCEnterHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{1} -} - -func (x *SCEnterHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *SCEnterHall) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//离开游戏大厅 -//PACKET_CS_LEAVEHALL -type CSLeaveHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveHall) Reset() { - *x = CSLeaveHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveHall) ProtoMessage() {} - -func (x *CSLeaveHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSLeaveHall.ProtoReflect.Descriptor instead. -func (*CSLeaveHall) Descriptor() ([]byte, []int) { +// Deprecated: Use DataType.Descriptor instead. +func (DataType) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{2} } -//PACKET_SC_LEAVEHALL -type SCLeaveHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` -} - -func (x *SCLeaveHall) Reset() { - *x = SCLeaveHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveHall) ProtoMessage() {} - -func (x *SCLeaveHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLeaveHall.ProtoReflect.Descriptor instead. -func (*SCLeaveHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{3} -} - -func (x *SCLeaveHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -//房间内玩家信息 -type RoomPlayerInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` //数字账号 - Head int32 `protobuf:"varint,2,opt,name=Head,proto3" json:"Head,omitempty"` //头像 - Sex int32 `protobuf:"varint,3,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 - Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"` //名字 - Pos int32 `protobuf:"varint,5,opt,name=Pos,proto3" json:"Pos,omitempty"` //位置 - Flag int32 `protobuf:"varint,6,opt,name=Flag,proto3" json:"Flag,omitempty"` //状态 - HeadOutLine int32 `protobuf:"varint,7,opt,name=HeadOutLine,proto3" json:"HeadOutLine,omitempty"` //头像框 - VIP int32 `protobuf:"varint,8,opt,name=VIP,proto3" json:"VIP,omitempty"` -} - -func (x *RoomPlayerInfo) Reset() { - *x = RoomPlayerInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoomPlayerInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoomPlayerInfo) ProtoMessage() {} - -func (x *RoomPlayerInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoomPlayerInfo.ProtoReflect.Descriptor instead. -func (*RoomPlayerInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{4} -} - -func (x *RoomPlayerInfo) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *RoomPlayerInfo) GetHead() int32 { - if x != nil { - return x.Head - } - return 0 -} - -func (x *RoomPlayerInfo) GetSex() int32 { - if x != nil { - return x.Sex - } - return 0 -} - -func (x *RoomPlayerInfo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RoomPlayerInfo) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *RoomPlayerInfo) GetFlag() int32 { - if x != nil { - return x.Flag - } - return 0 -} - -func (x *RoomPlayerInfo) GetHeadOutLine() int32 { - if x != nil { - return x.HeadOutLine - } - return 0 -} - -func (x *RoomPlayerInfo) GetVIP() int32 { - if x != nil { - return x.VIP - } - return 0 -} - -//房间信息 -type RoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房号 - Starting bool `protobuf:"varint,7,opt,name=Starting,proto3" json:"Starting,omitempty"` //牌局是否开始 - Players []*RoomPlayerInfo `protobuf:"bytes,5,rep,name=Players,proto3" json:"Players,omitempty"` -} - -func (x *RoomInfo) Reset() { - *x = RoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoomInfo) ProtoMessage() {} - -func (x *RoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoomInfo.ProtoReflect.Descriptor instead. -func (*RoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{5} -} - -func (x *RoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *RoomInfo) GetStarting() bool { - if x != nil { - return x.Starting - } - return false -} - -func (x *RoomInfo) GetPlayers() []*RoomPlayerInfo { - if x != nil { - return x.Players - } - return nil -} - -//PACKET_CS_HALLROOMLIST -type CSHallRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) -} - -func (x *CSHallRoomList) Reset() { - *x = CSHallRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSHallRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSHallRoomList) ProtoMessage() {} - -func (x *CSHallRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSHallRoomList.ProtoReflect.Descriptor instead. -func (*CSHallRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{6} -} - -func (x *CSHallRoomList) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -//大厅人数 -type HallInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SceneType int32 `protobuf:"varint,1,opt,name=SceneType,proto3" json:"SceneType,omitempty"` //场 - PlayerNum int32 `protobuf:"varint,2,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 -} - -func (x *HallInfo) Reset() { - *x = HallInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HallInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HallInfo) ProtoMessage() {} - -func (x *HallInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HallInfo.ProtoReflect.Descriptor instead. -func (*HallInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{7} -} - -func (x *HallInfo) GetSceneType() int32 { - if x != nil { - return x.SceneType - } - return 0 -} - -func (x *HallInfo) GetPlayerNum() int32 { - if x != nil { - return x.PlayerNum - } - return 0 -} - -//PACKET_SC_HALLPLAYERNUM -type HallPlayerNum struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallData []*HallInfo `protobuf:"bytes,1,rep,name=HallData,proto3" json:"HallData,omitempty"` //大厅人数 -} - -func (x *HallPlayerNum) Reset() { - *x = HallPlayerNum{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HallPlayerNum) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HallPlayerNum) ProtoMessage() {} - -func (x *HallPlayerNum) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HallPlayerNum.ProtoReflect.Descriptor instead. -func (*HallPlayerNum) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{8} -} - -func (x *HallPlayerNum) GetHallData() []*HallInfo { - if x != nil { - return x.HallData - } - return nil -} - -//PACKET_SC_HALLROOMLIST -type SCHallRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 - IsAdd bool `protobuf:"varint,4,opt,name=IsAdd,proto3" json:"IsAdd,omitempty"` //是否新增 - Params []int32 `protobuf:"varint,5,rep,packed,name=Params,proto3" json:"Params,omitempty"` //游戏规则参数 - Rooms []*RoomInfo `protobuf:"bytes,6,rep,name=Rooms,proto3" json:"Rooms,omitempty"` //房间列表 - HallData []*HallInfo `protobuf:"bytes,7,rep,name=HallData,proto3" json:"HallData,omitempty"` //大厅人数 -} - -func (x *SCHallRoomList) Reset() { - *x = SCHallRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCHallRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCHallRoomList) ProtoMessage() {} - -func (x *SCHallRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCHallRoomList.ProtoReflect.Descriptor instead. -func (*SCHallRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{9} -} - -func (x *SCHallRoomList) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *SCHallRoomList) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *SCHallRoomList) GetGameMode() int32 { - if x != nil { - return x.GameMode - } - return 0 -} - -func (x *SCHallRoomList) GetIsAdd() bool { - if x != nil { - return x.IsAdd - } - return false -} - -func (x *SCHallRoomList) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *SCHallRoomList) GetRooms() []*RoomInfo { - if x != nil { - return x.Rooms - } - return nil -} - -func (x *SCHallRoomList) GetHallData() []*HallInfo { - if x != nil { - return x.HallData - } - return nil -} - -//PACKET_SC_ROOMPLAYERENTER -type SCRoomPlayerEnter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Player *RoomPlayerInfo `protobuf:"bytes,2,opt,name=Player,proto3" json:"Player,omitempty"` -} - -func (x *SCRoomPlayerEnter) Reset() { - *x = SCRoomPlayerEnter{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomPlayerEnter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomPlayerEnter) ProtoMessage() {} - -func (x *SCRoomPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCRoomPlayerEnter.ProtoReflect.Descriptor instead. -func (*SCRoomPlayerEnter) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{10} -} - -func (x *SCRoomPlayerEnter) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomPlayerEnter) GetPlayer() *RoomPlayerInfo { - if x != nil { - return x.Player - } - return nil -} - -//PACKET_SC_ROOMPLAYERLEAVE -type SCRoomPlayerLeave struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Pos int32 `protobuf:"varint,2,opt,name=Pos,proto3" json:"Pos,omitempty"` -} - -func (x *SCRoomPlayerLeave) Reset() { - *x = SCRoomPlayerLeave{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomPlayerLeave) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomPlayerLeave) ProtoMessage() {} - -func (x *SCRoomPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCRoomPlayerLeave.ProtoReflect.Descriptor instead. -func (*SCRoomPlayerLeave) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{11} -} - -func (x *SCRoomPlayerLeave) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomPlayerLeave) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -//PACKET_SC_ROOMSTATECHANG -type SCRoomStateChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Starting bool `protobuf:"varint,2,opt,name=Starting,proto3" json:"Starting,omitempty"` - State int32 `protobuf:"varint,3,opt,name=State,proto3" json:"State,omitempty"` -} - -func (x *SCRoomStateChange) Reset() { - *x = SCRoomStateChange{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomStateChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomStateChange) ProtoMessage() {} - -func (x *SCRoomStateChange) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCRoomStateChange.ProtoReflect.Descriptor instead. -func (*SCRoomStateChange) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{12} -} - -func (x *SCRoomStateChange) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomStateChange) GetStarting() bool { - if x != nil { - return x.Starting - } - return false -} - -func (x *SCRoomStateChange) GetState() int32 { - if x != nil { - return x.State - } - return 0 -} - //PACKET_CS_CREATEROOM type CSCreateRoom struct { state protoimpl.MessageState @@ -1329,7 +448,7 @@ type CSCreateRoom struct { func (x *CSCreateRoom) Reset() { *x = CSCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[13] + mi := &file_game_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1342,7 +461,7 @@ func (x *CSCreateRoom) String() string { func (*CSCreateRoom) ProtoMessage() {} func (x *CSCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[13] + mi := &file_game_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1355,7 +474,7 @@ func (x *CSCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSCreateRoom.ProtoReflect.Descriptor instead. func (*CSCreateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{13} + return file_game_proto_rawDescGZIP(), []int{0} } func (x *CSCreateRoom) GetGameId() int32 { @@ -1417,7 +536,7 @@ type SCCreateRoom struct { func (x *SCCreateRoom) Reset() { *x = SCCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[14] + mi := &file_game_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1430,7 +549,7 @@ func (x *SCCreateRoom) String() string { func (*SCCreateRoom) ProtoMessage() {} func (x *SCCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[14] + mi := &file_game_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1443,7 +562,7 @@ func (x *SCCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCCreateRoom.ProtoReflect.Descriptor instead. func (*SCCreateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{14} + return file_game_proto_rawDescGZIP(), []int{1} } func (x *SCCreateRoom) GetGameId() int32 { @@ -1488,109 +607,6 @@ func (x *SCCreateRoom) GetOpRetCode() OpResultCode_Game { return OpResultCode_Game_OPRC_Sucess_Game } -//PACKET_CS_DESTROYROOM -type CSDestroyRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSDestroyRoom) Reset() { - *x = CSDestroyRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSDestroyRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSDestroyRoom) ProtoMessage() {} - -func (x *CSDestroyRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSDestroyRoom.ProtoReflect.Descriptor instead. -func (*CSDestroyRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{15} -} - -//PACKET_SC_DESTROYROOM -type SCDestroyRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - IsForce int32 `protobuf:"varint,3,opt,name=IsForce,proto3" json:"IsForce,omitempty"` //是否强制销毁 -} - -func (x *SCDestroyRoom) Reset() { - *x = SCDestroyRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCDestroyRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCDestroyRoom) ProtoMessage() {} - -func (x *SCDestroyRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCDestroyRoom.ProtoReflect.Descriptor instead. -func (*SCDestroyRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{16} -} - -func (x *SCDestroyRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCDestroyRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCDestroyRoom) GetIsForce() int32 { - if x != nil { - return x.IsForce - } - return 0 -} - //PACKET_CS_ENTERROOM //PACKET_CS_AUDIENCE_ENTERROOM //玩家请求进入游戏 @@ -1599,14 +615,15 @@ type CSEnterRoom struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏编号 + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏编号 + Password string `protobuf:"bytes,3,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } func (x *CSEnterRoom) Reset() { *x = CSEnterRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[17] + mi := &file_game_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1619,7 +636,7 @@ func (x *CSEnterRoom) String() string { func (*CSEnterRoom) ProtoMessage() {} func (x *CSEnterRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[17] + mi := &file_game_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1632,7 +649,7 @@ func (x *CSEnterRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSEnterRoom.ProtoReflect.Descriptor instead. func (*CSEnterRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{17} + return file_game_proto_rawDescGZIP(), []int{2} } func (x *CSEnterRoom) GetRoomId() int32 { @@ -1649,25 +666,33 @@ func (x *CSEnterRoom) GetGameId() int32 { return 0 } +func (x *CSEnterRoom) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + //PACKET_SC_ENTERROOM type SCEnterRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID - ModeType int32 `protobuf:"varint,2,opt,name=ModeType,proto3" json:"ModeType,omitempty"` //场类型 - Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 - RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - HallId int32 `protobuf:"varint,5,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id - OpRetCode OpResultCode_Game `protobuf:"varint,6,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - ClubId int32 `protobuf:"varint,7,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID + ModeType int32 `protobuf:"varint,2,opt,name=ModeType,proto3" json:"ModeType,omitempty"` //游戏模式(玩法,已经不用了) + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 + RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + HallId int32 `protobuf:"varint,5,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id + OpRetCode OpResultCode_Game `protobuf:"varint,6,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + ClubId int32 `protobuf:"varint,7,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + GameFreeId int32 `protobuf:"varint,8,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏场次id } func (x *SCEnterRoom) Reset() { *x = SCEnterRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[18] + mi := &file_game_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1680,7 +705,7 @@ func (x *SCEnterRoom) String() string { func (*SCEnterRoom) ProtoMessage() {} func (x *SCEnterRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[18] + mi := &file_game_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1693,7 +718,7 @@ func (x *SCEnterRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCEnterRoom.ProtoReflect.Descriptor instead. func (*SCEnterRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{18} + return file_game_proto_rawDescGZIP(), []int{3} } func (x *SCEnterRoom) GetGameId() int32 { @@ -1745,124 +770,9 @@ func (x *SCEnterRoom) GetClubId() int32 { return 0 } -//PACKET_CS_LEAVEROOM -//PACKET_CS_AUDIENCE_LEAVEROOM -//玩家离开房间,返回大厅 -type CSLeaveRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mode int32 `protobuf:"varint,1,opt,name=Mode,proto3" json:"Mode,omitempty"` //离开方式 0:退出 1:暂离(占着座位,返回大厅) -} - -func (x *CSLeaveRoom) Reset() { - *x = CSLeaveRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveRoom) ProtoMessage() {} - -func (x *CSLeaveRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSLeaveRoom.ProtoReflect.Descriptor instead. -func (*CSLeaveRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{19} -} - -func (x *CSLeaveRoom) GetMode() int32 { +func (x *SCEnterRoom) GetGameFreeId() int32 { if x != nil { - return x.Mode - } - return 0 -} - -//PACKET_SC_LEAVEROOM -type SCLeaveRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Reason int32 `protobuf:"varint,2,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 0:主动退出 1:被踢出 - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间ID - Mode int32 `protobuf:"varint,4,opt,name=Mode,proto3" json:"Mode,omitempty"` -} - -func (x *SCLeaveRoom) Reset() { - *x = SCLeaveRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveRoom) ProtoMessage() {} - -func (x *SCLeaveRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLeaveRoom.ProtoReflect.Descriptor instead. -func (*SCLeaveRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{20} -} - -func (x *SCLeaveRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCLeaveRoom) GetReason() int32 { - if x != nil { - return x.Reason - } - return 0 -} - -func (x *SCLeaveRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCLeaveRoom) GetMode() int32 { - if x != nil { - return x.Mode + return x.GameFreeId } return 0 } @@ -1882,7 +792,7 @@ type CSReturnRoom struct { func (x *CSReturnRoom) Reset() { *x = CSReturnRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[21] + mi := &file_game_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1895,7 +805,7 @@ func (x *CSReturnRoom) String() string { func (*CSReturnRoom) ProtoMessage() {} func (x *CSReturnRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[21] + mi := &file_game_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1908,7 +818,7 @@ func (x *CSReturnRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSReturnRoom.ProtoReflect.Descriptor instead. func (*CSReturnRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{21} + return file_game_proto_rawDescGZIP(), []int{4} } func (x *CSReturnRoom) GetApkVer() int32 { @@ -1962,7 +872,7 @@ type SCReturnRoom struct { func (x *SCReturnRoom) Reset() { *x = SCReturnRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[22] + mi := &file_game_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1975,7 +885,7 @@ func (x *SCReturnRoom) String() string { func (*SCReturnRoom) ProtoMessage() {} func (x *SCReturnRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[22] + mi := &file_game_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1988,7 +898,7 @@ func (x *SCReturnRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCReturnRoom.ProtoReflect.Descriptor instead. func (*SCReturnRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{22} + return file_game_proto_rawDescGZIP(), []int{5} } func (x *SCReturnRoom) GetOpRetCode() OpResultCode_Game { @@ -2075,34 +985,36 @@ func (x *SCReturnRoom) GetClubId() int32 { return 0 } -//获取游戏记录 -//PACKET_CS_GETGAMEREC -type CSGetGameRec struct { +//PACKET_CS_ENTERGAME +type CSEnterGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ver int32 `protobuf:"varint,1,opt,name=Ver,proto3" json:"Ver,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id + OpParams []int32 `protobuf:"varint,2,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` + Platform string `protobuf:"bytes,3,opt,name=Platform,proto3" json:"Platform,omitempty"` + ApkVer int32 `protobuf:"varint,4,opt,name=ApkVer,proto3" json:"ApkVer,omitempty"` + ResVer int32 `protobuf:"varint,5,opt,name=ResVer,proto3" json:"ResVer,omitempty"` } -func (x *CSGetGameRec) Reset() { - *x = CSGetGameRec{} +func (x *CSEnterGame) Reset() { + *x = CSEnterGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[23] + mi := &file_game_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSGetGameRec) String() string { +func (x *CSEnterGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSGetGameRec) ProtoMessage() {} +func (*CSEnterGame) ProtoMessage() {} -func (x *CSGetGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[23] +func (x *CSEnterGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,149 +1025,78 @@ func (x *CSGetGameRec) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSGetGameRec.ProtoReflect.Descriptor instead. -func (*CSGetGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{23} +// Deprecated: Use CSEnterGame.ProtoReflect.Descriptor instead. +func (*CSEnterGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{6} } -func (x *CSGetGameRec) GetVer() int32 { - if x != nil { - return x.Ver - } - return 0 -} - -func (x *CSGetGameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -type PlayerGameRec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` - Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` - Pos int32 `protobuf:"varint,5,opt,name=Pos,proto3" json:"Pos,omitempty"` - OtherParams []int32 `protobuf:"varint,6,rep,packed,name=OtherParams,proto3" json:"OtherParams,omitempty"` -} - -func (x *PlayerGameRec) Reset() { - *x = PlayerGameRec{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PlayerGameRec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PlayerGameRec) ProtoMessage() {} - -func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PlayerGameRec.ProtoReflect.Descriptor instead. -func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{24} -} - -func (x *PlayerGameRec) GetId() int32 { +func (x *CSEnterGame) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *PlayerGameRec) GetName() string { +func (x *CSEnterGame) GetOpParams() []int32 { if x != nil { - return x.Name + return x.OpParams + } + return nil +} + +func (x *CSEnterGame) GetPlatform() string { + if x != nil { + return x.Platform } return "" } -func (x *PlayerGameRec) GetHead() int32 { +func (x *CSEnterGame) GetApkVer() int32 { if x != nil { - return x.Head + return x.ApkVer } return 0 } -func (x *PlayerGameRec) GetCoin() int64 { +func (x *CSEnterGame) GetResVer() int32 { if x != nil { - return x.Coin + return x.ResVer } return 0 } -func (x *PlayerGameRec) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *PlayerGameRec) GetOtherParams() []int32 { - if x != nil { - return x.OtherParams - } - return nil -} - -type GameRec struct { +//PACKET_SC_ENTERGAME +type SCEnterGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RecId int32 `protobuf:"varint,1,opt,name=RecId,proto3" json:"RecId,omitempty"` - Datas []*PlayerGameRec `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` - Ts int64 `protobuf:"varint,3,opt,name=Ts,proto3" json:"Ts,omitempty"` - RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - GameMode int32 `protobuf:"varint,5,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - SceneType int32 `protobuf:"varint,6,opt,name=SceneType,proto3" json:"SceneType,omitempty"` - GameId int32 `protobuf:"varint,7,opt,name=GameId,proto3" json:"GameId,omitempty"` - TotalOfGames int32 `protobuf:"varint,8,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` - NumOfGames int32 `protobuf:"varint,9,opt,name=NumOfGames,proto3" json:"NumOfGames,omitempty"` - RoomFeeMode int32 `protobuf:"varint,10,opt,name=RoomFeeMode,proto3" json:"RoomFeeMode,omitempty"` - RoomCardCnt int32 `protobuf:"varint,11,opt,name=RoomCardCnt,proto3" json:"RoomCardCnt,omitempty"` - Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` - GameTime int32 `protobuf:"varint,13,opt,name=GameTime,proto3" json:"GameTime,omitempty"` + OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // + OpParams []int32 `protobuf:"varint,3,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` + MinApkVer int32 `protobuf:"varint,4,opt,name=MinApkVer,proto3" json:"MinApkVer,omitempty"` //最低apk版本号 + LatestApkVer int32 `protobuf:"varint,5,opt,name=LatestApkVer,proto3" json:"LatestApkVer,omitempty"` //最新apk版本号 + MinResVer int32 `protobuf:"varint,6,opt,name=MinResVer,proto3" json:"MinResVer,omitempty"` //最低资源版本号 + LatestResVer int32 `protobuf:"varint,7,opt,name=LatestResVer,proto3" json:"LatestResVer,omitempty"` //最新资源版本号 } -func (x *GameRec) Reset() { - *x = GameRec{} +func (x *SCEnterGame) Reset() { + *x = SCEnterGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[25] + mi := &file_game_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GameRec) String() string { +func (x *SCEnterGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GameRec) ProtoMessage() {} +func (*SCEnterGame) ProtoMessage() {} -func (x *GameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[25] +func (x *SCEnterGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2266,433 +1107,144 @@ func (x *GameRec) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GameRec.ProtoReflect.Descriptor instead. -func (*GameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{25} +// Deprecated: Use SCEnterGame.ProtoReflect.Descriptor instead. +func (*SCEnterGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{7} } -func (x *GameRec) GetRecId() int32 { +func (x *SCEnterGame) GetOpCode() OpResultCode_Game { if x != nil { - return x.RecId - } - return 0 -} - -func (x *GameRec) GetDatas() []*PlayerGameRec { - if x != nil { - return x.Datas - } - return nil -} - -func (x *GameRec) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *GameRec) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *GameRec) GetGameMode() int32 { - if x != nil { - return x.GameMode - } - return 0 -} - -func (x *GameRec) GetSceneType() int32 { - if x != nil { - return x.SceneType - } - return 0 -} - -func (x *GameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *GameRec) GetTotalOfGames() int32 { - if x != nil { - return x.TotalOfGames - } - return 0 -} - -func (x *GameRec) GetNumOfGames() int32 { - if x != nil { - return x.NumOfGames - } - return 0 -} - -func (x *GameRec) GetRoomFeeMode() int32 { - if x != nil { - return x.RoomFeeMode - } - return 0 -} - -func (x *GameRec) GetRoomCardCnt() int32 { - if x != nil { - return x.RoomCardCnt - } - return 0 -} - -func (x *GameRec) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *GameRec) GetGameTime() int32 { - if x != nil { - return x.GameTime - } - return 0 -} - -//PACKET_SC_GETGAMEREC -type SCGetGameRec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Recs []*GameRec `protobuf:"bytes,1,rep,name=Recs,proto3" json:"Recs,omitempty"` - Ver int32 `protobuf:"varint,2,opt,name=Ver,proto3" json:"Ver,omitempty"` - GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` -} - -func (x *SCGetGameRec) Reset() { - *x = SCGetGameRec{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetGameRec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetGameRec) ProtoMessage() {} - -func (x *SCGetGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCGetGameRec.ProtoReflect.Descriptor instead. -func (*SCGetGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{26} -} - -func (x *SCGetGameRec) GetRecs() []*GameRec { - if x != nil { - return x.Recs - } - return nil -} - -func (x *SCGetGameRec) GetVer() int32 { - if x != nil { - return x.Ver - } - return 0 -} - -func (x *SCGetGameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -//PACKET_CS_SHARESUC -type CSShareSuc struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ShareType int32 `protobuf:"varint,1,opt,name=ShareType,proto3" json:"ShareType,omitempty"` //分享类型 1:微信好友 2:朋友圈 -} - -func (x *CSShareSuc) Reset() { - *x = CSShareSuc{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSShareSuc) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSShareSuc) ProtoMessage() {} - -func (x *CSShareSuc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSShareSuc.ProtoReflect.Descriptor instead. -func (*CSShareSuc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{27} -} - -func (x *CSShareSuc) GetShareType() int32 { - if x != nil { - return x.ShareType - } - return 0 -} - -//PACKET_SC_SHARESUC -type SCShareSuc struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCShareSuc) Reset() { - *x = SCShareSuc{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCShareSuc) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCShareSuc) ProtoMessage() {} - -func (x *SCShareSuc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCShareSuc.ProtoReflect.Descriptor instead. -func (*SCShareSuc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{28} -} - -func (x *SCShareSuc) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode + return x.OpCode } return OpResultCode_Game_OPRC_Sucess_Game } -//PACKET_CS_FORCESTART -type CSForceStart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSForceStart) Reset() { - *x = CSForceStart{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSForceStart) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSForceStart) ProtoMessage() {} - -func (x *CSForceStart) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSForceStart.ProtoReflect.Descriptor instead. -func (*CSForceStart) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{29} -} - -//PACKET_SC_FORCESTART -type SCForceStart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCForceStart) Reset() { - *x = SCForceStart{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCForceStart) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCForceStart) ProtoMessage() {} - -func (x *SCForceStart) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCForceStart.ProtoReflect.Descriptor instead. -func (*SCForceStart) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{30} -} - -func (x *SCForceStart) GetOpRetCode() OpResultCode_Game { +func (x *SCEnterGame) GetId() int32 { if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//PACKET_CS_INVITEROBOT -type CSInviteRobot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` - IsAgent bool `protobuf:"varint,2,opt,name=IsAgent,proto3" json:"IsAgent,omitempty"` //0:自己玩 1:机器人代替我 -} - -func (x *CSInviteRobot) Reset() { - *x = CSInviteRobot{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSInviteRobot) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSInviteRobot) ProtoMessage() {} - -func (x *CSInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSInviteRobot.ProtoReflect.Descriptor instead. -func (*CSInviteRobot) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{31} -} - -func (x *CSInviteRobot) GetGameId() int32 { - if x != nil { - return x.GameId + return x.Id } return 0 } -func (x *CSInviteRobot) GetIsAgent() bool { +func (x *SCEnterGame) GetOpParams() []int32 { if x != nil { - return x.IsAgent + return x.OpParams + } + return nil +} + +func (x *SCEnterGame) GetMinApkVer() int32 { + if x != nil { + return x.MinApkVer + } + return 0 +} + +func (x *SCEnterGame) GetLatestApkVer() int32 { + if x != nil { + return x.LatestApkVer + } + return 0 +} + +func (x *SCEnterGame) GetMinResVer() int32 { + if x != nil { + return x.MinResVer + } + return 0 +} + +func (x *SCEnterGame) GetLatestResVer() int32 { + if x != nil { + return x.LatestResVer + } + return 0 +} + +//PACKET_CS_QUITGAME +type CSQuitGame struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id + IsAudience bool `protobuf:"varint,2,opt,name=IsAudience,proto3" json:"IsAudience,omitempty"` //是否是观众 +} + +func (x *CSQuitGame) Reset() { + *x = CSQuitGame{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSQuitGame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSQuitGame) ProtoMessage() {} + +func (x *CSQuitGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSQuitGame.ProtoReflect.Descriptor instead. +func (*CSQuitGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{8} +} + +func (x *CSQuitGame) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CSQuitGame) GetIsAudience() bool { + if x != nil { + return x.IsAudience } return false } -//玩家设置标记 -//PACKET_CS_PLAYER_SWITCHFLAG -type CSPlayerSwithFlag struct { +//PACKET_SC_QUITGAME +type SCQuitGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag int32 `protobuf:"varint,1,opt,name=Flag,proto3" json:"Flag,omitempty"` - Mark int32 `protobuf:"varint,2,opt,name=Mark,proto3" json:"Mark,omitempty"` //1:设置 0:取消 + OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` + Reason int32 `protobuf:"varint,3,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 } -func (x *CSPlayerSwithFlag) Reset() { - *x = CSPlayerSwithFlag{} +func (x *SCQuitGame) Reset() { + *x = SCQuitGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[32] + mi := &file_game_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSPlayerSwithFlag) String() string { +func (x *SCQuitGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSPlayerSwithFlag) ProtoMessage() {} +func (*SCQuitGame) ProtoMessage() {} -func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[32] +func (x *SCQuitGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2703,2943 +1255,28 @@ func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSPlayerSwithFlag.ProtoReflect.Descriptor instead. -func (*CSPlayerSwithFlag) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{32} +// Deprecated: Use SCQuitGame.ProtoReflect.Descriptor instead. +func (*SCQuitGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{9} } -func (x *CSPlayerSwithFlag) GetFlag() int32 { +func (x *SCQuitGame) GetOpCode() OpResultCode_Game { if x != nil { - return x.Flag + return x.OpCode } - return 0 + return OpResultCode_Game_OPRC_Sucess_Game } -func (x *CSPlayerSwithFlag) GetMark() int32 { - if x != nil { - return x.Mark - } - return 0 -} - -//玩家商城购买 -//PACKET_CS_SHOPBUY -type CSShopBuy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //商品ID - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //数量 -} - -func (x *CSShopBuy) Reset() { - *x = CSShopBuy{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSShopBuy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSShopBuy) ProtoMessage() {} - -func (x *CSShopBuy) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSShopBuy.ProtoReflect.Descriptor instead. -func (*CSShopBuy) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{33} -} - -func (x *CSShopBuy) GetId() int32 { +func (x *SCQuitGame) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *CSShopBuy) GetCount() int32 { +func (x *SCQuitGame) GetReason() int32 { if x != nil { - return x.Count - } - return 0 -} - -//PACKET_SC_SHOPBUY -type SCShopBuy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - CostType int32 `protobuf:"varint,3,opt,name=CostType,proto3" json:"CostType,omitempty"` //消耗类型 - CostNum int32 `protobuf:"varint,4,opt,name=CostNum,proto3" json:"CostNum,omitempty"` //消耗数量 - GainType int32 `protobuf:"varint,5,opt,name=GainType,proto3" json:"GainType,omitempty"` //获得类型 - GainNum int32 `protobuf:"varint,6,opt,name=GainNum,proto3" json:"GainNum,omitempty"` //获得数量 -} - -func (x *SCShopBuy) Reset() { - *x = SCShopBuy{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCShopBuy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCShopBuy) ProtoMessage() {} - -func (x *SCShopBuy) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCShopBuy.ProtoReflect.Descriptor instead. -func (*SCShopBuy) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{34} -} - -func (x *SCShopBuy) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SCShopBuy) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCShopBuy) GetCostType() int32 { - if x != nil { - return x.CostType - } - return 0 -} - -func (x *SCShopBuy) GetCostNum() int32 { - if x != nil { - return x.CostNum - } - return 0 -} - -func (x *SCShopBuy) GetGainType() int32 { - if x != nil { - return x.GainType - } - return 0 -} - -func (x *SCShopBuy) GetGainNum() int32 { - if x != nil { - return x.GainNum - } - return 0 -} - -//CS_JOINGAME -//请求的通知 -type CSJoinGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MsgType int32 `protobuf:"varint,1,opt,name=MsgType,proto3" json:"MsgType,omitempty"` //0.请求信息1.确认信息 - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //type=1发送,为服务器下发的数据,原数据发送 - Pos int32 `protobuf:"varint,3,opt,name=Pos,proto3" json:"Pos,omitempty"` //type=0时发送,为申请坐下的位置,索引0开始 - Agree bool `protobuf:"varint,4,opt,name=Agree,proto3" json:"Agree,omitempty"` //type=1时发送,true为同意,false为拒绝 -} - -func (x *CSJoinGame) Reset() { - *x = CSJoinGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSJoinGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSJoinGame) ProtoMessage() {} - -func (x *CSJoinGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSJoinGame.ProtoReflect.Descriptor instead. -func (*CSJoinGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{35} -} - -func (x *CSJoinGame) GetMsgType() int32 { - if x != nil { - return x.MsgType - } - return 0 -} - -func (x *CSJoinGame) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *CSJoinGame) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *CSJoinGame) GetAgree() bool { - if x != nil { - return x.Agree - } - return false -} - -//SC_TJOINGAME -//请求的通知 -type SCJoinGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MsgType int32 `protobuf:"varint,1,opt,name=MsgType,proto3" json:"MsgType,omitempty"` //0.请求信息1.确认信息 - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` //type=0为申请者的昵称,和snid同步发送,广播范围是房间内用户 - SnId int32 `protobuf:"varint,3,opt,name=SnId,proto3" json:"SnId,omitempty"` //type=0申请者ID - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //type=1时,为申请的结果,为0成功,其他的为错误代码 1 座位已满 2 观战人数已满 -} - -func (x *SCJoinGame) Reset() { - *x = SCJoinGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCJoinGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCJoinGame) ProtoMessage() {} - -func (x *SCJoinGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCJoinGame.ProtoReflect.Descriptor instead. -func (*SCJoinGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{36} -} - -func (x *SCJoinGame) GetMsgType() int32 { - if x != nil { - return x.MsgType - } - return 0 -} - -func (x *SCJoinGame) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SCJoinGame) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *SCJoinGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//PACKET_CS_ENTERDGGAME -type CSEnterDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LoginType int32 `protobuf:"varint,1,opt,name=LoginType,proto3" json:"LoginType,omitempty"` //0.试玩登录1.正常登录 - DgGameId int32 `protobuf:"varint,2,opt,name=DgGameId,proto3" json:"DgGameId,omitempty"` //游戏ID - Domains string `protobuf:"bytes,3,opt,name=Domains,proto3" json:"Domains,omitempty"` //sdk -} - -func (x *CSEnterDgGame) Reset() { - *x = CSEnterDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSEnterDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterDgGame) ProtoMessage() {} - -func (x *CSEnterDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSEnterDgGame.ProtoReflect.Descriptor instead. -func (*CSEnterDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{37} -} - -func (x *CSEnterDgGame) GetLoginType() int32 { - if x != nil { - return x.LoginType - } - return 0 -} - -func (x *CSEnterDgGame) GetDgGameId() int32 { - if x != nil { - return x.DgGameId - } - return 0 -} - -func (x *CSEnterDgGame) GetDomains() string { - if x != nil { - return x.Domains - } - return "" -} - -type SCEnterDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - LoginUrl string `protobuf:"bytes,2,opt,name=LoginUrl,proto3" json:"LoginUrl,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` - DgGameId int32 `protobuf:"varint,4,opt,name=DgGameId,proto3" json:"DgGameId,omitempty"` //游戏ID - CodeId int32 `protobuf:"varint,5,opt,name=CodeId,proto3" json:"CodeId,omitempty"` - Domains string `protobuf:"bytes,6,opt,name=Domains,proto3" json:"Domains,omitempty"` - List []string `protobuf:"bytes,7,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCEnterDgGame) Reset() { - *x = SCEnterDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCEnterDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterDgGame) ProtoMessage() {} - -func (x *SCEnterDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCEnterDgGame.ProtoReflect.Descriptor instead. -func (*SCEnterDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{38} -} - -func (x *SCEnterDgGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCEnterDgGame) GetLoginUrl() string { - if x != nil { - return x.LoginUrl - } - return "" -} - -func (x *SCEnterDgGame) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *SCEnterDgGame) GetDgGameId() int32 { - if x != nil { - return x.DgGameId - } - return 0 -} - -func (x *SCEnterDgGame) GetCodeId() int32 { - if x != nil { - return x.CodeId - } - return 0 -} - -func (x *SCEnterDgGame) GetDomains() string { - if x != nil { - return x.Domains - } - return "" -} - -func (x *SCEnterDgGame) GetList() []string { - if x != nil { - return x.List - } - return nil -} - -//PACKET_CS_LEAVEDGGAME -type CSLeaveDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveDgGame) Reset() { - *x = CSLeaveDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveDgGame) ProtoMessage() {} - -func (x *CSLeaveDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSLeaveDgGame.ProtoReflect.Descriptor instead. -func (*CSLeaveDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{39} -} - -type SCLeaveDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCLeaveDgGame) Reset() { - *x = SCLeaveDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveDgGame) ProtoMessage() {} - -func (x *SCLeaveDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLeaveDgGame.ProtoReflect.Descriptor instead. -func (*SCLeaveDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{40} -} - -func (x *SCLeaveDgGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//第三方个人账户信息统计 -type CSThridAccountStatistic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqId int32 `protobuf:"varint,1,opt,name=ReqId,proto3" json:"ReqId,omitempty"` //-1返回全部平台信息,0为系统平台 -} - -func (x *CSThridAccountStatistic) Reset() { - *x = CSThridAccountStatistic{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridAccountStatistic) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridAccountStatistic) ProtoMessage() {} - -func (x *CSThridAccountStatistic) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSThridAccountStatistic.ProtoReflect.Descriptor instead. -func (*CSThridAccountStatistic) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{41} -} - -func (x *CSThridAccountStatistic) GetReqId() int32 { - if x != nil { - return x.ReqId - } - return 0 -} - -type ThridAccount struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridPlatformId int32 `protobuf:"varint,1,opt,name=ThridPlatformId,proto3" json:"ThridPlatformId,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - Status int32 `protobuf:"varint,3,opt,name=Status,proto3" json:"Status,omitempty"` //200正常,403异常 - Balance int64 `protobuf:"varint,4,opt,name=Balance,proto3" json:"Balance,omitempty"` -} - -func (x *ThridAccount) Reset() { - *x = ThridAccount{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridAccount) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridAccount) ProtoMessage() {} - -func (x *ThridAccount) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ThridAccount.ProtoReflect.Descriptor instead. -func (*ThridAccount) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{42} -} - -func (x *ThridAccount) GetThridPlatformId() int32 { - if x != nil { - return x.ThridPlatformId - } - return 0 -} - -func (x *ThridAccount) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ThridAccount) GetStatus() int32 { - if x != nil { - return x.Status - } - return 0 -} - -func (x *ThridAccount) GetBalance() int64 { - if x != nil { - return x.Balance - } - return 0 -} - -type SCThridAccountStatistic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqId int32 `protobuf:"varint,1,opt,name=ReqId,proto3" json:"ReqId,omitempty"` - Accounts []*ThridAccount `protobuf:"bytes,2,rep,name=Accounts,proto3" json:"Accounts,omitempty"` -} - -func (x *SCThridAccountStatistic) Reset() { - *x = SCThridAccountStatistic{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridAccountStatistic) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridAccountStatistic) ProtoMessage() {} - -func (x *SCThridAccountStatistic) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCThridAccountStatistic.ProtoReflect.Descriptor instead. -func (*SCThridAccountStatistic) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{43} -} - -func (x *SCThridAccountStatistic) GetReqId() int32 { - if x != nil { - return x.ReqId - } - return 0 -} - -func (x *SCThridAccountStatistic) GetAccounts() []*ThridAccount { - if x != nil { - return x.Accounts - } - return nil -} - -//第三方个人账户余额转入转出 -type CSThridAccountTransfer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FromId int32 `protobuf:"varint,1,opt,name=FromId,proto3" json:"FromId,omitempty"` - ToId int32 `protobuf:"varint,2,opt,name=ToId,proto3" json:"ToId,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"` -} - -func (x *CSThridAccountTransfer) Reset() { - *x = CSThridAccountTransfer{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridAccountTransfer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridAccountTransfer) ProtoMessage() {} - -func (x *CSThridAccountTransfer) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSThridAccountTransfer.ProtoReflect.Descriptor instead. -func (*CSThridAccountTransfer) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{44} -} - -func (x *CSThridAccountTransfer) GetFromId() int32 { - if x != nil { - return x.FromId - } - return 0 -} - -func (x *CSThridAccountTransfer) GetToId() int32 { - if x != nil { - return x.ToId - } - return 0 -} - -func (x *CSThridAccountTransfer) GetAmount() int64 { - if x != nil { - return x.Amount - } - return 0 -} - -type SCThridAccountTransfer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Accounts []*ThridAccount `protobuf:"bytes,2,rep,name=Accounts,proto3" json:"Accounts,omitempty"` //OpRetCode为0时,两条数据 分别是from to -} - -func (x *SCThridAccountTransfer) Reset() { - *x = SCThridAccountTransfer{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridAccountTransfer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridAccountTransfer) ProtoMessage() {} - -func (x *SCThridAccountTransfer) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCThridAccountTransfer.ProtoReflect.Descriptor instead. -func (*SCThridAccountTransfer) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{45} -} - -func (x *SCThridAccountTransfer) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridAccountTransfer) GetAccounts() []*ThridAccount { - if x != nil { - return x.Accounts - } - return nil -} - -type CSEnterThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridGameId int32 `protobuf:"varint,2,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID -} - -func (x *CSEnterThridGame) Reset() { - *x = CSEnterThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSEnterThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterThridGame) ProtoMessage() {} - -func (x *CSEnterThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSEnterThridGame.ProtoReflect.Descriptor instead. -func (*CSEnterThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{46} -} - -func (x *CSEnterThridGame) GetThridGameId() int32 { - if x != nil { - return x.ThridGameId - } - return 0 -} - -type SCEnterThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - EnterUrl string `protobuf:"bytes,2,opt,name=EnterUrl,proto3" json:"EnterUrl,omitempty"` - ScreenOrientationType int32 `protobuf:"varint,3,opt,name=ScreenOrientationType,proto3" json:"ScreenOrientationType,omitempty"` - ThridGameId int32 `protobuf:"varint,4,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID -} - -func (x *SCEnterThridGame) Reset() { - *x = SCEnterThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCEnterThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterThridGame) ProtoMessage() {} - -func (x *SCEnterThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCEnterThridGame.ProtoReflect.Descriptor instead. -func (*SCEnterThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{47} -} - -func (x *SCEnterThridGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCEnterThridGame) GetEnterUrl() string { - if x != nil { - return x.EnterUrl - } - return "" -} - -func (x *SCEnterThridGame) GetScreenOrientationType() int32 { - if x != nil { - return x.ScreenOrientationType - } - return 0 -} - -func (x *SCEnterThridGame) GetThridGameId() int32 { - if x != nil { - return x.ThridGameId - } - return 0 -} - -type CSLeaveThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveThridGame) Reset() { - *x = CSLeaveThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveThridGame) ProtoMessage() {} - -func (x *CSLeaveThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSLeaveThridGame.ProtoReflect.Descriptor instead. -func (*CSLeaveThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{48} -} - -type SCLeaveThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCLeaveThridGame) Reset() { - *x = SCLeaveThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveThridGame) ProtoMessage() {} - -func (x *SCLeaveThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLeaveThridGame.ProtoReflect.Descriptor instead. -func (*SCLeaveThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{49} -} - -func (x *SCLeaveThridGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -type CSThridGameList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSThridGameList) Reset() { - *x = CSThridGameList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridGameList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridGameList) ProtoMessage() {} - -func (x *CSThridGameList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSThridGameList.ProtoReflect.Descriptor instead. -func (*CSThridGameList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{50} -} - -type ThridGameDatas struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridGameId string `protobuf:"bytes,1,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID - ThridGameName string `protobuf:"bytes,2,opt,name=ThridGameName,proto3" json:"ThridGameName,omitempty"` //游戏名 -} - -func (x *ThridGameDatas) Reset() { - *x = ThridGameDatas{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridGameDatas) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridGameDatas) ProtoMessage() {} - -func (x *ThridGameDatas) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ThridGameDatas.ProtoReflect.Descriptor instead. -func (*ThridGameDatas) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{51} -} - -func (x *ThridGameDatas) GetThridGameId() string { - if x != nil { - return x.ThridGameId - } - return "" -} - -func (x *ThridGameDatas) GetThridGameName() string { - if x != nil { - return x.ThridGameName - } - return "" -} - -type ThridGamePlatforms struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridPlatformId int32 `protobuf:"varint,1,opt,name=ThridPlatformId,proto3" json:"ThridPlatformId,omitempty"` - ThridPlatformName string `protobuf:"bytes,2,opt,name=ThridPlatformName,proto3" json:"ThridPlatformName,omitempty"` //平台名 - GameDatas []*ThridGameDatas `protobuf:"bytes,3,rep,name=GameDatas,proto3" json:"GameDatas,omitempty"` -} - -func (x *ThridGamePlatforms) Reset() { - *x = ThridGamePlatforms{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridGamePlatforms) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridGamePlatforms) ProtoMessage() {} - -func (x *ThridGamePlatforms) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ThridGamePlatforms.ProtoReflect.Descriptor instead. -func (*ThridGamePlatforms) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{52} -} - -func (x *ThridGamePlatforms) GetThridPlatformId() int32 { - if x != nil { - return x.ThridPlatformId - } - return 0 -} - -func (x *ThridGamePlatforms) GetThridPlatformName() string { - if x != nil { - return x.ThridPlatformName - } - return "" -} - -func (x *ThridGamePlatforms) GetGameDatas() []*ThridGameDatas { - if x != nil { - return x.GameDatas - } - return nil -} - -type SCThridGameList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - GamePlatforms []*ThridGamePlatforms `protobuf:"bytes,2,rep,name=GamePlatforms,proto3" json:"GamePlatforms,omitempty"` -} - -func (x *SCThridGameList) Reset() { - *x = SCThridGameList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameList) ProtoMessage() {} - -func (x *SCThridGameList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCThridGameList.ProtoReflect.Descriptor instead. -func (*SCThridGameList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{53} -} - -func (x *SCThridGameList) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridGameList) GetGamePlatforms() []*ThridGamePlatforms { - if x != nil { - return x.GamePlatforms - } - return nil -} - -type CSThridGameBalanceUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSThridGameBalanceUpdate) Reset() { - *x = CSThridGameBalanceUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridGameBalanceUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridGameBalanceUpdate) ProtoMessage() {} - -func (x *CSThridGameBalanceUpdate) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSThridGameBalanceUpdate.ProtoReflect.Descriptor instead. -func (*CSThridGameBalanceUpdate) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{54} -} - -type SCThridGameBalanceUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Coin int64 `protobuf:"varint,2,opt,name=Coin,proto3" json:"Coin,omitempty"` //玩家的余额 -} - -func (x *SCThridGameBalanceUpdate) Reset() { - *x = SCThridGameBalanceUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameBalanceUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameBalanceUpdate) ProtoMessage() {} - -func (x *SCThridGameBalanceUpdate) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCThridGameBalanceUpdate.ProtoReflect.Descriptor instead. -func (*SCThridGameBalanceUpdate) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{55} -} - -func (x *SCThridGameBalanceUpdate) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridGameBalanceUpdate) GetCoin() int64 { - if x != nil { - return x.Coin - } - return 0 -} - -type SCThridGameBalanceUpdateState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCThridGameBalanceUpdateState) Reset() { - *x = SCThridGameBalanceUpdateState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameBalanceUpdateState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameBalanceUpdateState) ProtoMessage() {} - -func (x *SCThridGameBalanceUpdateState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCThridGameBalanceUpdateState.ProtoReflect.Descriptor instead. -func (*SCThridGameBalanceUpdateState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{56} -} - -func (x *SCThridGameBalanceUpdateState) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//创建私人房间 -//PACKET_CS_CREATEPRIVATEROOM -type CSCreatePrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - Params []int32 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP -} - -func (x *CSCreatePrivateRoom) Reset() { - *x = CSCreatePrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSCreatePrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSCreatePrivateRoom) ProtoMessage() {} - -func (x *CSCreatePrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSCreatePrivateRoom.ProtoReflect.Descriptor instead. -func (*CSCreatePrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{57} -} - -func (x *CSCreatePrivateRoom) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *CSCreatePrivateRoom) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -//创建私人房间 -//PACKET_SC_CREATEPRIVATEROOM -type SCCreatePrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - //游戏ID - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - Params []int32 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCCreatePrivateRoom) Reset() { - *x = SCCreatePrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCCreatePrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCCreatePrivateRoom) ProtoMessage() {} - -func (x *SCCreatePrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCCreatePrivateRoom.ProtoReflect.Descriptor instead. -func (*SCCreatePrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{58} -} - -func (x *SCCreatePrivateRoom) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCCreatePrivateRoom) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *SCCreatePrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCCreatePrivateRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//个人创建的房间信息 -type PrivateRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - RoomId int32 `protobuf:"varint,2,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - CurrRound int32 `protobuf:"varint,3,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前第几轮 - MaxRound int32 `protobuf:"varint,4,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最多多少轮 - CurrNum int32 `protobuf:"varint,5,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 - MaxPlayer int32 `protobuf:"varint,6,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 - CreateTs int32 `protobuf:"varint,7,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 -} - -func (x *PrivateRoomInfo) Reset() { - *x = PrivateRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivateRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivateRoomInfo) ProtoMessage() {} - -func (x *PrivateRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrivateRoomInfo.ProtoReflect.Descriptor instead. -func (*PrivateRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{59} -} - -func (x *PrivateRoomInfo) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *PrivateRoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *PrivateRoomInfo) GetCurrRound() int32 { - if x != nil { - return x.CurrRound - } - return 0 -} - -func (x *PrivateRoomInfo) GetMaxRound() int32 { - if x != nil { - return x.MaxRound - } - return 0 -} - -func (x *PrivateRoomInfo) GetCurrNum() int32 { - if x != nil { - return x.CurrNum - } - return 0 -} - -func (x *PrivateRoomInfo) GetMaxPlayer() int32 { - if x != nil { - return x.MaxPlayer - } - return 0 -} - -func (x *PrivateRoomInfo) GetCreateTs() int32 { - if x != nil { - return x.CreateTs - } - return 0 -} - -//获取代开的房间列表 -//PACKET_CS_GETPRIVATEROOMLIST -type CSGetPrivateRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSGetPrivateRoomList) Reset() { - *x = CSGetPrivateRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGetPrivateRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGetPrivateRoomList) ProtoMessage() {} - -func (x *CSGetPrivateRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSGetPrivateRoomList.ProtoReflect.Descriptor instead. -func (*CSGetPrivateRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{60} -} - -//PACKET_SC_GETPRIVATEROOMLIST -type SCGetPrivateRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Datas []*PrivateRoomInfo `protobuf:"bytes,1,rep,name=Datas,proto3" json:"Datas,omitempty"` //房间列表 -} - -func (x *SCGetPrivateRoomList) Reset() { - *x = SCGetPrivateRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetPrivateRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetPrivateRoomList) ProtoMessage() {} - -func (x *SCGetPrivateRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCGetPrivateRoomList.ProtoReflect.Descriptor instead. -func (*SCGetPrivateRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{61} -} - -func (x *SCGetPrivateRoomList) GetDatas() []*PrivateRoomInfo { - if x != nil { - return x.Datas - } - return nil -} - -//获取代开的房间历史记录 -//PACKET_CS_GETPRIVATEROOMHISTORY -type CSGetPrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - QueryTime int32 `protobuf:"varint,1,opt,name=QueryTime,proto3" json:"QueryTime,omitempty"` //查询日期 YYYYMMDD -} - -func (x *CSGetPrivateRoomHistory) Reset() { - *x = CSGetPrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGetPrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGetPrivateRoomHistory) ProtoMessage() {} - -func (x *CSGetPrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSGetPrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*CSGetPrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{62} -} - -func (x *CSGetPrivateRoomHistory) GetQueryTime() int32 { - if x != nil { - return x.QueryTime - } - return 0 -} - -//已开房间历史记录 -type PrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - RoomId int32 `protobuf:"varint,2,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - CreateTime int32 `protobuf:"varint,3,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间,时间戳 - DestroyTime int32 `protobuf:"varint,4,opt,name=DestroyTime,proto3" json:"DestroyTime,omitempty"` //结束时间,时间戳 - CreateFee int32 `protobuf:"varint,5,opt,name=CreateFee,proto3" json:"CreateFee,omitempty"` //房费 -} - -func (x *PrivateRoomHistory) Reset() { - *x = PrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivateRoomHistory) ProtoMessage() {} - -func (x *PrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*PrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{63} -} - -func (x *PrivateRoomHistory) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *PrivateRoomHistory) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *PrivateRoomHistory) GetCreateTime() int32 { - if x != nil { - return x.CreateTime - } - return 0 -} - -func (x *PrivateRoomHistory) GetDestroyTime() int32 { - if x != nil { - return x.DestroyTime - } - return 0 -} - -func (x *PrivateRoomHistory) GetCreateFee() int32 { - if x != nil { - return x.CreateFee - } - return 0 -} - -//PACKET_SC_GETPRIVATEROOMHISTORY -type SCGetPrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - QueryTime int32 `protobuf:"varint,1,opt,name=QueryTime,proto3" json:"QueryTime,omitempty"` //查询日期 - Datas []*PrivateRoomHistory `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` //历史开房记录 -} - -func (x *SCGetPrivateRoomHistory) Reset() { - *x = SCGetPrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetPrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetPrivateRoomHistory) ProtoMessage() {} - -func (x *SCGetPrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[64] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCGetPrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*SCGetPrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{64} -} - -func (x *SCGetPrivateRoomHistory) GetQueryTime() int32 { - if x != nil { - return x.QueryTime - } - return 0 -} - -func (x *SCGetPrivateRoomHistory) GetDatas() []*PrivateRoomHistory { - if x != nil { - return x.Datas - } - return nil -} - -//PACKET_CS_DESTROYPRIVATEROOM -type CSDestroyPrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` -} - -func (x *CSDestroyPrivateRoom) Reset() { - *x = CSDestroyPrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSDestroyPrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSDestroyPrivateRoom) ProtoMessage() {} - -func (x *CSDestroyPrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[65] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSDestroyPrivateRoom.ProtoReflect.Descriptor instead. -func (*CSDestroyPrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{65} -} - -func (x *CSDestroyPrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -//PACKET_SC_DESTROYPRIVATEROOM -type SCDestroyPrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - State int32 `protobuf:"varint,3,opt,name=State,proto3" json:"State,omitempty"` //状态 0:删除中 1:已删除 -} - -func (x *SCDestroyPrivateRoom) Reset() { - *x = SCDestroyPrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCDestroyPrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCDestroyPrivateRoom) ProtoMessage() {} - -func (x *SCDestroyPrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[66] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCDestroyPrivateRoom.ProtoReflect.Descriptor instead. -func (*SCDestroyPrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{66} -} - -func (x *SCDestroyPrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCDestroyPrivateRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCDestroyPrivateRoom) GetState() int32 { - if x != nil { - return x.State - } - return 0 -} - -//PACKET_CS_QUERYROOMINFO -type CSQueryRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` - GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 - Id []int32 `protobuf:"varint,3,rep,packed,name=Id,proto3" json:"Id,omitempty"` //gamefreeid - SceneMode int32 `protobuf:"varint,4,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 0公共房 2私人房 -} - -func (x *CSQueryRoomInfo) Reset() { - *x = CSQueryRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSQueryRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSQueryRoomInfo) ProtoMessage() {} - -func (x *CSQueryRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[67] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSQueryRoomInfo.ProtoReflect.Descriptor instead. -func (*CSQueryRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{67} -} - -func (x *CSQueryRoomInfo) GetGameIds() []int32 { - if x != nil { - return x.GameIds - } - return nil -} - -func (x *CSQueryRoomInfo) GetGameSite() int32 { - if x != nil { - return x.GameSite - } - return 0 -} - -func (x *CSQueryRoomInfo) GetId() []int32 { - if x != nil { - return x.Id - } - return nil -} - -func (x *CSQueryRoomInfo) GetSceneMode() int32 { - if x != nil { - return x.SceneMode - } - return 0 -} - -//个人创建的房间信息 -type QRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - BaseCoin int64 `protobuf:"varint,4,opt,name=BaseCoin,proto3" json:"BaseCoin,omitempty"` - LimitCoin int64 `protobuf:"varint,5,opt,name=LimitCoin,proto3" json:"LimitCoin,omitempty"` - CurrNum int32 `protobuf:"varint,6,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 - MaxPlayer int32 `protobuf:"varint,7,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 - Creator int32 `protobuf:"varint,8,opt,name=Creator,proto3" json:"Creator,omitempty"` - CreateTs int32 `protobuf:"varint,9,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 - Params []int32 `protobuf:"varint,10,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 建房参数 -} - -func (x *QRoomInfo) Reset() { - *x = QRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QRoomInfo) ProtoMessage() {} - -func (x *QRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use QRoomInfo.ProtoReflect.Descriptor instead. -func (*QRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{68} -} - -func (x *QRoomInfo) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *QRoomInfo) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *QRoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *QRoomInfo) GetBaseCoin() int64 { - if x != nil { - return x.BaseCoin - } - return 0 -} - -func (x *QRoomInfo) GetLimitCoin() int64 { - if x != nil { - return x.LimitCoin - } - return 0 -} - -func (x *QRoomInfo) GetCurrNum() int32 { - if x != nil { - return x.CurrNum - } - return 0 -} - -func (x *QRoomInfo) GetMaxPlayer() int32 { - if x != nil { - return x.MaxPlayer - } - return 0 -} - -func (x *QRoomInfo) GetCreator() int32 { - if x != nil { - return x.Creator - } - return 0 -} - -func (x *QRoomInfo) GetCreateTs() int32 { - if x != nil { - return x.CreateTs - } - return 0 -} - -func (x *QRoomInfo) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -//PACKET_SC_QUERYROOMINFO -type SCQueryRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` - GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 - RoomInfo []*QRoomInfo `protobuf:"bytes,3,rep,name=RoomInfo,proto3" json:"RoomInfo,omitempty"` //房间列表 - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCQueryRoomInfo) Reset() { - *x = SCQueryRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCQueryRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCQueryRoomInfo) ProtoMessage() {} - -func (x *SCQueryRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[69] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCQueryRoomInfo.ProtoReflect.Descriptor instead. -func (*SCQueryRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{69} -} - -func (x *SCQueryRoomInfo) GetGameIds() []int32 { - if x != nil { - return x.GameIds - } - return nil -} - -func (x *SCQueryRoomInfo) GetGameSite() int32 { - if x != nil { - return x.GameSite - } - return 0 -} - -func (x *SCQueryRoomInfo) GetRoomInfo() []*QRoomInfo { - if x != nil { - return x.RoomInfo - } - return nil -} - -func (x *SCQueryRoomInfo) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//注册观察者,用于推送游戏的状态信息 -//PACKET_CS_GAMEOBSERVE -type CSGameObserve struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID - StartOrEnd bool `protobuf:"varint,2,opt,name=StartOrEnd,proto3" json:"StartOrEnd,omitempty"` //打开或者关闭 -} - -func (x *CSGameObserve) Reset() { - *x = CSGameObserve{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGameObserve) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGameObserve) ProtoMessage() {} - -func (x *CSGameObserve) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[70] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSGameObserve.ProtoReflect.Descriptor instead. -func (*CSGameObserve) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{70} -} - -func (x *CSGameObserve) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *CSGameObserve) GetStartOrEnd() bool { - if x != nil { - return x.StartOrEnd - } - return false -} - -//PACKET_SC_GAMESUBLIST -type GameSubRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - LogCnt int32 `protobuf:"varint,2,opt,name=LogCnt,proto3" json:"LogCnt,omitempty"` - NewLog int32 `protobuf:"varint,3,opt,name=NewLog,proto3" json:"NewLog,omitempty"` //新结果 - TotleLog []int32 `protobuf:"varint,4,rep,packed,name=TotleLog,proto3" json:"TotleLog,omitempty"` //最近几局的中奖结果 -} - -func (x *GameSubRecord) Reset() { - *x = GameSubRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GameSubRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GameSubRecord) ProtoMessage() {} - -func (x *GameSubRecord) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[71] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GameSubRecord.ProtoReflect.Descriptor instead. -func (*GameSubRecord) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{71} -} - -func (x *GameSubRecord) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *GameSubRecord) GetLogCnt() int32 { - if x != nil { - return x.LogCnt - } - return 0 -} - -func (x *GameSubRecord) GetNewLog() int32 { - if x != nil { - return x.NewLog - } - return 0 -} - -func (x *GameSubRecord) GetTotleLog() []int32 { - if x != nil { - return x.TotleLog - } - return nil -} - -type SCGameSubList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - List []*GameSubRecord `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCGameSubList) Reset() { - *x = SCGameSubList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGameSubList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGameSubList) ProtoMessage() {} - -func (x *SCGameSubList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[72] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCGameSubList.ProtoReflect.Descriptor instead. -func (*SCGameSubList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{72} -} - -func (x *SCGameSubList) GetList() []*GameSubRecord { - if x != nil { - return x.List - } - return nil -} - -//游戏中的状态 -type GameState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` - Sec int32 `protobuf:"varint,3,opt,name=Sec,proto3" json:"Sec,omitempty"` -} - -func (x *GameState) Reset() { - *x = GameState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GameState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GameState) ProtoMessage() {} - -func (x *GameState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[73] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GameState.ProtoReflect.Descriptor instead. -func (*GameState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{73} -} - -func (x *GameState) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *GameState) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *GameState) GetSec() int32 { - if x != nil { - return x.Sec - } - return 0 -} - -type SCGameState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - List []*GameState `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCGameState) Reset() { - *x = SCGameState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[74] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGameState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGameState) ProtoMessage() {} - -func (x *SCGameState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[74] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCGameState.ProtoReflect.Descriptor instead. -func (*SCGameState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{74} -} - -func (x *SCGameState) GetList() []*GameState { - if x != nil { - return x.List - } - return nil -} - -//奖金池数据 -type LotteryData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Value int64 `protobuf:"varint,2,opt,name=Value,proto3" json:"Value,omitempty"` -} - -func (x *LotteryData) Reset() { - *x = LotteryData{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LotteryData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LotteryData) ProtoMessage() {} - -func (x *LotteryData) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[75] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LotteryData.ProtoReflect.Descriptor instead. -func (*LotteryData) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{75} -} - -func (x *LotteryData) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *LotteryData) GetValue() int64 { - if x != nil { - return x.Value - } - return 0 -} - -//奖金池同步 PACKET_SC_LOTTERYSYNC -type SCLotterySync struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Datas []*LotteryData `protobuf:"bytes,1,rep,name=Datas,proto3" json:"Datas,omitempty"` -} - -func (x *SCLotterySync) Reset() { - *x = SCLotterySync{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotterySync) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotterySync) ProtoMessage() {} - -func (x *SCLotterySync) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[76] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLotterySync.ProtoReflect.Descriptor instead. -func (*SCLotterySync) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{76} -} - -func (x *SCLotterySync) GetDatas() []*LotteryData { - if x != nil { - return x.Datas - } - return nil -} - -//PACKET_CS_LOTTERYLOG = 2288; -type CSLotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` -} - -func (x *CSLotteryLog) Reset() { - *x = CSLotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLotteryLog) ProtoMessage() {} - -func (x *CSLotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[77] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CSLotteryLog.ProtoReflect.Descriptor instead. -func (*CSLotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{77} -} - -func (x *CSLotteryLog) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -//奖池中奖记录 -type LotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Time int32 `protobuf:"varint,1,opt,name=Time,proto3" json:"Time,omitempty"` - NickName string `protobuf:"bytes,2,opt,name=NickName,proto3" json:"NickName,omitempty"` - Card []int32 `protobuf:"varint,3,rep,packed,name=Card,proto3" json:"Card,omitempty"` - Kind int32 `protobuf:"varint,4,opt,name=Kind,proto3" json:"Kind,omitempty"` - Coin int32 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` -} - -func (x *LotteryLog) Reset() { - *x = LotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LotteryLog) ProtoMessage() {} - -func (x *LotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[78] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LotteryLog.ProtoReflect.Descriptor instead. -func (*LotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{78} -} - -func (x *LotteryLog) GetTime() int32 { - if x != nil { - return x.Time - } - return 0 -} - -func (x *LotteryLog) GetNickName() string { - if x != nil { - return x.NickName - } - return "" -} - -func (x *LotteryLog) GetCard() []int32 { - if x != nil { - return x.Card - } - return nil -} - -func (x *LotteryLog) GetKind() int32 { - if x != nil { - return x.Kind - } - return 0 -} - -func (x *LotteryLog) GetCoin() int32 { - if x != nil { - return x.Coin - } - return 0 -} - -//PACKET_SC_LOTTERYLOG = 2289; -type SCLotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Logs []*LotteryLog `protobuf:"bytes,2,rep,name=Logs,proto3" json:"Logs,omitempty"` -} - -func (x *SCLotteryLog) Reset() { - *x = SCLotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotteryLog) ProtoMessage() {} - -func (x *SCLotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[79] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLotteryLog.ProtoReflect.Descriptor instead. -func (*SCLotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{79} -} - -func (x *SCLotteryLog) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCLotteryLog) GetLogs() []*LotteryLog { - if x != nil { - return x.Logs - } - return nil -} - -//PACKET_SC_LOTTERYBILL = 2290 -type SCLotteryBill struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` - Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` - Kind int32 `protobuf:"varint,4,opt,name=Kind,proto3" json:"Kind,omitempty"` - Card []int32 `protobuf:"varint,5,rep,packed,name=Card,proto3" json:"Card,omitempty"` - Value int64 `protobuf:"varint,6,opt,name=Value,proto3" json:"Value,omitempty"` -} - -func (x *SCLotteryBill) Reset() { - *x = SCLotteryBill{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotteryBill) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotteryBill) ProtoMessage() {} - -func (x *SCLotteryBill) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[80] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SCLotteryBill.ProtoReflect.Descriptor instead. -func (*SCLotteryBill) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{80} -} - -func (x *SCLotteryBill) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCLotteryBill) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *SCLotteryBill) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SCLotteryBill) GetKind() int32 { - if x != nil { - return x.Kind - } - return 0 -} - -func (x *SCLotteryBill) GetCard() []int32 { - if x != nil { - return x.Card - } - return nil -} - -func (x *SCLotteryBill) GetValue() int64 { - if x != nil { - return x.Value + return x.Reason } return 0 } @@ -5669,7 +1306,7 @@ type GameConfig1 struct { func (x *GameConfig1) Reset() { *x = GameConfig1{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[81] + mi := &file_game_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5682,7 +1319,7 @@ func (x *GameConfig1) String() string { func (*GameConfig1) ProtoMessage() {} func (x *GameConfig1) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[81] + mi := &file_game_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5695,7 +1332,7 @@ func (x *GameConfig1) ProtoReflect() protoreflect.Message { // Deprecated: Use GameConfig1.ProtoReflect.Descriptor instead. func (*GameConfig1) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{81} + return file_game_proto_rawDescGZIP(), []int{10} } func (x *GameConfig1) GetLogicId() int32 { @@ -5803,7 +1440,7 @@ func (x *GameConfig1) GetSceneAdd() int32 { return 0 } -//PACKET_CS_GETGAMECONFIG = 2231 +//PACKET_CS_GETGAMECONFIG type CSGetGameConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5817,7 +1454,7 @@ type CSGetGameConfig struct { func (x *CSGetGameConfig) Reset() { *x = CSGetGameConfig{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[82] + mi := &file_game_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5830,7 +1467,7 @@ func (x *CSGetGameConfig) String() string { func (*CSGetGameConfig) ProtoMessage() {} func (x *CSGetGameConfig) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[82] + mi := &file_game_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5843,7 +1480,7 @@ func (x *CSGetGameConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use CSGetGameConfig.ProtoReflect.Descriptor instead. func (*CSGetGameConfig) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{82} + return file_game_proto_rawDescGZIP(), []int{11} } func (x *CSGetGameConfig) GetPlatform() string { @@ -5879,7 +1516,7 @@ type ChessRankInfo struct { func (x *ChessRankInfo) Reset() { *x = ChessRankInfo{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[83] + mi := &file_game_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5892,7 +1529,7 @@ func (x *ChessRankInfo) String() string { func (*ChessRankInfo) ProtoMessage() {} func (x *ChessRankInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[83] + mi := &file_game_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5905,7 +1542,7 @@ func (x *ChessRankInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ChessRankInfo.ProtoReflect.Descriptor instead. func (*ChessRankInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{83} + return file_game_proto_rawDescGZIP(), []int{12} } func (x *ChessRankInfo) GetScore() int32 { @@ -5922,7 +1559,7 @@ func (x *ChessRankInfo) GetName() string { return "" } -//PACKET_SC_GETGAMECONFIG = 2232 +//PACKET_SC_GETGAMECONFIG type SCGetGameConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5936,7 +1573,7 @@ type SCGetGameConfig struct { func (x *SCGetGameConfig) Reset() { *x = SCGetGameConfig{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[84] + mi := &file_game_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5949,7 +1586,7 @@ func (x *SCGetGameConfig) String() string { func (*SCGetGameConfig) ProtoMessage() {} func (x *SCGetGameConfig) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[84] + mi := &file_game_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5962,7 +1599,7 @@ func (x *SCGetGameConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SCGetGameConfig.ProtoReflect.Descriptor instead. func (*SCGetGameConfig) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{84} + return file_game_proto_rawDescGZIP(), []int{13} } func (x *SCGetGameConfig) GetGameCfg() []*GameConfig1 { @@ -5998,7 +1635,7 @@ type SCChangeGameStatus struct { func (x *SCChangeGameStatus) Reset() { *x = SCChangeGameStatus{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[85] + mi := &file_game_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6011,7 +1648,7 @@ func (x *SCChangeGameStatus) String() string { func (*SCChangeGameStatus) ProtoMessage() {} func (x *SCChangeGameStatus) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[85] + mi := &file_game_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6024,7 +1661,7 @@ func (x *SCChangeGameStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use SCChangeGameStatus.ProtoReflect.Descriptor instead. func (*SCChangeGameStatus) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{85} + return file_game_proto_rawDescGZIP(), []int{14} } func (x *SCChangeGameStatus) GetGameCfg() []*GameConfig1 { @@ -6047,7 +1684,7 @@ type SCChangeEntrySwitch struct { func (x *SCChangeEntrySwitch) Reset() { *x = SCChangeEntrySwitch{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[86] + mi := &file_game_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6060,7 +1697,7 @@ func (x *SCChangeEntrySwitch) String() string { func (*SCChangeEntrySwitch) ProtoMessage() {} func (x *SCChangeEntrySwitch) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[86] + mi := &file_game_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6073,7 +1710,7 @@ func (x *SCChangeEntrySwitch) ProtoReflect() protoreflect.Message { // Deprecated: Use SCChangeEntrySwitch.ProtoReflect.Descriptor instead. func (*SCChangeEntrySwitch) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{86} + return file_game_proto_rawDescGZIP(), []int{15} } func (x *SCChangeEntrySwitch) GetIndex() int32 { @@ -6090,36 +1727,40 @@ func (x *SCChangeEntrySwitch) GetSwitch() []bool { return nil } -//PACKET_CS_ENTERGAME -type CSEnterGame struct { +//创建竞技馆私人房间 +//PACKET_CS_CREATEPRIVATEROOM +type CSCreatePrivateRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id - OpParams []int32 `protobuf:"varint,2,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` - Platform string `protobuf:"bytes,3,opt,name=Platform,proto3" json:"Platform,omitempty"` - ApkVer int32 `protobuf:"varint,4,opt,name=ApkVer,proto3" json:"ApkVer,omitempty"` - ResVer int32 `protobuf:"varint,5,opt,name=ResVer,proto3" json:"ResVer,omitempty"` + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,2,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,3,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + Round int32 `protobuf:"varint,4,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + PlayerNum int32 `protobuf:"varint,5,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 + NeedPassword int32 `protobuf:"varint,6,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,7,opt,name=CostType,proto3" json:"CostType,omitempty"` // 房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,8,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 } -func (x *CSEnterGame) Reset() { - *x = CSEnterGame{} +func (x *CSCreatePrivateRoom) Reset() { + *x = CSCreatePrivateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[87] + mi := &file_game_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSEnterGame) String() string { +func (x *CSCreatePrivateRoom) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSEnterGame) ProtoMessage() {} +func (*CSCreatePrivateRoom) ProtoMessage() {} -func (x *CSEnterGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[87] +func (x *CSCreatePrivateRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6130,78 +1771,103 @@ func (x *CSEnterGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSEnterGame.ProtoReflect.Descriptor instead. -func (*CSEnterGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{87} +// Deprecated: Use CSCreatePrivateRoom.ProtoReflect.Descriptor instead. +func (*CSCreatePrivateRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{16} } -func (x *CSEnterGame) GetId() int32 { +func (x *CSCreatePrivateRoom) GetGameFreeId() int32 { if x != nil { - return x.Id + return x.GameFreeId } return 0 } -func (x *CSEnterGame) GetOpParams() []int32 { +func (x *CSCreatePrivateRoom) GetRoomTypeId() int32 { if x != nil { - return x.OpParams - } - return nil -} - -func (x *CSEnterGame) GetPlatform() string { - if x != nil { - return x.Platform - } - return "" -} - -func (x *CSEnterGame) GetApkVer() int32 { - if x != nil { - return x.ApkVer + return x.RoomTypeId } return 0 } -func (x *CSEnterGame) GetResVer() int32 { +func (x *CSCreatePrivateRoom) GetRoomConfigId() int32 { if x != nil { - return x.ResVer + return x.RoomConfigId } return 0 } -//PACKET_SC_ENTERGAME -type SCEnterGame struct { +func (x *CSCreatePrivateRoom) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetPlayerNum() int32 { + if x != nil { + return x.PlayerNum + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +//PACKET_SC_CREATEPRIVATEROOM +type SCCreatePrivateRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // - OpParams []int32 `protobuf:"varint,3,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` - MinApkVer int32 `protobuf:"varint,4,opt,name=MinApkVer,proto3" json:"MinApkVer,omitempty"` //最低apk版本号 - LatestApkVer int32 `protobuf:"varint,5,opt,name=LatestApkVer,proto3" json:"LatestApkVer,omitempty"` //最新apk版本号 - MinResVer int32 `protobuf:"varint,6,opt,name=MinResVer,proto3" json:"MinResVer,omitempty"` //最低资源版本号 - LatestResVer int32 `protobuf:"varint,7,opt,name=LatestResVer,proto3" json:"LatestResVer,omitempty"` //最新资源版本号 + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + GameFreeId int32 `protobuf:"varint,2,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,3,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,4,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + Round int32 `protobuf:"varint,5,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + PlayerNum int32 `protobuf:"varint,6,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 + NeedPassword int32 `protobuf:"varint,7,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,8,opt,name=CostType,proto3" json:"CostType,omitempty"` //房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,9,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 + RoomId int32 `protobuf:"varint,10,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间id + Password string `protobuf:"bytes,11,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } -func (x *SCEnterGame) Reset() { - *x = SCEnterGame{} +func (x *SCCreatePrivateRoom) Reset() { + *x = SCCreatePrivateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[88] + mi := &file_game_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCEnterGame) String() string { +func (x *SCCreatePrivateRoom) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCEnterGame) ProtoMessage() {} +func (*SCCreatePrivateRoom) ProtoMessage() {} -func (x *SCEnterGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[88] +func (x *SCCreatePrivateRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6212,87 +1878,394 @@ func (x *SCEnterGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCEnterGame.ProtoReflect.Descriptor instead. -func (*SCEnterGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{88} +// Deprecated: Use SCCreatePrivateRoom.ProtoReflect.Descriptor instead. +func (*SCCreatePrivateRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{17} } -func (x *SCEnterGame) GetOpCode() OpResultCode_Game { +func (x *SCCreatePrivateRoom) GetOpRetCode() OpResultCode_Game { if x != nil { - return x.OpCode + return x.OpRetCode } return OpResultCode_Game_OPRC_Sucess_Game } -func (x *SCEnterGame) GetId() int32 { +func (x *SCCreatePrivateRoom) GetGameFreeId() int32 { if x != nil { - return x.Id + return x.GameFreeId } return 0 } -func (x *SCEnterGame) GetOpParams() []int32 { +func (x *SCCreatePrivateRoom) GetRoomTypeId() int32 { if x != nil { - return x.OpParams + return x.RoomTypeId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetPlayerNum() int32 { + if x != nil { + return x.PlayerNum + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +//PACKET_CS_GETPRIVATEROOMLIST +type CSGetPrivateRoomList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomConfigId int32 `protobuf:"varint,1,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + GameFreeId int32 `protobuf:"varint,2,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id + RoomTypeId int32 `protobuf:"varint,4,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` // 玩法类型id +} + +func (x *CSGetPrivateRoomList) Reset() { + *x = CSGetPrivateRoomList{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSGetPrivateRoomList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSGetPrivateRoomList) ProtoMessage() {} + +func (x *CSGetPrivateRoomList) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSGetPrivateRoomList.ProtoReflect.Descriptor instead. +func (*CSGetPrivateRoomList) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{18} +} + +func (x *CSGetPrivateRoomList) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetGameFreeId() int32 { + if x != nil { + return x.GameFreeId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +type PrivatePlayerInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 玩家昵称 + UseRoleId int32 `protobuf:"varint,3,opt,name=UseRoleId,proto3" json:"UseRoleId,omitempty"` //使用的人物模型id +} + +func (x *PrivatePlayerInfo) Reset() { + *x = PrivatePlayerInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivatePlayerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivatePlayerInfo) ProtoMessage() {} + +func (x *PrivatePlayerInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivatePlayerInfo.ProtoReflect.Descriptor instead. +func (*PrivatePlayerInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{19} +} + +func (x *PrivatePlayerInfo) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *PrivatePlayerInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PrivatePlayerInfo) GetUseRoleId() int32 { + if x != nil { + return x.UseRoleId + } + return 0 +} + +//个人创建的房间信息 +type PrivateRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //场次id + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,3,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //玩法类型id + RoomConfigId int32 `protobuf:"varint,4,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + RoomId int32 `protobuf:"varint,5,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间号 + NeedPassword int32 `protobuf:"varint,6,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1是 + CurrRound int32 `protobuf:"varint,7,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前第几轮 + MaxRound int32 `protobuf:"varint,8,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最大轮数 + CurrNum int32 `protobuf:"varint,9,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 + MaxPlayer int32 `protobuf:"varint,10,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 + CreateTs int64 `protobuf:"varint,11,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 + State int32 `protobuf:"varint,12,opt,name=State,proto3" json:"State,omitempty"` //房间状态 0等待中 1进行中 2已结束 + Players []*PrivatePlayerInfo `protobuf:"bytes,13,rep,name=Players,proto3" json:"Players,omitempty"` //玩家列表 +} + +func (x *PrivateRoomInfo) Reset() { + *x = PrivateRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivateRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivateRoomInfo) ProtoMessage() {} + +func (x *PrivateRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivateRoomInfo.ProtoReflect.Descriptor instead. +func (*PrivateRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{20} +} + +func (x *PrivateRoomInfo) GetGameFreeId() int32 { + if x != nil { + return x.GameFreeId + } + return 0 +} + +func (x *PrivateRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *PrivateRoomInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *PrivateRoomInfo) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *PrivateRoomInfo) GetMaxRound() int32 { + if x != nil { + return x.MaxRound + } + return 0 +} + +func (x *PrivateRoomInfo) GetCurrNum() int32 { + if x != nil { + return x.CurrNum + } + return 0 +} + +func (x *PrivateRoomInfo) GetMaxPlayer() int32 { + if x != nil { + return x.MaxPlayer + } + return 0 +} + +func (x *PrivateRoomInfo) GetCreateTs() int64 { + if x != nil { + return x.CreateTs + } + return 0 +} + +func (x *PrivateRoomInfo) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *PrivateRoomInfo) GetPlayers() []*PrivatePlayerInfo { + if x != nil { + return x.Players } return nil } -func (x *SCEnterGame) GetMinApkVer() int32 { - if x != nil { - return x.MinApkVer - } - return 0 -} - -func (x *SCEnterGame) GetLatestApkVer() int32 { - if x != nil { - return x.LatestApkVer - } - return 0 -} - -func (x *SCEnterGame) GetMinResVer() int32 { - if x != nil { - return x.MinResVer - } - return 0 -} - -func (x *SCEnterGame) GetLatestResVer() int32 { - if x != nil { - return x.LatestResVer - } - return 0 -} - -//PACKET_CS_QUITGAME -type CSQuitGame struct { +//PACKET_SC_GETPRIVATEROOMLIST +type SCGetPrivateRoomList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id - IsAudience bool `protobuf:"varint,2,opt,name=IsAudience,proto3" json:"IsAudience,omitempty"` //是否是观众 + Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 0所有配置 1更新 2新增 3删除 + Datas []*PrivateRoomInfo `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` //房间列表 } -func (x *CSQuitGame) Reset() { - *x = CSQuitGame{} +func (x *SCGetPrivateRoomList) Reset() { + *x = SCGetPrivateRoomList{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[89] + mi := &file_game_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSQuitGame) String() string { +func (x *SCGetPrivateRoomList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSQuitGame) ProtoMessage() {} +func (*SCGetPrivateRoomList) ProtoMessage() {} -func (x *CSQuitGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[89] +func (x *SCGetPrivateRoomList) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6303,53 +2276,132 @@ func (x *CSQuitGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSQuitGame.ProtoReflect.Descriptor instead. -func (*CSQuitGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{89} +// Deprecated: Use SCGetPrivateRoomList.ProtoReflect.Descriptor instead. +func (*SCGetPrivateRoomList) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{21} } -func (x *CSQuitGame) GetId() int32 { +func (x *SCGetPrivateRoomList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +func (x *SCGetPrivateRoomList) GetDatas() []*PrivateRoomInfo { + if x != nil { + return x.Datas + } + return nil +} + +//PACKET_CS_QUERYROOMINFO +type CSQueryRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` + GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 + Id []int32 `protobuf:"varint,3,rep,packed,name=Id,proto3" json:"Id,omitempty"` //gamefreeid + SceneMode int32 `protobuf:"varint,4,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 0公共房 2私人房 +} + +func (x *CSQueryRoomInfo) Reset() { + *x = CSQueryRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSQueryRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSQueryRoomInfo) ProtoMessage() {} + +func (x *CSQueryRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSQueryRoomInfo.ProtoReflect.Descriptor instead. +func (*CSQueryRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{22} +} + +func (x *CSQueryRoomInfo) GetGameIds() []int32 { + if x != nil { + return x.GameIds + } + return nil +} + +func (x *CSQueryRoomInfo) GetGameSite() int32 { + if x != nil { + return x.GameSite + } + return 0 +} + +func (x *CSQueryRoomInfo) GetId() []int32 { if x != nil { return x.Id } + return nil +} + +func (x *CSQueryRoomInfo) GetSceneMode() int32 { + if x != nil { + return x.SceneMode + } return 0 } -func (x *CSQuitGame) GetIsAudience() bool { - if x != nil { - return x.IsAudience - } - return false -} - -//PACKET_SC_QUITGAME -type SCQuitGame struct { +//自由桌房间信息 +type QRoomInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` - Reason int32 `protobuf:"varint,3,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + BaseCoin int64 `protobuf:"varint,4,opt,name=BaseCoin,proto3" json:"BaseCoin,omitempty"` + LimitCoin int64 `protobuf:"varint,5,opt,name=LimitCoin,proto3" json:"LimitCoin,omitempty"` + CurrNum int32 `protobuf:"varint,6,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 + MaxPlayer int32 `protobuf:"varint,7,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 + Creator int32 `protobuf:"varint,8,opt,name=Creator,proto3" json:"Creator,omitempty"` + CreateTs int32 `protobuf:"varint,9,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 + Params []int32 `protobuf:"varint,10,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 建房参数 } -func (x *SCQuitGame) Reset() { - *x = SCQuitGame{} +func (x *QRoomInfo) Reset() { + *x = QRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[90] + mi := &file_game_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCQuitGame) String() string { +func (x *QRoomInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCQuitGame) ProtoMessage() {} +func (*QRoomInfo) ProtoMessage() {} -func (x *SCQuitGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[90] +func (x *QRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6360,60 +2412,180 @@ func (x *SCQuitGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCQuitGame.ProtoReflect.Descriptor instead. -func (*SCQuitGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{90} +// Deprecated: Use QRoomInfo.ProtoReflect.Descriptor instead. +func (*QRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{23} } -func (x *SCQuitGame) GetOpCode() OpResultCode_Game { +func (x *QRoomInfo) GetGameFreeId() int32 { if x != nil { - return x.OpCode + return x.GameFreeId + } + return 0 +} + +func (x *QRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *QRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *QRoomInfo) GetBaseCoin() int64 { + if x != nil { + return x.BaseCoin + } + return 0 +} + +func (x *QRoomInfo) GetLimitCoin() int64 { + if x != nil { + return x.LimitCoin + } + return 0 +} + +func (x *QRoomInfo) GetCurrNum() int32 { + if x != nil { + return x.CurrNum + } + return 0 +} + +func (x *QRoomInfo) GetMaxPlayer() int32 { + if x != nil { + return x.MaxPlayer + } + return 0 +} + +func (x *QRoomInfo) GetCreator() int32 { + if x != nil { + return x.Creator + } + return 0 +} + +func (x *QRoomInfo) GetCreateTs() int32 { + if x != nil { + return x.CreateTs + } + return 0 +} + +func (x *QRoomInfo) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +//PACKET_SC_QUERYROOMINFO +type SCQueryRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` + GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 + RoomInfo []*QRoomInfo `protobuf:"bytes,3,rep,name=RoomInfo,proto3" json:"RoomInfo,omitempty"` //房间列表 + OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +} + +func (x *SCQueryRoomInfo) Reset() { + *x = SCQueryRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCQueryRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCQueryRoomInfo) ProtoMessage() {} + +func (x *SCQueryRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCQueryRoomInfo.ProtoReflect.Descriptor instead. +func (*SCQueryRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{24} +} + +func (x *SCQueryRoomInfo) GetGameIds() []int32 { + if x != nil { + return x.GameIds + } + return nil +} + +func (x *SCQueryRoomInfo) GetGameSite() int32 { + if x != nil { + return x.GameSite + } + return 0 +} + +func (x *SCQueryRoomInfo) GetRoomInfo() []*QRoomInfo { + if x != nil { + return x.RoomInfo + } + return nil +} + +func (x *SCQueryRoomInfo) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode } return OpResultCode_Game_OPRC_Sucess_Game } -func (x *SCQuitGame) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SCQuitGame) GetReason() int32 { - if x != nil { - return x.Reason - } - return 0 -} - -//PACKET_CS_UPLOADLOC -type CSUploadLoc struct { +type GameState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Longitude int32 `protobuf:"varint,1,opt,name=Longitude,proto3" json:"Longitude,omitempty"` //经度 - Latitude int32 `protobuf:"varint,2,opt,name=Latitude,proto3" json:"Latitude,omitempty"` //纬度 - City string `protobuf:"bytes,3,opt,name=City,proto3" json:"City,omitempty"` //城市 例:中国-河南省-郑州市 + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` + Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` + Sec int32 `protobuf:"varint,3,opt,name=Sec,proto3" json:"Sec,omitempty"` } -func (x *CSUploadLoc) Reset() { - *x = CSUploadLoc{} +func (x *GameState) Reset() { + *x = GameState{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[91] + mi := &file_game_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSUploadLoc) String() string { +func (x *GameState) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSUploadLoc) ProtoMessage() {} +func (*GameState) ProtoMessage() {} -func (x *CSUploadLoc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[91] +func (x *GameState) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6424,61 +2596,58 @@ func (x *CSUploadLoc) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSUploadLoc.ProtoReflect.Descriptor instead. -func (*CSUploadLoc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{91} +// Deprecated: Use GameState.ProtoReflect.Descriptor instead. +func (*GameState) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{25} } -func (x *CSUploadLoc) GetLongitude() int32 { +func (x *GameState) GetGameFreeId() int32 { if x != nil { - return x.Longitude + return x.GameFreeId } return 0 } -func (x *CSUploadLoc) GetLatitude() int32 { +func (x *GameState) GetTs() int64 { if x != nil { - return x.Latitude + return x.Ts } return 0 } -func (x *CSUploadLoc) GetCity() string { +func (x *GameState) GetSec() int32 { if x != nil { - return x.City + return x.Sec } - return "" + return 0 } -//PACKET_SC_UPLOADLOC -type SCUploadLoc struct { +//PACKET_SC_GAMESTATE +type SCGameState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` - Longitude int32 `protobuf:"varint,2,opt,name=Longitude,proto3" json:"Longitude,omitempty"` //经度 - Latitude int32 `protobuf:"varint,3,opt,name=Latitude,proto3" json:"Latitude,omitempty"` //纬度 - City string `protobuf:"bytes,4,opt,name=City,proto3" json:"City,omitempty"` //城市 例:中国-河南省-郑州市 + List []*GameState `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` } -func (x *SCUploadLoc) Reset() { - *x = SCUploadLoc{} +func (x *SCGameState) Reset() { + *x = SCGameState{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[92] + mi := &file_game_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCUploadLoc) String() string { +func (x *SCGameState) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCUploadLoc) ProtoMessage() {} +func (*SCGameState) ProtoMessage() {} -func (x *SCUploadLoc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[92] +func (x *SCGameState) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6489,37 +2658,16 @@ func (x *SCUploadLoc) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCUploadLoc.ProtoReflect.Descriptor instead. -func (*SCUploadLoc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{92} +// Deprecated: Use SCGameState.ProtoReflect.Descriptor instead. +func (*SCGameState) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{26} } -func (x *SCUploadLoc) GetPos() int32 { +func (x *SCGameState) GetList() []*GameState { if x != nil { - return x.Pos + return x.List } - return 0 -} - -func (x *SCUploadLoc) GetLongitude() int32 { - if x != nil { - return x.Longitude - } - return 0 -} - -func (x *SCUploadLoc) GetLatitude() int32 { - if x != nil { - return x.Latitude - } - return 0 -} - -func (x *SCUploadLoc) GetCity() string { - if x != nil { - return x.City - } - return "" + return nil } //PACKET_CS_AUDIENCESIT @@ -6534,7 +2682,7 @@ type CSAudienceSit struct { func (x *CSAudienceSit) Reset() { *x = CSAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[93] + mi := &file_game_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6547,7 +2695,7 @@ func (x *CSAudienceSit) String() string { func (*CSAudienceSit) ProtoMessage() {} func (x *CSAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[93] + mi := &file_game_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6560,7 +2708,7 @@ func (x *CSAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use CSAudienceSit.ProtoReflect.Descriptor instead. func (*CSAudienceSit) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{93} + return file_game_proto_rawDescGZIP(), []int{27} } func (x *CSAudienceSit) GetRoomId() int32 { @@ -6583,7 +2731,7 @@ type SCAudienceSit struct { func (x *SCAudienceSit) Reset() { *x = SCAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[94] + mi := &file_game_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6596,7 +2744,7 @@ func (x *SCAudienceSit) String() string { func (*SCAudienceSit) ProtoMessage() {} func (x *SCAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[94] + mi := &file_game_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6609,7 +2757,7 @@ func (x *SCAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use SCAudienceSit.ProtoReflect.Descriptor instead. func (*SCAudienceSit) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{94} + return file_game_proto_rawDescGZIP(), []int{28} } func (x *SCAudienceSit) GetRoomId() int32 { @@ -6641,7 +2789,7 @@ type CSRecordAndNotice struct { func (x *CSRecordAndNotice) Reset() { *x = CSRecordAndNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[95] + mi := &file_game_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6654,7 +2802,7 @@ func (x *CSRecordAndNotice) String() string { func (*CSRecordAndNotice) ProtoMessage() {} func (x *CSRecordAndNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[95] + mi := &file_game_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6667,7 +2815,7 @@ func (x *CSRecordAndNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use CSRecordAndNotice.ProtoReflect.Descriptor instead. func (*CSRecordAndNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{95} + return file_game_proto_rawDescGZIP(), []int{29} } func (x *CSRecordAndNotice) GetPageNo() int32 { @@ -6723,7 +2871,7 @@ type CommonNotice struct { func (x *CommonNotice) Reset() { *x = CommonNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[96] + mi := &file_game_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6736,7 +2884,7 @@ func (x *CommonNotice) String() string { func (*CommonNotice) ProtoMessage() {} func (x *CommonNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[96] + mi := &file_game_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6749,7 +2897,7 @@ func (x *CommonNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use CommonNotice.ProtoReflect.Descriptor instead. func (*CommonNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{96} + return file_game_proto_rawDescGZIP(), []int{30} } func (x *CommonNotice) GetSort() int32 { @@ -6873,7 +3021,7 @@ type PlayerRecord struct { func (x *PlayerRecord) Reset() { *x = PlayerRecord{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[97] + mi := &file_game_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6886,7 +3034,7 @@ func (x *PlayerRecord) String() string { func (*PlayerRecord) ProtoMessage() {} func (x *PlayerRecord) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[97] + mi := &file_game_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6899,7 +3047,7 @@ func (x *PlayerRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerRecord.ProtoReflect.Descriptor instead. func (*PlayerRecord) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{97} + return file_game_proto_rawDescGZIP(), []int{31} } func (x *PlayerRecord) GetGameFreeid() int32 { @@ -6959,7 +3107,7 @@ type SCRecordAndNotice struct { func (x *SCRecordAndNotice) Reset() { *x = SCRecordAndNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[98] + mi := &file_game_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6972,7 +3120,7 @@ func (x *SCRecordAndNotice) String() string { func (*SCRecordAndNotice) ProtoMessage() {} func (x *SCRecordAndNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[98] + mi := &file_game_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6985,7 +3133,7 @@ func (x *SCRecordAndNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use SCRecordAndNotice.ProtoReflect.Descriptor instead. func (*SCRecordAndNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{98} + return file_game_proto_rawDescGZIP(), []int{32} } func (x *SCRecordAndNotice) GetOpCode() OpResultCode_Game { @@ -7026,7 +3174,7 @@ type SCNoticeChange struct { func (x *SCNoticeChange) Reset() { *x = SCNoticeChange{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[99] + mi := &file_game_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7039,7 +3187,7 @@ func (x *SCNoticeChange) String() string { func (*SCNoticeChange) ProtoMessage() {} func (x *SCNoticeChange) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[99] + mi := &file_game_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7052,7 +3200,376 @@ func (x *SCNoticeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use SCNoticeChange.ProtoReflect.Descriptor instead. func (*SCNoticeChange) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{99} + return file_game_proto_rawDescGZIP(), []int{33} +} + +//PACKET_CS_DESTROYROOM +type CSDestroyRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSDestroyRoom) Reset() { + *x = CSDestroyRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSDestroyRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSDestroyRoom) ProtoMessage() {} + +func (x *CSDestroyRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSDestroyRoom.ProtoReflect.Descriptor instead. +func (*CSDestroyRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{34} +} + +//PACKET_SC_DESTROYROOM +type SCDestroyRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + IsForce int32 `protobuf:"varint,3,opt,name=IsForce,proto3" json:"IsForce,omitempty"` //是否强制销毁 +} + +func (x *SCDestroyRoom) Reset() { + *x = SCDestroyRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCDestroyRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCDestroyRoom) ProtoMessage() {} + +func (x *SCDestroyRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCDestroyRoom.ProtoReflect.Descriptor instead. +func (*SCDestroyRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{35} +} + +func (x *SCDestroyRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCDestroyRoom) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +func (x *SCDestroyRoom) GetIsForce() int32 { + if x != nil { + return x.IsForce + } + return 0 +} + +//PACKET_CS_LEAVEROOM +//PACKET_CS_AUDIENCE_LEAVEROOM +//玩家离开房间,返回大厅 +type CSLeaveRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mode int32 `protobuf:"varint,1,opt,name=Mode,proto3" json:"Mode,omitempty"` //离开方式 0:退出 1:暂离(占着座位,返回大厅) +} + +func (x *CSLeaveRoom) Reset() { + *x = CSLeaveRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSLeaveRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSLeaveRoom) ProtoMessage() {} + +func (x *CSLeaveRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSLeaveRoom.ProtoReflect.Descriptor instead. +func (*CSLeaveRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{36} +} + +func (x *CSLeaveRoom) GetMode() int32 { + if x != nil { + return x.Mode + } + return 0 +} + +//PACKET_SC_LEAVEROOM +type SCLeaveRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + Reason int32 `protobuf:"varint,2,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 0:主动退出 1:被踢出 + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间ID + Mode int32 `protobuf:"varint,4,opt,name=Mode,proto3" json:"Mode,omitempty"` +} + +func (x *SCLeaveRoom) Reset() { + *x = SCLeaveRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCLeaveRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCLeaveRoom) ProtoMessage() {} + +func (x *SCLeaveRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCLeaveRoom.ProtoReflect.Descriptor instead. +func (*SCLeaveRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{37} +} + +func (x *SCLeaveRoom) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +func (x *SCLeaveRoom) GetReason() int32 { + if x != nil { + return x.Reason + } + return 0 +} + +func (x *SCLeaveRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCLeaveRoom) GetMode() int32 { + if x != nil { + return x.Mode + } + return 0 +} + +//PACKET_CS_FORCESTART +type CSForceStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSForceStart) Reset() { + *x = CSForceStart{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSForceStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSForceStart) ProtoMessage() {} + +func (x *CSForceStart) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSForceStart.ProtoReflect.Descriptor instead. +func (*CSForceStart) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{38} +} + +//PACKET_SC_FORCESTART +type SCForceStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +} + +func (x *SCForceStart) Reset() { + *x = SCForceStart{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCForceStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCForceStart) ProtoMessage() {} + +func (x *SCForceStart) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCForceStart.ProtoReflect.Descriptor instead. +func (*SCForceStart) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{39} +} + +func (x *SCForceStart) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +//玩家设置标记 +//PACKET_CS_PLAYER_SWITCHFLAG +type CSPlayerSwithFlag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Flag int32 `protobuf:"varint,1,opt,name=Flag,proto3" json:"Flag,omitempty"` + Mark int32 `protobuf:"varint,2,opt,name=Mark,proto3" json:"Mark,omitempty"` //1:设置 0:取消 +} + +func (x *CSPlayerSwithFlag) Reset() { + *x = CSPlayerSwithFlag{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSPlayerSwithFlag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSPlayerSwithFlag) ProtoMessage() {} + +func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSPlayerSwithFlag.ProtoReflect.Descriptor instead. +func (*CSPlayerSwithFlag) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{40} +} + +func (x *CSPlayerSwithFlag) GetFlag() int32 { + if x != nil { + return x.Flag + } + return 0 +} + +func (x *CSPlayerSwithFlag) GetMark() int32 { + if x != nil { + return x.Mark + } + return 0 } // PACKET_CSRoomEvent @@ -7069,7 +3586,7 @@ type CSRoomEvent struct { func (x *CSRoomEvent) Reset() { *x = CSRoomEvent{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[100] + mi := &file_game_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7082,7 +3599,7 @@ func (x *CSRoomEvent) String() string { func (*CSRoomEvent) ProtoMessage() {} func (x *CSRoomEvent) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[100] + mi := &file_game_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7095,7 +3612,7 @@ func (x *CSRoomEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use CSRoomEvent.ProtoReflect.Descriptor instead. func (*CSRoomEvent) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{100} + return file_game_proto_rawDescGZIP(), []int{41} } func (x *CSRoomEvent) GetTp() int32 { @@ -7135,7 +3652,7 @@ type SCRoomEvent struct { func (x *SCRoomEvent) Reset() { *x = SCRoomEvent{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[101] + mi := &file_game_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7148,7 +3665,7 @@ func (x *SCRoomEvent) String() string { func (*SCRoomEvent) ProtoMessage() {} func (x *SCRoomEvent) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[101] + mi := &file_game_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7161,7 +3678,7 @@ func (x *SCRoomEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use SCRoomEvent.ProtoReflect.Descriptor instead. func (*SCRoomEvent) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{101} + return file_game_proto_rawDescGZIP(), []int{42} } func (x *SCRoomEvent) GetOpCode() OpResultCode_Game { @@ -7206,555 +3723,562 @@ func (x *SCRoomEvent) GetTs() int64 { return 0 } +type ItemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // id + Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 数量 +} + +func (x *ItemInfo) Reset() { + *x = ItemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemInfo) ProtoMessage() {} + +func (x *ItemInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItemInfo.ProtoReflect.Descriptor instead. +func (*ItemInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{43} +} + +func (x *ItemInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ItemInfo) GetNum() int32 { + if x != nil { + return x.Num + } + return 0 +} + +// PACKET_CSTouchType +// 每10秒发送一次,保持更新 +type CSTouchType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tp DataType `protobuf:"varint,1,opt,name=Tp,proto3,enum=gamehall.DataType" json:"Tp,omitempty"` // 保持更新类型 + // Tp: Params + // 1: 房间配置id + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` +} + +func (x *CSTouchType) Reset() { + *x = CSTouchType{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSTouchType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSTouchType) ProtoMessage() {} + +func (x *CSTouchType) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSTouchType.ProtoReflect.Descriptor instead. +func (*CSTouchType) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{44} +} + +func (x *CSTouchType) GetTp() DataType { + if x != nil { + return x.Tp + } + return DataType_Zero +} + +func (x *CSTouchType) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +type RoomConfigInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置id + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 配置名称 + RoomType int32 `protobuf:"varint,4,opt,name=RoomType,proto3" json:"RoomType,omitempty"` // 房间类型id, RoomTypeInfo.Id + On int32 `protobuf:"varint,5,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,6,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + Cost []*ItemInfo `protobuf:"bytes,7,rep,name=Cost,proto3" json:"Cost,omitempty"` // 进入房间消耗 + Reward []*ItemInfo `protobuf:"bytes,8,rep,name=Reward,proto3" json:"Reward,omitempty"` // 进入房间奖励 + OnChannelName []string `protobuf:"bytes,9,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 + GameFreeId []int32 `protobuf:"varint,10,rep,packed,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + Round []int32 `protobuf:"varint,11,rep,packed,name=Round,proto3" json:"Round,omitempty"` // 局数 + PlayerNum []int32 `protobuf:"varint,12,rep,packed,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 人数 + NeedPassword int32 `protobuf:"varint,13,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` // 是否需要密码 1是 2否 3自定义 + CostType int32 `protobuf:"varint,14,opt,name=CostType,proto3" json:"CostType,omitempty"` // 消耗类型 1AA 2房主 3自定义 + Voice int32 `protobuf:"varint,15,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1是 2否 3自定义 + ImageURI string `protobuf:"bytes,16,opt,name=ImageURI,proto3" json:"ImageURI,omitempty"` // 奖励图片 +} + +func (x *RoomConfigInfo) Reset() { + *x = RoomConfigInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomConfigInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomConfigInfo) ProtoMessage() {} + +func (x *RoomConfigInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoomConfigInfo.ProtoReflect.Descriptor instead. +func (*RoomConfigInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{45} +} + +func (x *RoomConfigInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomConfigInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomConfigInfo) GetRoomType() int32 { + if x != nil { + return x.RoomType + } + return 0 +} + +func (x *RoomConfigInfo) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomConfigInfo) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomConfigInfo) GetCost() []*ItemInfo { + if x != nil { + return x.Cost + } + return nil +} + +func (x *RoomConfigInfo) GetReward() []*ItemInfo { + if x != nil { + return x.Reward + } + return nil +} + +func (x *RoomConfigInfo) GetOnChannelName() []string { + if x != nil { + return x.OnChannelName + } + return nil +} + +func (x *RoomConfigInfo) GetGameFreeId() []int32 { + if x != nil { + return x.GameFreeId + } + return nil +} + +func (x *RoomConfigInfo) GetRound() []int32 { + if x != nil { + return x.Round + } + return nil +} + +func (x *RoomConfigInfo) GetPlayerNum() []int32 { + if x != nil { + return x.PlayerNum + } + return nil +} + +func (x *RoomConfigInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *RoomConfigInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomConfigInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *RoomConfigInfo) GetImageURI() string { + if x != nil { + return x.ImageURI + } + return "" +} + +type RoomTypeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // id + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 类型名称 + On int32 `protobuf:"varint,3,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,4,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + List []*RoomConfigInfo `protobuf:"bytes,5,rep,name=List,proto3" json:"List,omitempty"` // 房间配置列表 +} + +func (x *RoomTypeInfo) Reset() { + *x = RoomTypeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomTypeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomTypeInfo) ProtoMessage() {} + +func (x *RoomTypeInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoomTypeInfo.ProtoReflect.Descriptor instead. +func (*RoomTypeInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{46} +} + +func (x *RoomTypeInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomTypeInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomTypeInfo) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomTypeInfo) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomTypeInfo) GetList() []*RoomConfigInfo { + if x != nil { + return x.List + } + return nil +} + +// PACKET_CSRoomConfig +type CSRoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSRoomConfig) Reset() { + *x = CSRoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSRoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSRoomConfig) ProtoMessage() {} + +func (x *CSRoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSRoomConfig.ProtoReflect.Descriptor instead. +func (*CSRoomConfig) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{47} +} + +// PACKET_SCRoomConfig 竞技馆房间配置 +type SCRoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*RoomTypeInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` +} + +func (x *SCRoomConfig) Reset() { + *x = SCRoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCRoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCRoomConfig) ProtoMessage() {} + +func (x *SCRoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCRoomConfig.ProtoReflect.Descriptor instead. +func (*SCRoomConfig) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{48} +} + +func (x *SCRoomConfig) GetList() []*RoomTypeInfo { + if x != nil { + return x.List + } + return nil +} + var File_game_proto protoreflect.FileDescriptor var file_game_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x22, 0x25, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0x60, 0x0a, - 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, - 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, - 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, + 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x53, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x78, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, - 0x0d, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x22, 0x25, - 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, - 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, - 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, - 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, - 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x56, 0x49, 0x50, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x49, 0x50, - 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x22, 0x28, 0x0a, 0x0e, 0x43, 0x53, 0x48, 0x61, 0x6c, 0x6c, 0x52, 0x6f, - 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0x46, - 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x3f, 0x0a, 0x0d, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x48, - 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0xe4, 0x01, 0x0a, 0x0e, 0x53, 0x43, 0x48, 0x61, - 0x6c, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, - 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x41, 0x64, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x41, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x2e, - 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x5d, - 0x0a, 0x11, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3d, 0x0a, - 0x11, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5d, 0x0a, 0x11, - 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x0c, - 0x43, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, - 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, - 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x53, - 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, - 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x22, 0x7c, 0x0a, 0x0d, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x46, 0x6f, - 0x72, 0x63, 0x65, 0x22, 0x3d, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, - 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, - 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, - 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, - 0x64, 0x22, 0x21, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, - 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, - 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, - 0x6f, 0x64, 0x65, 0x22, 0x72, 0x0a, 0x0c, 0x43, 0x53, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xfd, 0x02, 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, - 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, - 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, - 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x0c, 0x43, 0x53, 0x47, 0x65, 0x74, - 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, - 0x14, 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x52, 0x65, 0x63, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, - 0x43, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x43, - 0x61, 0x72, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x0c, 0x53, 0x43, - 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x04, 0x52, 0x65, - 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x04, 0x52, 0x65, 0x63, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0a, 0x43, - 0x53, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x47, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x53, 0x75, 0x63, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x41, 0x0a, 0x0d, 0x43, - 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x22, 0x3b, - 0x0a, 0x11, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x77, 0x69, 0x74, 0x68, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x22, 0x31, 0x0a, 0x09, 0x43, - 0x53, 0x53, 0x68, 0x6f, 0x70, 0x42, 0x75, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc2, - 0x01, 0x0a, 0x09, 0x53, 0x43, 0x53, 0x68, 0x6f, 0x70, 0x42, 0x75, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, - 0x08, 0x47, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x47, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x69, - 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, - 0x4e, 0x75, 0x6d, 0x22, 0x62, 0x0a, 0x0a, 0x43, 0x53, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x67, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x41, 0x67, 0x72, 0x65, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x43, 0x4a, 0x6f, - 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x63, 0x0a, 0x0d, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x67, - 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x0d, 0x53, 0x43, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x0c, 0x54, 0x68, 0x72, 0x69, 0x64, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x53, 0x43, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x16, - 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x54, 0x6f, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x6f, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x16, 0x53, - 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x32, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, - 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x08, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x10, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, - 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x54, - 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x10, 0x53, - 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x12, - 0x0a, 0x10, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, - 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x10, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x59, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0xfc, 0x01, 0x0a, 0x0b, 0x53, + 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x0e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa4, - 0x01, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x11, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x52, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x53, 0x54, 0x68, - 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x22, 0x69, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x5a, 0x0a, 0x1d, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x43, - 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x53, - 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, - 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xd7, 0x01, - 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, - 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, - 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, - 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x53, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x47, 0x0a, 0x14, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, - 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x37, 0x0a, 0x17, 0x43, 0x53, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0xac, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, - 0x22, 0x6b, 0x0a, 0x17, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x44, 0x61, 0x74, - 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x2e, 0x0a, - 0x14, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x7f, 0x0a, - 0x14, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x39, 0x0a, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x75, - 0x0a, 0x0f, 0x43, 0x53, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x09, 0x51, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2f, 0x0a, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x51, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0c, 0x43, 0x53, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xfd, 0x02, + 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, + 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x43, 0x53, 0x47, - 0x61, 0x6d, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x72, 0x45, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x72, 0x45, - 0x6e, 0x64, 0x22, 0x7b, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, - 0x65, 0x77, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x77, - 0x4c, 0x6f, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x22, - 0x3c, 0x0a, 0x0d, 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, - 0x62, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4d, 0x0a, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x22, 0x36, 0x0a, 0x0b, - 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x43, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3c, 0x0a, 0x0d, 0x53, 0x43, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x2e, 0x0a, 0x0c, 0x43, 0x53, 0x4c, 0x6f, 0x74, - 0x74, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x0a, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x58, 0x0a, 0x0c, 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x6f, - 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0d, - 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, - 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x03, 0x0a, 0x0b, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, + 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, + 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x56, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x22, 0x85, 0x01, + 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, + 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, + 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, + 0x6b, 0x56, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x43, 0x53, + 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x41, 0x75, + 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x43, 0x51, 0x75, + 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x22, 0xe3, 0x03, 0x0a, 0x0b, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, @@ -7812,407 +4336,464 @@ var file_game_proto_rawDesc = []byte{ 0x74, 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x08, 0x52, - 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, - 0xf2, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, - 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x56, 0x65, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x43, 0x53, 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, - 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x43, 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, - 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, - 0x0b, 0x43, 0x53, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x12, 0x1c, 0x0a, 0x09, - 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, - 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x61, - 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x22, 0x6d, 0x0a, 0x0b, 0x53, 0x43, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, - 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, 0x74, - 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x61, 0x74, - 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x53, 0x41, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x43, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x4f, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x77, 0x0a, 0x11, 0x43, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4f, 0x70, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4f, 0x70, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, - 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, - 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, - 0x4c, 0x6f, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, - 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x53, 0x43, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, - 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x54, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x07, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x54, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x43, 0x4e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x53, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0xa4, 0x01, 0x0a, 0x0b, 0x53, 0x43, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x83, 0x02, 0x0a, 0x13, 0x43, 0x53, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0xf2, 0x02, + 0x0a, 0x13, 0x53, 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, + 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, + 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x14, 0x43, 0x53, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x11, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x64, 0x22, 0xa4, 0x03, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, + 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x35, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x57, 0x0a, 0x14, 0x53, 0x43, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, + 0x70, 0x12, 0x2f, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x22, 0x75, 0x0a, 0x0f, 0x43, 0x53, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x09, 0x51, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, + 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, + 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x51, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x4d, 0x0a, + 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x22, 0x36, 0x0a, 0x0b, + 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x53, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5c, 0x0a, + 0x0d, 0x53, 0x43, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x77, 0x0a, 0x11, 0x43, + 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x4f, 0x70, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, + 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x1a, 0x0a, + 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, + 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x47, + 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x54, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x47, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6c, 0x69, + 0x73, 0x74, 0x54, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x47, 0x6c, 0x69, 0x73, + 0x74, 0x54, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x43, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x22, 0x7c, 0x0a, 0x0d, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, + 0x72, 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, + 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x46, + 0x6f, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x46, 0x6f, 0x72, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, - 0x2a, 0xe6, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, - 0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, - 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf8, 0x07, 0x12, 0x1b, - 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x64, 0x10, 0xfa, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfb, 0x07, 0x12, - 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfc, 0x07, 0x12, 0x1b, 0x0a, 0x16, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfe, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0x80, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, - 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x90, - 0x08, 0x12, 0x2c, 0x0a, 0x27, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, - 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x92, 0x08, 0x12, - 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x6e, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f, - 0x77, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x93, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x94, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x95, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6f, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0x98, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9a, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9d, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9e, 0x08, 0x12, 0x1b, 0x0a, 0x16, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x6d, 0x65, 0x49, 0x70, 0x46, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, - 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa0, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x10, 0xa2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x4f, 0x74, - 0x68, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xa3, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x70, 0x59, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xba, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc9, 0x08, 0x12, 0x24, 0x0a, 0x1f, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xca, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, - 0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e, - 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a, - 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4, - 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, - 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61, - 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, - 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74, - 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75, - 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, - 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19, - 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72, - 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, - 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61, - 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, - 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, - 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, - 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, - 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41, 0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53, - 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, - 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, - 0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10, 0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c, - 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b, - 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, - 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, - 0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, - 0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, - 0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, - 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2, - 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, - 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, - 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10, - 0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11, - 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55, - 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f, - 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, - 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12, - 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, - 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, - 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, - 0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11, - 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, - 0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, - 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, - 0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, - 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, - 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, - 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, - 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, - 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, - 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0, - 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, + 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x3b, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x77, 0x69, + 0x74, 0x68, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x61, + 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x22, 0x4d, + 0x0a, 0x0b, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0xa4, 0x01, + 0x0a, 0x0b, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x54, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x02, 0x54, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, + 0x75, 0x6d, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x53, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x22, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x02, 0x54, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb8, 0x03, + 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, + 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, + 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, + 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, + 0x98, 0x0a, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x01, + 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, 0x74, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf8, 0x07, 0x12, 0x1b, 0x0a, + 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x10, 0xfa, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfb, 0x07, 0x12, 0x1b, + 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfc, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfe, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x49, 0x6e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x80, + 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x4e, + 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x90, 0x08, + 0x12, 0x2c, 0x0a, 0x27, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, + 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x92, 0x08, 0x12, 0x27, + 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x6e, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x93, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x59, 0x6f, 0x75, 0x72, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x94, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x95, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6f, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x10, 0x98, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x57, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9a, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9d, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9e, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x6d, 0x65, 0x49, 0x70, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0xa0, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, + 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xa2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x4f, 0x74, 0x68, + 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa3, + 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x70, 0x59, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xba, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc9, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xca, + 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, + 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xcd, + 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x6f, + 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0xce, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, + 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, + 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, + 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xb4, 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, + 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, + 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x10, 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, + 0x6f, 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, + 0x74, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, + 0x75, 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, + 0x67, 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x10, 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, + 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, + 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, + 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xc8, 0x09, 0x0a, 0x10, 0x47, + 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, + 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, + 0x6c, 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, + 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, + 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, 0x11, 0x12, 0x17, 0x0a, + 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, + 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa4, 0x11, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, + 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, + 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, + 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xb9, 0x11, 0x12, 0x23, 0x0a, 0x1e, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, 0x10, 0xd2, + 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, - 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, - 0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, - 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, + 0x10, 0xe0, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, + 0x4f, 0x4d, 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, + 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, + 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46, - 0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10, - 0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, - 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c, - 0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f, - 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, - 0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, - 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, - 0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, - 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, + 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, + 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, + 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf5, 0x11, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x41, 0x55, + 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, + 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf8, 0x11, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, + 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, + 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xfa, 0x11, 0x12, + 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x6f, 0x75, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfb, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, + 0xfc, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0xfd, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, + 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, + 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, + 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, + 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x2a, 0x29, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x01, + 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -8227,169 +4808,95 @@ func file_game_proto_rawDescGZIP() []byte { return file_game_proto_rawDescData } -var file_game_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 102) +var file_game_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 49) var file_game_proto_goTypes = []interface{}{ - (OpResultCode_Game)(0), // 0: gamehall.OpResultCode_Game - (GameHallPacketID)(0), // 1: gamehall.GameHallPacketID - (*CSEnterHall)(nil), // 2: gamehall.CSEnterHall - (*SCEnterHall)(nil), // 3: gamehall.SCEnterHall - (*CSLeaveHall)(nil), // 4: gamehall.CSLeaveHall - (*SCLeaveHall)(nil), // 5: gamehall.SCLeaveHall - (*RoomPlayerInfo)(nil), // 6: gamehall.RoomPlayerInfo - (*RoomInfo)(nil), // 7: gamehall.RoomInfo - (*CSHallRoomList)(nil), // 8: gamehall.CSHallRoomList - (*HallInfo)(nil), // 9: gamehall.HallInfo - (*HallPlayerNum)(nil), // 10: gamehall.HallPlayerNum - (*SCHallRoomList)(nil), // 11: gamehall.SCHallRoomList - (*SCRoomPlayerEnter)(nil), // 12: gamehall.SCRoomPlayerEnter - (*SCRoomPlayerLeave)(nil), // 13: gamehall.SCRoomPlayerLeave - (*SCRoomStateChange)(nil), // 14: gamehall.SCRoomStateChange - (*CSCreateRoom)(nil), // 15: gamehall.CSCreateRoom - (*SCCreateRoom)(nil), // 16: gamehall.SCCreateRoom - (*CSDestroyRoom)(nil), // 17: gamehall.CSDestroyRoom - (*SCDestroyRoom)(nil), // 18: gamehall.SCDestroyRoom - (*CSEnterRoom)(nil), // 19: gamehall.CSEnterRoom - (*SCEnterRoom)(nil), // 20: gamehall.SCEnterRoom - (*CSLeaveRoom)(nil), // 21: gamehall.CSLeaveRoom - (*SCLeaveRoom)(nil), // 22: gamehall.SCLeaveRoom - (*CSReturnRoom)(nil), // 23: gamehall.CSReturnRoom - (*SCReturnRoom)(nil), // 24: gamehall.SCReturnRoom - (*CSGetGameRec)(nil), // 25: gamehall.CSGetGameRec - (*PlayerGameRec)(nil), // 26: gamehall.PlayerGameRec - (*GameRec)(nil), // 27: gamehall.GameRec - (*SCGetGameRec)(nil), // 28: gamehall.SCGetGameRec - (*CSShareSuc)(nil), // 29: gamehall.CSShareSuc - (*SCShareSuc)(nil), // 30: gamehall.SCShareSuc - (*CSForceStart)(nil), // 31: gamehall.CSForceStart - (*SCForceStart)(nil), // 32: gamehall.SCForceStart - (*CSInviteRobot)(nil), // 33: gamehall.CSInviteRobot - (*CSPlayerSwithFlag)(nil), // 34: gamehall.CSPlayerSwithFlag - (*CSShopBuy)(nil), // 35: gamehall.CSShopBuy - (*SCShopBuy)(nil), // 36: gamehall.SCShopBuy - (*CSJoinGame)(nil), // 37: gamehall.CSJoinGame - (*SCJoinGame)(nil), // 38: gamehall.SCJoinGame - (*CSEnterDgGame)(nil), // 39: gamehall.CSEnterDgGame - (*SCEnterDgGame)(nil), // 40: gamehall.SCEnterDgGame - (*CSLeaveDgGame)(nil), // 41: gamehall.CSLeaveDgGame - (*SCLeaveDgGame)(nil), // 42: gamehall.SCLeaveDgGame - (*CSThridAccountStatistic)(nil), // 43: gamehall.CSThridAccountStatistic - (*ThridAccount)(nil), // 44: gamehall.ThridAccount - (*SCThridAccountStatistic)(nil), // 45: gamehall.SCThridAccountStatistic - (*CSThridAccountTransfer)(nil), // 46: gamehall.CSThridAccountTransfer - (*SCThridAccountTransfer)(nil), // 47: gamehall.SCThridAccountTransfer - (*CSEnterThridGame)(nil), // 48: gamehall.CSEnterThridGame - (*SCEnterThridGame)(nil), // 49: gamehall.SCEnterThridGame - (*CSLeaveThridGame)(nil), // 50: gamehall.CSLeaveThridGame - (*SCLeaveThridGame)(nil), // 51: gamehall.SCLeaveThridGame - (*CSThridGameList)(nil), // 52: gamehall.CSThridGameList - (*ThridGameDatas)(nil), // 53: gamehall.ThridGameDatas - (*ThridGamePlatforms)(nil), // 54: gamehall.ThridGamePlatforms - (*SCThridGameList)(nil), // 55: gamehall.SCThridGameList - (*CSThridGameBalanceUpdate)(nil), // 56: gamehall.CSThridGameBalanceUpdate - (*SCThridGameBalanceUpdate)(nil), // 57: gamehall.SCThridGameBalanceUpdate - (*SCThridGameBalanceUpdateState)(nil), // 58: gamehall.SCThridGameBalanceUpdateState - (*CSCreatePrivateRoom)(nil), // 59: gamehall.CSCreatePrivateRoom - (*SCCreatePrivateRoom)(nil), // 60: gamehall.SCCreatePrivateRoom - (*PrivateRoomInfo)(nil), // 61: gamehall.PrivateRoomInfo - (*CSGetPrivateRoomList)(nil), // 62: gamehall.CSGetPrivateRoomList - (*SCGetPrivateRoomList)(nil), // 63: gamehall.SCGetPrivateRoomList - (*CSGetPrivateRoomHistory)(nil), // 64: gamehall.CSGetPrivateRoomHistory - (*PrivateRoomHistory)(nil), // 65: gamehall.PrivateRoomHistory - (*SCGetPrivateRoomHistory)(nil), // 66: gamehall.SCGetPrivateRoomHistory - (*CSDestroyPrivateRoom)(nil), // 67: gamehall.CSDestroyPrivateRoom - (*SCDestroyPrivateRoom)(nil), // 68: gamehall.SCDestroyPrivateRoom - (*CSQueryRoomInfo)(nil), // 69: gamehall.CSQueryRoomInfo - (*QRoomInfo)(nil), // 70: gamehall.QRoomInfo - (*SCQueryRoomInfo)(nil), // 71: gamehall.SCQueryRoomInfo - (*CSGameObserve)(nil), // 72: gamehall.CSGameObserve - (*GameSubRecord)(nil), // 73: gamehall.GameSubRecord - (*SCGameSubList)(nil), // 74: gamehall.SCGameSubList - (*GameState)(nil), // 75: gamehall.GameState - (*SCGameState)(nil), // 76: gamehall.SCGameState - (*LotteryData)(nil), // 77: gamehall.LotteryData - (*SCLotterySync)(nil), // 78: gamehall.SCLotterySync - (*CSLotteryLog)(nil), // 79: gamehall.CSLotteryLog - (*LotteryLog)(nil), // 80: gamehall.LotteryLog - (*SCLotteryLog)(nil), // 81: gamehall.SCLotteryLog - (*SCLotteryBill)(nil), // 82: gamehall.SCLotteryBill - (*GameConfig1)(nil), // 83: gamehall.GameConfig1 - (*CSGetGameConfig)(nil), // 84: gamehall.CSGetGameConfig - (*ChessRankInfo)(nil), // 85: gamehall.ChessRankInfo - (*SCGetGameConfig)(nil), // 86: gamehall.SCGetGameConfig - (*SCChangeGameStatus)(nil), // 87: gamehall.SCChangeGameStatus - (*SCChangeEntrySwitch)(nil), // 88: gamehall.SCChangeEntrySwitch - (*CSEnterGame)(nil), // 89: gamehall.CSEnterGame - (*SCEnterGame)(nil), // 90: gamehall.SCEnterGame - (*CSQuitGame)(nil), // 91: gamehall.CSQuitGame - (*SCQuitGame)(nil), // 92: gamehall.SCQuitGame - (*CSUploadLoc)(nil), // 93: gamehall.CSUploadLoc - (*SCUploadLoc)(nil), // 94: gamehall.SCUploadLoc - (*CSAudienceSit)(nil), // 95: gamehall.CSAudienceSit - (*SCAudienceSit)(nil), // 96: gamehall.SCAudienceSit - (*CSRecordAndNotice)(nil), // 97: gamehall.CSRecordAndNotice - (*CommonNotice)(nil), // 98: gamehall.CommonNotice - (*PlayerRecord)(nil), // 99: gamehall.PlayerRecord - (*SCRecordAndNotice)(nil), // 100: gamehall.SCRecordAndNotice - (*SCNoticeChange)(nil), // 101: gamehall.SCNoticeChange - (*CSRoomEvent)(nil), // 102: gamehall.CSRoomEvent - (*SCRoomEvent)(nil), // 103: gamehall.SCRoomEvent + (OpResultCode_Game)(0), // 0: gamehall.OpResultCode_Game + (GameHallPacketID)(0), // 1: gamehall.GameHallPacketID + (DataType)(0), // 2: gamehall.DataType + (*CSCreateRoom)(nil), // 3: gamehall.CSCreateRoom + (*SCCreateRoom)(nil), // 4: gamehall.SCCreateRoom + (*CSEnterRoom)(nil), // 5: gamehall.CSEnterRoom + (*SCEnterRoom)(nil), // 6: gamehall.SCEnterRoom + (*CSReturnRoom)(nil), // 7: gamehall.CSReturnRoom + (*SCReturnRoom)(nil), // 8: gamehall.SCReturnRoom + (*CSEnterGame)(nil), // 9: gamehall.CSEnterGame + (*SCEnterGame)(nil), // 10: gamehall.SCEnterGame + (*CSQuitGame)(nil), // 11: gamehall.CSQuitGame + (*SCQuitGame)(nil), // 12: gamehall.SCQuitGame + (*GameConfig1)(nil), // 13: gamehall.GameConfig1 + (*CSGetGameConfig)(nil), // 14: gamehall.CSGetGameConfig + (*ChessRankInfo)(nil), // 15: gamehall.ChessRankInfo + (*SCGetGameConfig)(nil), // 16: gamehall.SCGetGameConfig + (*SCChangeGameStatus)(nil), // 17: gamehall.SCChangeGameStatus + (*SCChangeEntrySwitch)(nil), // 18: gamehall.SCChangeEntrySwitch + (*CSCreatePrivateRoom)(nil), // 19: gamehall.CSCreatePrivateRoom + (*SCCreatePrivateRoom)(nil), // 20: gamehall.SCCreatePrivateRoom + (*CSGetPrivateRoomList)(nil), // 21: gamehall.CSGetPrivateRoomList + (*PrivatePlayerInfo)(nil), // 22: gamehall.PrivatePlayerInfo + (*PrivateRoomInfo)(nil), // 23: gamehall.PrivateRoomInfo + (*SCGetPrivateRoomList)(nil), // 24: gamehall.SCGetPrivateRoomList + (*CSQueryRoomInfo)(nil), // 25: gamehall.CSQueryRoomInfo + (*QRoomInfo)(nil), // 26: gamehall.QRoomInfo + (*SCQueryRoomInfo)(nil), // 27: gamehall.SCQueryRoomInfo + (*GameState)(nil), // 28: gamehall.GameState + (*SCGameState)(nil), // 29: gamehall.SCGameState + (*CSAudienceSit)(nil), // 30: gamehall.CSAudienceSit + (*SCAudienceSit)(nil), // 31: gamehall.SCAudienceSit + (*CSRecordAndNotice)(nil), // 32: gamehall.CSRecordAndNotice + (*CommonNotice)(nil), // 33: gamehall.CommonNotice + (*PlayerRecord)(nil), // 34: gamehall.PlayerRecord + (*SCRecordAndNotice)(nil), // 35: gamehall.SCRecordAndNotice + (*SCNoticeChange)(nil), // 36: gamehall.SCNoticeChange + (*CSDestroyRoom)(nil), // 37: gamehall.CSDestroyRoom + (*SCDestroyRoom)(nil), // 38: gamehall.SCDestroyRoom + (*CSLeaveRoom)(nil), // 39: gamehall.CSLeaveRoom + (*SCLeaveRoom)(nil), // 40: gamehall.SCLeaveRoom + (*CSForceStart)(nil), // 41: gamehall.CSForceStart + (*SCForceStart)(nil), // 42: gamehall.SCForceStart + (*CSPlayerSwithFlag)(nil), // 43: gamehall.CSPlayerSwithFlag + (*CSRoomEvent)(nil), // 44: gamehall.CSRoomEvent + (*SCRoomEvent)(nil), // 45: gamehall.SCRoomEvent + (*ItemInfo)(nil), // 46: gamehall.ItemInfo + (*CSTouchType)(nil), // 47: gamehall.CSTouchType + (*RoomConfigInfo)(nil), // 48: gamehall.RoomConfigInfo + (*RoomTypeInfo)(nil), // 49: gamehall.RoomTypeInfo + (*CSRoomConfig)(nil), // 50: gamehall.CSRoomConfig + (*SCRoomConfig)(nil), // 51: gamehall.SCRoomConfig } var file_game_proto_depIdxs = []int32{ - 0, // 0: gamehall.SCEnterHall.OpRetCode:type_name -> gamehall.OpResultCode_Game - 6, // 1: gamehall.RoomInfo.Players:type_name -> gamehall.RoomPlayerInfo - 9, // 2: gamehall.HallPlayerNum.HallData:type_name -> gamehall.HallInfo - 7, // 3: gamehall.SCHallRoomList.Rooms:type_name -> gamehall.RoomInfo - 9, // 4: gamehall.SCHallRoomList.HallData:type_name -> gamehall.HallInfo - 6, // 5: gamehall.SCRoomPlayerEnter.Player:type_name -> gamehall.RoomPlayerInfo - 0, // 6: gamehall.SCCreateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 7: gamehall.SCDestroyRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 8: gamehall.SCEnterRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 9: gamehall.SCLeaveRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 10: gamehall.SCReturnRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 26, // 11: gamehall.GameRec.Datas:type_name -> gamehall.PlayerGameRec - 27, // 12: gamehall.SCGetGameRec.Recs:type_name -> gamehall.GameRec - 0, // 13: gamehall.SCShareSuc.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 14: gamehall.SCForceStart.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 15: gamehall.SCShopBuy.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 16: gamehall.SCJoinGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 17: gamehall.SCEnterDgGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 18: gamehall.SCLeaveDgGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 44, // 19: gamehall.SCThridAccountStatistic.Accounts:type_name -> gamehall.ThridAccount - 0, // 20: gamehall.SCThridAccountTransfer.OpRetCode:type_name -> gamehall.OpResultCode_Game - 44, // 21: gamehall.SCThridAccountTransfer.Accounts:type_name -> gamehall.ThridAccount - 0, // 22: gamehall.SCEnterThridGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 23: gamehall.SCLeaveThridGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 53, // 24: gamehall.ThridGamePlatforms.GameDatas:type_name -> gamehall.ThridGameDatas - 0, // 25: gamehall.SCThridGameList.OpRetCode:type_name -> gamehall.OpResultCode_Game - 54, // 26: gamehall.SCThridGameList.GamePlatforms:type_name -> gamehall.ThridGamePlatforms - 0, // 27: gamehall.SCThridGameBalanceUpdate.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 28: gamehall.SCThridGameBalanceUpdateState.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 29: gamehall.SCCreatePrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 61, // 30: gamehall.SCGetPrivateRoomList.Datas:type_name -> gamehall.PrivateRoomInfo - 65, // 31: gamehall.SCGetPrivateRoomHistory.Datas:type_name -> gamehall.PrivateRoomHistory - 0, // 32: gamehall.SCDestroyPrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 70, // 33: gamehall.SCQueryRoomInfo.RoomInfo:type_name -> gamehall.QRoomInfo - 0, // 34: gamehall.SCQueryRoomInfo.OpRetCode:type_name -> gamehall.OpResultCode_Game - 73, // 35: gamehall.SCGameSubList.List:type_name -> gamehall.GameSubRecord - 75, // 36: gamehall.SCGameState.List:type_name -> gamehall.GameState - 77, // 37: gamehall.SCLotterySync.Datas:type_name -> gamehall.LotteryData - 80, // 38: gamehall.SCLotteryLog.Logs:type_name -> gamehall.LotteryLog - 83, // 39: gamehall.SCGetGameConfig.GameCfg:type_name -> gamehall.GameConfig1 - 85, // 40: gamehall.SCGetGameConfig.ChessRanks:type_name -> gamehall.ChessRankInfo - 83, // 41: gamehall.SCChangeGameStatus.GameCfg:type_name -> gamehall.GameConfig1 - 0, // 42: gamehall.SCEnterGame.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 43: gamehall.SCQuitGame.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 44: gamehall.SCAudienceSit.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 45: gamehall.SCRecordAndNotice.OpCode:type_name -> gamehall.OpResultCode_Game - 98, // 46: gamehall.SCRecordAndNotice.List:type_name -> gamehall.CommonNotice - 99, // 47: gamehall.SCRecordAndNotice.Glist:type_name -> gamehall.PlayerRecord - 0, // 48: gamehall.SCRoomEvent.OpCode:type_name -> gamehall.OpResultCode_Game - 49, // [49:49] is the sub-list for method output_type - 49, // [49:49] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 0, // 0: gamehall.SCCreateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 1: gamehall.SCEnterRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 2: gamehall.SCReturnRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 3: gamehall.SCEnterGame.OpCode:type_name -> gamehall.OpResultCode_Game + 0, // 4: gamehall.SCQuitGame.OpCode:type_name -> gamehall.OpResultCode_Game + 13, // 5: gamehall.SCGetGameConfig.GameCfg:type_name -> gamehall.GameConfig1 + 15, // 6: gamehall.SCGetGameConfig.ChessRanks:type_name -> gamehall.ChessRankInfo + 13, // 7: gamehall.SCChangeGameStatus.GameCfg:type_name -> gamehall.GameConfig1 + 0, // 8: gamehall.SCCreatePrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 22, // 9: gamehall.PrivateRoomInfo.Players:type_name -> gamehall.PrivatePlayerInfo + 23, // 10: gamehall.SCGetPrivateRoomList.Datas:type_name -> gamehall.PrivateRoomInfo + 26, // 11: gamehall.SCQueryRoomInfo.RoomInfo:type_name -> gamehall.QRoomInfo + 0, // 12: gamehall.SCQueryRoomInfo.OpRetCode:type_name -> gamehall.OpResultCode_Game + 28, // 13: gamehall.SCGameState.List:type_name -> gamehall.GameState + 0, // 14: gamehall.SCAudienceSit.OpCode:type_name -> gamehall.OpResultCode_Game + 0, // 15: gamehall.SCRecordAndNotice.OpCode:type_name -> gamehall.OpResultCode_Game + 33, // 16: gamehall.SCRecordAndNotice.List:type_name -> gamehall.CommonNotice + 34, // 17: gamehall.SCRecordAndNotice.Glist:type_name -> gamehall.PlayerRecord + 0, // 18: gamehall.SCDestroyRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 19: gamehall.SCLeaveRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 20: gamehall.SCForceStart.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 21: gamehall.SCRoomEvent.OpCode:type_name -> gamehall.OpResultCode_Game + 2, // 22: gamehall.CSTouchType.Tp:type_name -> gamehall.DataType + 46, // 23: gamehall.RoomConfigInfo.Cost:type_name -> gamehall.ItemInfo + 46, // 24: gamehall.RoomConfigInfo.Reward:type_name -> gamehall.ItemInfo + 48, // 25: gamehall.RoomTypeInfo.List:type_name -> gamehall.RoomConfigInfo + 49, // 26: gamehall.SCRoomConfig.List:type_name -> gamehall.RoomTypeInfo + 27, // [27:27] is the sub-list for method output_type + 27, // [27:27] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_game_proto_init() } @@ -8399,162 +4906,6 @@ func file_game_proto_init() { } if !protoimpl.UnsafeEnabled { file_game_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomPlayerInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSHallRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HallInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HallPlayerNum); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCHallRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomPlayerEnter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomPlayerLeave); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomStateChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSCreateRoom); i { case 0: return &v.state @@ -8566,7 +4917,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCCreateRoom); i { case 0: return &v.state @@ -8578,31 +4929,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSDestroyRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCDestroyRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSEnterRoom); i { case 0: return &v.state @@ -8614,7 +4941,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCEnterRoom); i { case 0: return &v.state @@ -8626,31 +4953,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSReturnRoom); i { case 0: return &v.state @@ -8662,7 +4965,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCReturnRoom); i { case 0: return &v.state @@ -8674,775 +4977,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSShareSuc); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCShareSuc); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSForceStart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCForceStart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSInviteRobot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSPlayerSwithFlag); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSShopBuy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCShopBuy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSJoinGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCJoinGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridAccountStatistic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridAccount); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridAccountStatistic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridAccountTransfer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridAccountTransfer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridGameList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridGameDatas); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridGamePlatforms); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridGameBalanceUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameBalanceUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameBalanceUpdateState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSCreatePrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCCreatePrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrivateRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetPrivateRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetPrivateRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetPrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetPrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSDestroyPrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCDestroyPrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSQueryRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCQueryRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGameObserve); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameSubRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGameSubList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGameState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LotteryData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotterySync); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotteryBill); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameConfig1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetGameConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChessRankInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetGameConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCChangeGameStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCChangeEntrySwitch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSEnterGame); i { case 0: return &v.state @@ -9454,7 +4989,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCEnterGame); i { case 0: return &v.state @@ -9466,7 +5001,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSQuitGame); i { case 0: return &v.state @@ -9478,7 +5013,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCQuitGame); i { case 0: return &v.state @@ -9490,8 +5025,8 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSUploadLoc); i { + file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GameConfig1); i { case 0: return &v.state case 1: @@ -9502,8 +5037,8 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCUploadLoc); i { + file_game_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSGetGameConfig); i { case 0: return &v.state case 1: @@ -9514,7 +5049,187 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChessRankInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGetGameConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCChangeGameStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCChangeEntrySwitch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSCreatePrivateRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCCreatePrivateRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSGetPrivateRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivatePlayerInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivateRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGetPrivateRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSQueryRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCQueryRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GameState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGameState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSAudienceSit); i { case 0: return &v.state @@ -9526,7 +5241,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCAudienceSit); i { case 0: return &v.state @@ -9538,7 +5253,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSRecordAndNotice); i { case 0: return &v.state @@ -9550,7 +5265,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommonNotice); i { case 0: return &v.state @@ -9562,7 +5277,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerRecord); i { case 0: return &v.state @@ -9574,7 +5289,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCRecordAndNotice); i { case 0: return &v.state @@ -9586,7 +5301,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCNoticeChange); i { case 0: return &v.state @@ -9598,7 +5313,91 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSDestroyRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCDestroyRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSLeaveRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCLeaveRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSForceStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCForceStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSPlayerSwithFlag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSRoomEvent); i { case 0: return &v.state @@ -9610,7 +5409,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCRoomEvent); i { case 0: return &v.state @@ -9622,14 +5421,86 @@ func file_game_proto_init() { return nil } } + file_game_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ItemInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSTouchType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomConfigInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomTypeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSRoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCRoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_game_proto_rawDesc, - NumEnums: 2, - NumMessages: 102, + NumEnums: 3, + NumMessages: 49, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/gamehall/game.proto b/protocol/gamehall/game.proto index 33cc8fb..e49a0e7 100644 --- a/protocol/gamehall/game.proto +++ b/protocol/gamehall/game.proto @@ -30,6 +30,8 @@ enum OpResultCode_Game { OPRC_AllocRoomIdFailed_Game = 1097; //房间id获取失败 OPRC_PrivateRoomCountLimit_Game = 1098; //私人房间上限 OPRC_RoomNotExit = 1099; // 已经不在房间了 + OPRC_PasswordError = 1101; //密码错误 + OPRC_CostNotEnough = 1102; //房卡不足 OPRC_LowerRice_ScenceMax_Game = 1075; //超过最大下米数量 OPRC_LowerRice_PlayerMax_Game = 1076; //超过单个用户最大下米数 @@ -47,203 +49,84 @@ enum OpResultCode_Game { OPRC_Dg_QuotaNotEnough_Game = 9003; //平台DG配额不足 OPRC_Thr_GameClose_Game = 9010; //游戏维护中 } -//消息id 2200-2319 + enum GameHallPacketID { - PACKET_GameHall_ZERO = 0; // 弃用消息号 - PACKET_CS_JOINGAME = 2200; - PACKET_SC_JOINGAME = 2201; + // client -> worldsrv 协议 + // 消息id 2200-2319 + // 弃用消息号 + PACKET_GameHall_ZERO = 0; + // 创建房间 PACKET_CS_CREATEROOM = 2202; PACKET_SC_CREATEROOM = 2203; + // 进入房间 PACKET_CS_ENTERROOM = 2204; PACKET_SC_ENTERROOM = 2205; + // 返回房间 PACKET_CS_RETURNROOM = 2206; PACKET_SC_RETURNROOM = 2207; - PACKET_CS_AUDIENCE_ENTERROOM = 2208; + // 进入游戏 PACKET_CS_ENTERGAME = 2209; PACKET_SC_ENTERGAME = 2210; - + // 退出游戏 PACKET_CS_QUITGAME = 2211; PACKET_SC_QUITGAME = 2212; - PACKET_SC_CARDGAINWAY = 2213; - PACKET_CS_TASKLIST = 2214; - PACKET_SC_TASKLIST = 2215; - PACKET_SC_TASKCHG = 2216; - PACKET_SC_TACKCOMPLETE = 2217; - PACKET_SC_TASKDEL = 2218; - PACKET_CS_TACKDRAWPRIZE = 2219; - PACKET_SC_TACKDRAWPRIZE = 2220; - - PACKET_CS_GETAGENTGAMEREC = 2223; - PACKET_SC_GETAGENTGAMEREC = 2224; - PACKET_CS_DELAGENTGAMEREC = 2225; - PACKET_CS_SHOPBUY = 2226; - PACKET_SC_SHOPBUY = 2227; - PACKET_SC_LIMITLIST = 2228; - PACKET_CS_GETLATELYGAMEIDS = 2229; - PACKET_SC_GETLATELYGAMEIDS = 2230; - + // 获取游戏分场配置 PACKET_CS_GETGAMECONFIG = 2231; PACKET_SC_GETGAMECONFIG = 2232; + // 修改游戏开关 PACKET_SC_CHANGEGAMESTATUS = 2233; - PACKET_CS_ENTERHALL = 2240; - PACKET_SC_ENTERHALL = 2241; - PACKET_CS_LEAVEHALL = 2242; - PACKET_SC_LEAVEHALL = 2243; - PACKET_CS_HALLROOMLIST = 2244; - PACKET_SC_HALLROOMLIST = 2245; - PACKET_SC_ROOMPLAYERENTER = 2246; - PACKET_SC_ROOMPLAYERLEAVE = 2247; - PACKET_SC_ROOMSTATECHANG = 2248; - PACKET_SC_HALLPLAYERNUM = 2249; - PACKET_SC_BULLETIONINFO = 2250; + // 充值弹框协议 + PACKET_SC_PLAYERRECHARGEANSWER = 2258; - PACKET_CS_BULLETIONINFO = 2251; - PACKET_CS_CUSTOMERINFOLIST = 2252; - PACKET_SC_CUSTOMERINFOLIST = 2253; - PACKET_CS_ENTERDGGAME = 2254; - PACKET_SC_ENTERDGGAME = 2255; - PACKET_CS_LEAVEDGGAME = 2256; - PACKET_SC_LEAVEDGGAME = 2257; - PACKET_SC_PLAYERRECHARGEANSWER = 2258;//充值弹框协议 - PACKET_CS_THRIDACCOUNTSTATICSTIC = 2259; - PACKET_SC_THRIDACCOUNTSTATICSTIC = 2260; - - PACKET_CS_THRIDACCOUNTTRANSFER = 2261; - PACKET_SC_THRIDACCOUNTTRANSFER = 2262; - PACKET_CS_ENTERTHRIDGAME = 2263; - PACKET_SC_ENTERTHRIDGAME = 2264; - PACKET_CS_LEAVETHRIDGAME = 2265; - PACKET_SC_LEAVETHRIDGAME = 2266; - PACKET_CS_THRIDGAMELIST = 2267; - PACKET_SC_THRIDGAMELIST = 2268; - PACKET_CS_THRIDGAMEBALANCEUPDATE = 2269; - PACKET_SC_THRIDGAMEBALANCEUPDATE = 2270; - - PACKET_SC_THRIDGAMEBALANCEUPDATESTATE = 2271; + // 创建竞技馆私人房 PACKET_CS_CREATEPRIVATEROOM = 2272; PACKET_SC_CREATEPRIVATEROOM = 2273; + // 查询竞技馆私人房列表 PACKET_CS_GETPRIVATEROOMLIST = 2274; PACKET_SC_GETPRIVATEROOMLIST = 2275; - PACKET_CS_GETPRIVATEROOMHISTORY = 2276; - PACKET_SC_GETPRIVATEROOMHISTORY = 2277; - PACKET_CS_DESTROYPRIVATEROOM = 2278; - PACKET_SC_DESTROYPRIVATEROOM = 2279; + + // 查询自由桌房间列表 PACKET_CS_QUERYROOMINFO = 2280; - PACKET_SC_QUERYROOMINFO = 2281; - PACKET_SC_GAMESUBLIST = 2283; - PACKET_CS_GAMEOBSERVE = 2284; + // 同步房间下注状态 PACKET_SC_GAMESTATE = 2285; - PACKET_SC_SYNCGAMEFREE = 2286; - PACKET_SC_LOTTERYSYNC = 2287; - PACKET_CS_LOTTERYLOG = 2288; - PACKET_SC_LOTTERYLOG = 2289; - PACKET_SC_LOTTERYBILL = 2290; - - PACKET_CS_UPLOADLOC = 2291; - PACKET_SC_UPLOADLOC = 2292; + // 观众进入房间 + PACKET_CS_AUDIENCE_ENTERROOM = 2208; + // 观众坐下 PACKET_CS_AUDIENCESIT = 2293; PACKET_SC_AUDIENCESIT = 2294; + // 公告 PACKET_CS_COMNOTICE = 2295; PACKET_SC_COMNOTICE = 2296; - PACKET_SC_CHANGEENTRYSWITCH = 2297;//界面入口开关 - PACKET_SC_NoticeChange = 2298; // 公告更新 + // 界面入口开关 + PACKET_SC_CHANGEENTRYSWITCH = 2297; + // 公告更新 + PACKET_SC_NoticeChange = 2298; + // 保持更新 + PACKET_CSTouchType = 2299; + // 竞技馆房间信息 + PACKET_CSRoomConfig = 2300; + PACKET_SCRoomConfig = 2301; + + // client -> gamesrv 协议 + // 消息id 8000~8099 + // 离开房间 PACKET_CS_LEAVEROOM = 8001; PACKET_SC_LEAVEROOM = 8002; + // 解散房间 PACKET_CS_DESTROYROOM = 8003; PACKET_SC_DESTROYROOM = 8004; + // 强制开始 PACKET_CS_FORCESTART = 8005; PACKET_SC_FORCESTART = 8006; + // 观众离开房间 PACKET_CS_AUDIENCE_LEAVEROOM = 8007; + // 玩家切换标志,暂离状态 PACKET_CS_PLAYER_SWITCHFLAG = 8008; - PACKET_CSRoomEvent = 8009; // 房间事件 - PACKET_SCRoomEvent = 8010; // 房间事件 -} -//进入游戏大厅 -//PACKET_CS_ENTERHALL -message CSEnterHall{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) -} - -//PACKET_SC_ENTERHALL -message SCEnterHall{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) - OpResultCode_Game OpRetCode = 2; //结果 -} - -//离开游戏大厅 -//PACKET_CS_LEAVEHALL -message CSLeaveHall{ -} - -//PACKET_SC_LEAVEHALL -message SCLeaveHall{ - int32 HallId = 1; -} - -//房间内玩家信息 -message RoomPlayerInfo{ - int32 SnId = 1; //数字账号 - int32 Head = 2; //头像 - int32 Sex = 3; //性别 - string Name = 4; //名字 - int32 Pos = 5; //位置 - int32 Flag = 6; //状态 - int32 HeadOutLine = 7; //头像框 - int32 VIP = 8; -} - -//房间信息 -message RoomInfo{ - int32 RoomId = 1; //房号 - bool Starting = 7; //牌局是否开始 - repeated RoomPlayerInfo Players = 5; -} - -//PACKET_CS_HALLROOMLIST -message CSHallRoomList{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) -} - -//大厅人数 -message HallInfo{ - int32 SceneType = 1; //场 - int32 PlayerNum = 2; //人数 -} - -//PACKET_SC_HALLPLAYERNUM -message HallPlayerNum{ - repeated HallInfo HallData = 1; //大厅人数 -} -//PACKET_SC_HALLROOMLIST -message SCHallRoomList{ - int32 HallId = 1; //厅id - int32 GameId = 2; //游戏id - int32 GameMode = 3; //游戏模式 - bool IsAdd = 4; //是否新增 - repeated int32 Params = 5; //游戏规则参数 - repeated RoomInfo Rooms = 6; //房间列表 - repeated HallInfo HallData = 7; //大厅人数 -} - -//PACKET_SC_ROOMPLAYERENTER -message SCRoomPlayerEnter{ - int32 RoomId = 1; - RoomPlayerInfo Player = 2; -} - -//PACKET_SC_ROOMPLAYERLEAVE -message SCRoomPlayerLeave{ - int32 RoomId = 1; - int32 Pos = 2; -} - -//PACKET_SC_ROOMSTATECHANG -message SCRoomStateChange{ - int32 RoomId = 1; - bool Starting = 2; - int32 State = 3; + // 房间事件,互动表情 + PACKET_CSRoomEvent = 8009; + PACKET_SCRoomEvent = 8010; } //PACKET_CS_CREATEROOM @@ -259,7 +142,6 @@ message CSCreateRoom{ repeated int32 Params = 5; int32 Id = 6; // gamefreeid } - //PACKET_SC_CREATEROOM message SCCreateRoom{ int32 GameId = 1; //游戏模式 @@ -270,48 +152,24 @@ message SCCreateRoom{ OpResultCode_Game OpRetCode = 6; //结果 } -//PACKET_CS_DESTROYROOM -message CSDestroyRoom{ -} -//PACKET_SC_DESTROYROOM -message SCDestroyRoom{ - int32 RoomId = 1; //房间编号 - OpResultCode_Game OpRetCode = 2; //结果 - int32 IsForce = 3; //是否强制销毁 -} - //PACKET_CS_ENTERROOM //PACKET_CS_AUDIENCE_ENTERROOM //玩家请求进入游戏 message CSEnterRoom{ int32 RoomId = 1; //房间编号 int32 GameId = 2; //游戏编号 + string Password = 3; //房间密码 } - //PACKET_SC_ENTERROOM message SCEnterRoom{ int32 GameId = 1; //游戏ID - int32 ModeType = 2; //场类型 + int32 ModeType = 2; //游戏模式(玩法,已经不用了) repeated int32 Params = 3; //场参数 int32 RoomId = 4; //房间编号 int32 HallId = 5; //厅id OpResultCode_Game OpRetCode = 6; //结果 int32 ClubId = 7; -} - -//PACKET_CS_LEAVEROOM -//PACKET_CS_AUDIENCE_LEAVEROOM -//玩家离开房间,返回大厅 -message CSLeaveRoom{ - int32 Mode = 1; //离开方式 0:退出 1:暂离(占着座位,返回大厅) -} - -//PACKET_SC_LEAVEROOM -message SCLeaveRoom{ - OpResultCode_Game OpRetCode = 1; //结果 - int32 Reason = 2;//原因 0:主动退出 1:被踢出 - int32 RoomId = 3;//房间ID - int32 Mode = 4; + int32 GameFreeId = 8; //游戏场次id } //PACKET_CS_RETURNROOM @@ -322,7 +180,6 @@ message CSReturnRoom{ int32 RoomId = 4; //int32 LogicId = 5; //这个字段是冗余的 } - //PACKET_SC_RETURNROOM message SCReturnRoom{ OpResultCode_Game OpRetCode = 1; //结果 @@ -339,419 +196,6 @@ message SCReturnRoom{ int32 ClubId = 12; } - - -//获取游戏记录 -//PACKET_CS_GETGAMEREC -message CSGetGameRec{ - int32 Ver = 1; - int32 GameId = 2; -} - -message PlayerGameRec{ - int32 Id = 1; - string Name = 2; - int32 Head = 3; - int64 Coin = 4; - int32 Pos = 5; - repeated int32 OtherParams = 6; -} - -message GameRec{ - int32 RecId = 1; - repeated PlayerGameRec Datas = 2; - int64 Ts = 3; - int32 RoomId = 4; - int32 GameMode = 5; - int32 SceneType = 6; - int32 GameId = 7; - int32 TotalOfGames = 8; - int32 NumOfGames = 9; - int32 RoomFeeMode = 10; - int32 RoomCardCnt = 11; - repeated int32 Params = 12; - int32 GameTime = 13; -} - -//PACKET_SC_GETGAMEREC -message SCGetGameRec{ - repeated GameRec Recs = 1; - int32 Ver = 2; - int32 GameId = 3; -} - -//PACKET_CS_SHARESUC -message CSShareSuc{ - int32 ShareType = 1; //分享类型 1:微信好友 2:朋友圈 -} - -//PACKET_SC_SHARESUC -message SCShareSuc{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//PACKET_CS_FORCESTART -message CSForceStart{ -} - -//PACKET_SC_FORCESTART -message SCForceStart{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//PACKET_CS_INVITEROBOT -message CSInviteRobot{ - int32 GameId = 1; - bool IsAgent = 2; //0:自己玩 1:机器人代替我 -} - -//玩家设置标记 -//PACKET_CS_PLAYER_SWITCHFLAG -message CSPlayerSwithFlag{ - int32 Flag = 1; - int32 Mark = 2; //1:设置 0:取消 -} - -//玩家商城购买 -//PACKET_CS_SHOPBUY -message CSShopBuy{ - int32 Id = 1; //商品ID - int32 Count = 2; //数量 -} - -//PACKET_SC_SHOPBUY -message SCShopBuy{ - int32 Id = 1; - OpResultCode_Game OpRetCode = 2; //结果 - int32 CostType = 3; //消耗类型 - int32 CostNum = 4; //消耗数量 - int32 GainType = 5; //获得类型 - int32 GainNum = 6; //获得数量 -} - -//CS_JOINGAME -//请求的通知 -message CSJoinGame{ - int32 MsgType = 1;//0.请求信息1.确认信息 - int32 SnId = 2;//type=1发送,为服务器下发的数据,原数据发送 - int32 Pos = 3;//type=0时发送,为申请坐下的位置,索引0开始 - bool Agree = 4;//type=1时发送,true为同意,false为拒绝 -} -//SC_TJOINGAME -//请求的通知 -message SCJoinGame{ - int32 MsgType = 1;//0.请求信息1.确认信息 - string Name = 2;//type=0为申请者的昵称,和snid同步发送,广播范围是房间内用户 - int32 SnId = 3;//type=0申请者ID - OpResultCode_Game OpRetCode = 4;//type=1时,为申请的结果,为0成功,其他的为错误代码 1 座位已满 2 观战人数已满 -} -//PACKET_CS_ENTERDGGAME -message CSEnterDgGame{ - int32 LoginType = 1;//0.试玩登录1.正常登录 - int32 DgGameId = 2;//游戏ID - string Domains = 3;//sdk - -} -message SCEnterDgGame{ - OpResultCode_Game OpRetCode = 1; //结果 - string LoginUrl = 2; - string Token = 3; - int32 DgGameId = 4;//游戏ID - int32 CodeId = 5; - string Domains = 6; - repeated string List = 7; -} -//PACKET_CS_LEAVEDGGAME -message CSLeaveDgGame{ -} -message SCLeaveDgGame{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//第三方个人账户信息统计 -message CSThridAccountStatistic{ - int32 ReqId = 1; //-1返回全部平台信息,0为系统平台 -} -message ThridAccount{ - int32 ThridPlatformId = 1; - string Name = 2; - int32 Status = 3; //200正常,403异常 - int64 Balance = 4; -} -message SCThridAccountStatistic{ - int32 ReqId = 1; - repeated ThridAccount Accounts = 2; -} - -//第三方个人账户余额转入转出 -message CSThridAccountTransfer{ - int32 FromId = 1; - int32 ToId = 2; - int64 Amount = 3; -} -message SCThridAccountTransfer{ - OpResultCode_Game OpRetCode = 1; //结果 - repeated ThridAccount Accounts = 2; //OpRetCode为0时,两条数据 分别是from to -} - -message CSEnterThridGame{ - int32 ThridGameId = 2;//第三方游戏ID -} -message SCEnterThridGame{ - OpResultCode_Game OpRetCode = 1; //结果 - string EnterUrl = 2; - int32 ScreenOrientationType = 3; - int32 ThridGameId = 4;//第三方游戏ID -} - -message CSLeaveThridGame{ -} -message SCLeaveThridGame{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -message CSThridGameList{ -} - -message ThridGameDatas{ - string ThridGameId = 1;//第三方游戏ID - string ThridGameName = 2;//游戏名 -} - -message ThridGamePlatforms{ - int32 ThridPlatformId = 1; - string ThridPlatformName = 2;//平台名 - repeated ThridGameDatas GameDatas = 3; -} - -message SCThridGameList{ - OpResultCode_Game OpRetCode = 1; //结果 - repeated ThridGamePlatforms GamePlatforms = 2; -} - -message CSThridGameBalanceUpdate{ -} -message SCThridGameBalanceUpdate{ - OpResultCode_Game OpRetCode = 1; //结果 - int64 Coin = 2;//玩家的余额 -} -message SCThridGameBalanceUpdateState{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//创建私人房间 -//PACKET_CS_CREATEPRIVATEROOM -message CSCreatePrivateRoom{ - int32 GameFreeId = 1; //游戏id - repeated int32 Params = 2; //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP -} - -//创建私人房间 -//PACKET_SC_CREATEPRIVATEROOM -message SCCreatePrivateRoom{ - //游戏ID - int32 GameFreeId = 1; //游戏id - repeated int32 Params = 2; //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP - int32 RoomId = 3; //房间编号 - OpResultCode_Game OpRetCode = 4; //结果 -} - -//个人创建的房间信息 -message PrivateRoomInfo{ - int32 GameFreeId = 1; //游戏id - int32 RoomId = 2; //房间编号 - int32 CurrRound = 3; //当前第几轮 - int32 MaxRound = 4; //最多多少轮 - int32 CurrNum = 5; //当前人数 - int32 MaxPlayer = 6; //最大人数 - int32 CreateTs = 7; //创建时间戳 -} - -//获取代开的房间列表 -//PACKET_CS_GETPRIVATEROOMLIST -message CSGetPrivateRoomList{ -} - -//PACKET_SC_GETPRIVATEROOMLIST -message SCGetPrivateRoomList{ - repeated PrivateRoomInfo Datas = 1; //房间列表 -} - -//获取代开的房间历史记录 -//PACKET_CS_GETPRIVATEROOMHISTORY -message CSGetPrivateRoomHistory{ - int32 QueryTime = 1; //查询日期 YYYYMMDD -} - -//已开房间历史记录 -message PrivateRoomHistory{ - int32 GameFreeId = 1; //游戏id - int32 RoomId = 2; //房间编号 - int32 CreateTime = 3; //创建时间,时间戳 - int32 DestroyTime = 4; //结束时间,时间戳 - int32 CreateFee = 5; //房费 -} - -//PACKET_SC_GETPRIVATEROOMHISTORY -message SCGetPrivateRoomHistory{ - int32 QueryTime = 1; //查询日期 - repeated PrivateRoomHistory Datas = 2; //历史开房记录 -} - -//PACKET_CS_DESTROYPRIVATEROOM -message CSDestroyPrivateRoom{ - int32 RoomId = 1; -} - -//PACKET_SC_DESTROYPRIVATEROOM -message SCDestroyPrivateRoom{ - int32 RoomId = 1; //房间编号 - OpResultCode_Game OpRetCode = 2; //结果 - int32 State = 3; //状态 0:删除中 1:已删除 -} - -//PACKET_CS_QUERYROOMINFO -message CSQueryRoomInfo{ - repeated int32 GameIds = 1; - int32 GameSite = 2; //1.初级 2.中级 3.高级 - repeated int32 Id = 3; //gamefreeid - int32 SceneMode = 4; // 0公共房 2私人房 -} - -//个人创建的房间信息 -message QRoomInfo{ - int32 GameFreeId = 1; //游戏id - int32 GameId = 2; - int32 RoomId = 3; //房间编号 - int64 BaseCoin = 4; - int64 LimitCoin = 5; - int32 CurrNum = 6; //当前人数 - int32 MaxPlayer = 7; //最大人数 - int32 Creator = 8; - int32 CreateTs = 9; //创建时间戳 - repeated int32 Params = 10; // 建房参数 -} - -//PACKET_SC_QUERYROOMINFO -message SCQueryRoomInfo{ - repeated int32 GameIds = 1; - int32 GameSite = 2; //1.初级 2.中级 3.高级 - repeated QRoomInfo RoomInfo = 3; //房间列表 - OpResultCode_Game OpRetCode = 4; //结果 -} -//注册观察者,用于推送游戏的状态信息 -//PACKET_CS_GAMEOBSERVE -message CSGameObserve{ - int32 GameId = 1; //游戏ID - bool StartOrEnd = 2; //打开或者关闭 -} -//PACKET_SC_GAMESUBLIST -message GameSubRecord { - int32 GameFreeId = 1; - int32 LogCnt = 2; - int32 NewLog = 3; //新结果 - repeated int32 TotleLog = 4; //最近几局的中奖结果 -} -message SCGameSubList { - repeated GameSubRecord List = 1; -} -//游戏中的状态 -message GameState { - int32 GameFreeId = 1; - int64 Ts = 2; - int32 Sec = 3; -} -message SCGameState { - repeated GameState List = 1; -} - -//奖金池数据 -message LotteryData { - int32 GameFreeId = 1; - int64 Value = 2; -} -//奖金池同步 PACKET_SC_LOTTERYSYNC -message SCLotterySync { - repeated LotteryData Datas = 1; -} - -//PACKET_CS_LOTTERYLOG = 2288; -message CSLotteryLog { - int32 GameFreeId = 1; -} - -//奖池中奖记录 -message LotteryLog { - int32 Time = 1; - string NickName = 2; - repeated int32 Card = 3; - int32 Kind = 4; - int32 Coin = 5; -} - -//PACKET_SC_LOTTERYLOG = 2289; -message SCLotteryLog { - int32 GameFreeId = 1; - repeated LotteryLog Logs = 2; -} - -//PACKET_SC_LOTTERYBILL = 2290 -message SCLotteryBill { - int32 GameFreeId = 1; - int32 SnId = 2; - string Name = 3; - int32 Kind = 4; - repeated int32 Card = 5; - int64 Value = 6; -} - -message GameConfig1{ - int32 LogicId = 1; //对应DB_GameFree.xlsx中的id - int64 LimitCoin = 2; //进房下限 - int64 MaxCoinLimit = 3;//入场上限 - int32 BaseScore = 4; //底分 - repeated int64 OtherIntParams = 5; //其他参数 - int32 BetScore = 6; //押注限制 - repeated int32 MaxBetCoin = 7; //多门押注限制 - int32 MatchMode = 8;//0:默认1:队列 - int64 LotteryCoin = 9;//彩金池 - string LotteryCfg = 10;//彩金池配置 - bool Status = 11; //游戏开关 全局开关&&平台开关 - int32 SceneType = 12; // 场次类型 - repeated int32 ChessGradeLimit =13; // 入场象棋积分限制区间 - int32 RankType = 14; // 段位类型 - int32 SceneAdd = 15; // 场次加成 -} -//PACKET_CS_GETGAMECONFIG = 2231 -message CSGetGameConfig { - string Platform = 1; //平台 - string Channel = 2; //渠道号 - int32 GameId = 3; //游戏id -} - -message ChessRankInfo { - int32 Score = 1; // 积分 - string Name = 2; // 段位名称 -} - -//PACKET_SC_GETGAMECONFIG = 2232 -message SCGetGameConfig { - repeated GameConfig1 GameCfg = 1;//指定游戏的配置信息 - int32 GameId = 2; //游戏Id - repeated ChessRankInfo ChessRanks = 3; //段位表 -} - -//PACKET_SC_CHANGEGAMESTATUS == 2233 -message SCChangeGameStatus { - repeated GameConfig1 GameCfg = 1; //全局游戏状态发生变动,且自身平台游戏转台处于开启 -} - -//PACKET_SC_CHANGEENTRYSWITCH -message SCChangeEntrySwitch { - int32 Index = 1; // 游戏id - repeated bool Switch = 2; // 0:游戏入口开关 1:hot开关 2:new开关 -} - //PACKET_CS_ENTERGAME message CSEnterGame { int32 Id = 1; //游戏id @@ -770,6 +214,7 @@ message SCEnterGame { int32 MinResVer = 6; //最低资源版本号 int32 LatestResVer = 7; //最新资源版本号 } + //PACKET_CS_QUITGAME message CSQuitGame { int32 Id = 1; //游戏id @@ -781,19 +226,157 @@ message SCQuitGame { int32 Id = 2; int32 Reason = 3;//原因 } -//PACKET_CS_UPLOADLOC -message CSUploadLoc{ - int32 Longitude = 1; //经度 - int32 Latitude = 2; //纬度 - string City = 3; //城市 例:中国-河南省-郑州市 + +message GameConfig1{ + int32 LogicId = 1; //对应DB_GameFree.xlsx中的id + int64 LimitCoin = 2; //进房下限 + int64 MaxCoinLimit = 3;//入场上限 + int32 BaseScore = 4; //底分 + repeated int64 OtherIntParams = 5; //其他参数 + int32 BetScore = 6; //押注限制 + repeated int32 MaxBetCoin = 7; //多门押注限制 + int32 MatchMode = 8;//0:默认1:队列 + int64 LotteryCoin = 9;//彩金池 + string LotteryCfg = 10;//彩金池配置 + bool Status = 11; //游戏开关 全局开关&&平台开关 + int32 SceneType = 12; // 场次类型 + repeated int32 ChessGradeLimit =13; // 入场象棋积分限制区间 + int32 RankType = 14; // 段位类型 + int32 SceneAdd = 15; // 场次加成 } -//PACKET_SC_UPLOADLOC -message SCUploadLoc{ - int32 Pos = 1; - int32 Longitude = 2; //经度 - int32 Latitude = 3; //纬度 - string City = 4; //城市 例:中国-河南省-郑州市 +//PACKET_CS_GETGAMECONFIG +message CSGetGameConfig { + string Platform = 1; //平台 + string Channel = 2; //渠道号 + int32 GameId = 3; //游戏id +} + +message ChessRankInfo { + int32 Score = 1; // 积分 + string Name = 2; // 段位名称 +} + +//PACKET_SC_GETGAMECONFIG +message SCGetGameConfig { + repeated GameConfig1 GameCfg = 1;//指定游戏的配置信息 + int32 GameId = 2; //游戏Id + repeated ChessRankInfo ChessRanks = 3; //段位表 +} + +//PACKET_SC_CHANGEGAMESTATUS == 2233 +message SCChangeGameStatus { + repeated GameConfig1 GameCfg = 1; //全局游戏状态发生变动,且自身平台游戏转台处于开启 +} + +//PACKET_SC_CHANGEENTRYSWITCH +message SCChangeEntrySwitch { + int32 Index = 1; // 游戏id + repeated bool Switch = 2; // 0:游戏入口开关 1:hot开关 2:new开关 +} + +//创建竞技馆私人房间 +//PACKET_CS_CREATEPRIVATEROOM +message CSCreatePrivateRoom{ + int32 GameFreeId = 1; //游戏id + int32 RoomTypeId = 2; //房间类型id + int32 RoomConfigId = 3; //房间配置id + int32 Round = 4; //局数 + int32 PlayerNum = 5; //人数 + int32 NeedPassword = 6; //是否需要密码 1需要 + int32 CostType = 7; // 房卡支付方式 1AA 2房主 + int32 Voice = 8; //是否开启语音 1开启 +} +//PACKET_SC_CREATEPRIVATEROOM +message SCCreatePrivateRoom{ + OpResultCode_Game OpRetCode = 1; //结果 + int32 GameFreeId = 2; //游戏id + int32 RoomTypeId = 3; //房间类型id + int32 RoomConfigId = 4; //房间配置id + int32 Round = 5; //局数 + int32 PlayerNum = 6; //人数 + int32 NeedPassword = 7; //是否需要密码 1需要 + int32 CostType = 8; //房卡支付方式 1AA 2房主 + int32 Voice = 9; //是否开启语音 1开启 + int32 RoomId = 10; //房间id + string Password = 11; //房间密码 +} + +//PACKET_CS_GETPRIVATEROOMLIST +message CSGetPrivateRoomList{ + int32 RoomConfigId = 1; //房间配置id + int32 GameFreeId = 2; // 场次id + int32 RoomId = 3; // 房间id + int32 RoomTypeId = 4; // 玩法类型id +} + +message PrivatePlayerInfo{ + int32 SnId = 1; // 玩家id + string Name = 2; // 玩家昵称 + int32 UseRoleId = 3;//使用的人物模型id +} + +//个人创建的房间信息 +message PrivateRoomInfo{ + int32 GameFreeId = 1; //场次id + int32 GameId = 2; //游戏id + int32 RoomTypeId = 3; //玩法类型id + int32 RoomConfigId = 4; //房间配置id + int32 RoomId = 5; //房间号 + int32 NeedPassword = 6; //是否需要密码 1是 + int32 CurrRound = 7; //当前第几轮 + int32 MaxRound = 8; //最大轮数 + int32 CurrNum = 9; //当前人数 + int32 MaxPlayer = 10; //最大人数 + int64 CreateTs = 11; //创建时间戳 + int32 State = 12; //房间状态 0等待中 1进行中 2已结束 + repeated PrivatePlayerInfo Players = 13; //玩家列表 +} + +//PACKET_SC_GETPRIVATEROOMLIST +message SCGetPrivateRoomList{ + int32 Tp = 1; // 0所有配置 1更新 2新增 3删除 + repeated PrivateRoomInfo Datas = 2; //房间列表 +} + +//PACKET_CS_QUERYROOMINFO +message CSQueryRoomInfo{ + repeated int32 GameIds = 1; + int32 GameSite = 2; //1.初级 2.中级 3.高级 + repeated int32 Id = 3; //gamefreeid + int32 SceneMode = 4; // 0公共房 2私人房 +} + +//自由桌房间信息 +message QRoomInfo{ + int32 GameFreeId = 1; //游戏id + int32 GameId = 2; + int32 RoomId = 3; //房间编号 + int64 BaseCoin = 4; + int64 LimitCoin = 5; + int32 CurrNum = 6; //当前人数 + int32 MaxPlayer = 7; //最大人数 + int32 Creator = 8; + int32 CreateTs = 9; //创建时间戳 + repeated int32 Params = 10; // 建房参数 +} + +//PACKET_SC_QUERYROOMINFO +message SCQueryRoomInfo{ + repeated int32 GameIds = 1; + int32 GameSite = 2; //1.初级 2.中级 3.高级 + repeated QRoomInfo RoomInfo = 3; //房间列表 + OpResultCode_Game OpRetCode = 4; //结果 +} + +message GameState { + int32 GameFreeId = 1; + int64 Ts = 2; + int32 Sec = 3; +} +//PACKET_SC_GAMESTATE +message SCGameState { + repeated GameState List = 1; } //PACKET_CS_AUDIENCESIT @@ -850,6 +433,46 @@ message SCRecordAndNotice{ // PACKET_SC_NoticeChange message SCNoticeChange{} + +//PACKET_CS_DESTROYROOM +message CSDestroyRoom{ +} +//PACKET_SC_DESTROYROOM +message SCDestroyRoom{ + int32 RoomId = 1; //房间编号 + OpResultCode_Game OpRetCode = 2; //结果 + int32 IsForce = 3; //是否强制销毁 +} + +//PACKET_CS_LEAVEROOM +//PACKET_CS_AUDIENCE_LEAVEROOM +//玩家离开房间,返回大厅 +message CSLeaveRoom{ + int32 Mode = 1; //离开方式 0:退出 1:暂离(占着座位,返回大厅) +} +//PACKET_SC_LEAVEROOM +message SCLeaveRoom{ + OpResultCode_Game OpRetCode = 1; //结果 + int32 Reason = 2;//原因 0:主动退出 1:被踢出 + int32 RoomId = 3;//房间ID + int32 Mode = 4; +} + +//PACKET_CS_FORCESTART +message CSForceStart{ +} +//PACKET_SC_FORCESTART +message SCForceStart{ + OpResultCode_Game OpRetCode = 1; //结果 +} + +//玩家设置标记 +//PACKET_CS_PLAYER_SWITCHFLAG +message CSPlayerSwithFlag{ + int32 Flag = 1; + int32 Mark = 2; //1:设置 0:取消 +} + // PACKET_CSRoomEvent message CSRoomEvent{ int32 Tp = 1; // 事件类型 1普通消息 2互动表情 @@ -863,4 +486,57 @@ message SCRoomEvent{ string Content = 4; // 内容 repeated int32 Param= 5; // 参数 int64 Ts = 6; // 时间戳 +} + +message ItemInfo{ + int32 Id = 1; // id + int32 Num = 2; // 数量 +} + +enum DataType{ + Zero = 0; + PrivateRoomList = 1; // 竞技馆房间列表 返回消息 PACKET_SC_GETPRIVATEROOMLIST +} + +// PACKET_CSTouchType +// 每10秒发送一次,保持更新 +message CSTouchType{ + DataType Tp = 1; // 保持更新类型 + // Tp: Params + // 1: 房间配置id + repeated int32 Params = 3; +} + +message RoomConfigInfo{ + int32 Id = 2; // 配置id + string Name = 3; // 配置名称 + int32 RoomType = 4; // 房间类型id, RoomTypeInfo.Id + int32 On = 5; // 开关 1开启 2关闭 + int32 SortId = 6; // 排序ID + repeated ItemInfo Cost = 7; // 进入房间消耗 + repeated ItemInfo Reward = 8; // 进入房间奖励 + repeated string OnChannelName = 9; // 开启的渠道名称 + repeated int32 GameFreeId = 10; // 场次id + repeated int32 Round = 11; // 局数 + repeated int32 PlayerNum = 12; // 人数 + int32 NeedPassword = 13; // 是否需要密码 1是 2否 3自定义 + int32 CostType = 14; // 消耗类型 1AA 2房主 3自定义 + int32 Voice = 15; // 是否开启语音 1是 2否 3自定义 + string ImageURI = 16; // 奖励图片 +} + +message RoomTypeInfo{ + int32 Id = 1; // id + string Name = 2; // 类型名称 + int32 On = 3; // 开关 1开启 2关闭 + int32 SortId = 4; // 排序ID + repeated RoomConfigInfo List = 5; // 房间配置列表 +} + +// PACKET_CSRoomConfig +message CSRoomConfig{} + +// PACKET_SCRoomConfig 竞技馆房间配置 +message SCRoomConfig{ + repeated RoomTypeInfo List = 1; } \ No newline at end of file diff --git a/protocol/gamehall/gamehall.js b/protocol/gamehall/gamehall.js deleted file mode 100644 index a20c8d6..0000000 --- a/protocol/gamehall/gamehall.js +++ /dev/null @@ -1,46999 +0,0 @@ -/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/ -"use strict"; - -var $protobuf = require("protobufjs/minimal.js"); - -// Common aliases -var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util; - -// Exported root namespace -var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); - -$root.gamehall = (function() { - - /** - * Namespace gamehall. - * @exports gamehall - * @namespace - */ - var gamehall = {}; - - /** - * OpResultCode enum. - * @name gamehall.OpResultCode - * @enum {number} - * @property {number} OPRC_Sucess=0 OPRC_Sucess value - * @property {number} OPRC_Error=1 OPRC_Error value - * @property {number} OPRC_RoomIsFull=1019 OPRC_RoomIsFull value - * @property {number} OPRC_RoomHadClosed=1053 OPRC_RoomHadClosed value - * @property {number} OPRC_SceneServerMaintain=1054 OPRC_SceneServerMaintain value - * @property {number} OPRC_CoinNotEnough=1056 OPRC_CoinNotEnough value - * @property {number} OPRC_CoinTooMore=1058 OPRC_CoinTooMore value - * @property {number} OPRC_CoinSceneYouAreGaming=1059 OPRC_CoinSceneYouAreGaming value - * @property {number} OPRC_NoFindDownTiceRoom=1079 OPRC_NoFindDownTiceRoom value - * @property {number} OPRC_ChangeRoomTooOften=1080 OPRC_ChangeRoomTooOften value - * @property {number} OPRC_NoOtherDownTiceRoom=1081 OPRC_NoOtherDownTiceRoom value - * @property {number} OPRC_OpYield=1082 OPRC_OpYield value - * @property {number} OPRC_RoomGameTimes=1103 OPRC_RoomGameTimes value - * @property {number} OPRC_CoinSceneEnterQueueSucc=1105 OPRC_CoinSceneEnterQueueSucc value - * @property {number} OPRC_CoinSceneEnterQueueFail=1106 OPRC_CoinSceneEnterQueueFail value - * @property {number} OPRC_CoinSceneEnterQueueOverTime=1107 OPRC_CoinSceneEnterQueueOverTime value - * @property {number} OPRC_MustBindPromoter=1113 OPRC_MustBindPromoter value - * @property {number} OPRC_YourAreGamingCannotLeave=1078 OPRC_YourAreGamingCannotLeave value - */ - gamehall.OpResultCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess"] = 0; - values[valuesById[1] = "OPRC_Error"] = 1; - values[valuesById[1019] = "OPRC_RoomIsFull"] = 1019; - values[valuesById[1053] = "OPRC_RoomHadClosed"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain"] = 1054; - values[valuesById[1056] = "OPRC_CoinNotEnough"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore"] = 1058; - values[valuesById[1059] = "OPRC_CoinSceneYouAreGaming"] = 1059; - values[valuesById[1079] = "OPRC_NoFindDownTiceRoom"] = 1079; - values[valuesById[1080] = "OPRC_ChangeRoomTooOften"] = 1080; - values[valuesById[1081] = "OPRC_NoOtherDownTiceRoom"] = 1081; - values[valuesById[1082] = "OPRC_OpYield"] = 1082; - values[valuesById[1103] = "OPRC_RoomGameTimes"] = 1103; - values[valuesById[1105] = "OPRC_CoinSceneEnterQueueSucc"] = 1105; - values[valuesById[1106] = "OPRC_CoinSceneEnterQueueFail"] = 1106; - values[valuesById[1107] = "OPRC_CoinSceneEnterQueueOverTime"] = 1107; - values[valuesById[1113] = "OPRC_MustBindPromoter"] = 1113; - values[valuesById[1078] = "OPRC_YourAreGamingCannotLeave"] = 1078; - return values; - })(); - - /** - * CoinSceneGamePacketID enum. - * @name gamehall.CoinSceneGamePacketID - * @enum {number} - * @property {number} PACKET_CoinSceneGame_ZERO=0 PACKET_CoinSceneGame_ZERO value - * @property {number} PACKET_CS_COINSCENE_GETPLAYERNUM=2320 PACKET_CS_COINSCENE_GETPLAYERNUM value - * @property {number} PACKET_SC_COINSCENE_GETPLAYERNUM=2321 PACKET_SC_COINSCENE_GETPLAYERNUM value - * @property {number} PACKET_CS_COINSCENE_OP=2322 PACKET_CS_COINSCENE_OP value - * @property {number} PACKET_SC_COINSCENE_OP=2323 PACKET_SC_COINSCENE_OP value - * @property {number} PACKET_CS_COINSCENE_LISTROOM=2324 PACKET_CS_COINSCENE_LISTROOM value - * @property {number} PACKET_SC_COINSCENE_LISTROOM=2325 PACKET_SC_COINSCENE_LISTROOM value - * @property {number} PACKET_SC_COINSCENE_QUEUESTATE=2326 PACKET_SC_COINSCENE_QUEUESTATE value - */ - gamehall.CoinSceneGamePacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_CoinSceneGame_ZERO"] = 0; - values[valuesById[2320] = "PACKET_CS_COINSCENE_GETPLAYERNUM"] = 2320; - values[valuesById[2321] = "PACKET_SC_COINSCENE_GETPLAYERNUM"] = 2321; - values[valuesById[2322] = "PACKET_CS_COINSCENE_OP"] = 2322; - values[valuesById[2323] = "PACKET_SC_COINSCENE_OP"] = 2323; - values[valuesById[2324] = "PACKET_CS_COINSCENE_LISTROOM"] = 2324; - values[valuesById[2325] = "PACKET_SC_COINSCENE_LISTROOM"] = 2325; - values[valuesById[2326] = "PACKET_SC_COINSCENE_QUEUESTATE"] = 2326; - return values; - })(); - - gamehall.CSCoinSceneGetPlayerNum = (function() { - - /** - * Properties of a CSCoinSceneGetPlayerNum. - * @memberof gamehall - * @interface ICSCoinSceneGetPlayerNum - * @property {number|null} [GameId] CSCoinSceneGetPlayerNum GameId - * @property {number|null} [GameModel] CSCoinSceneGetPlayerNum GameModel - */ - - /** - * Constructs a new CSCoinSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneGetPlayerNum. - * @implements ICSCoinSceneGetPlayerNum - * @constructor - * @param {gamehall.ICSCoinSceneGetPlayerNum=} [properties] Properties to set - */ - function CSCoinSceneGetPlayerNum(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneGetPlayerNum GameId. - * @member {number} GameId - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - */ - CSCoinSceneGetPlayerNum.prototype.GameId = 0; - - /** - * CSCoinSceneGetPlayerNum GameModel. - * @member {number} GameModel - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - */ - CSCoinSceneGetPlayerNum.prototype.GameModel = 0; - - /** - * Creates a new CSCoinSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum instance - */ - CSCoinSceneGetPlayerNum.create = function create(properties) { - return new CSCoinSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified CSCoinSceneGetPlayerNum message. Does not implicitly {@link gamehall.CSCoinSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameModel != null && Object.hasOwnProperty.call(message, "GameModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameModel); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - if (!$util.isInteger(message.GameModel)) - return "GameModel: integer expected"; - return null; - }; - - /** - * Creates a CSCoinSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - */ - CSCoinSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneGetPlayerNum) - return object; - var message = new $root.gamehall.CSCoinSceneGetPlayerNum(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameModel != null) - message.GameModel = object.GameModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.CSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - object.GameModel = message.GameModel; - return object; - }; - - /** - * Converts this CSCoinSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneGetPlayerNum"; - }; - - return CSCoinSceneGetPlayerNum; - })(); - - gamehall.SCCoinSceneGetPlayerNum = (function() { - - /** - * Properties of a SCCoinSceneGetPlayerNum. - * @memberof gamehall - * @interface ISCCoinSceneGetPlayerNum - * @property {Array.|null} [Nums] SCCoinSceneGetPlayerNum Nums - */ - - /** - * Constructs a new SCCoinSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneGetPlayerNum. - * @implements ISCCoinSceneGetPlayerNum - * @constructor - * @param {gamehall.ISCCoinSceneGetPlayerNum=} [properties] Properties to set - */ - function SCCoinSceneGetPlayerNum(properties) { - this.Nums = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneGetPlayerNum Nums. - * @member {Array.} Nums - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @instance - */ - SCCoinSceneGetPlayerNum.prototype.Nums = $util.emptyArray; - - /** - * Creates a new SCCoinSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum instance - */ - SCCoinSceneGetPlayerNum.create = function create(properties) { - return new SCCoinSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified SCCoinSceneGetPlayerNum message. Does not implicitly {@link gamehall.SCCoinSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Nums != null && message.Nums.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.Nums.length; ++i) - writer.int32(message.Nums[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Nums && message.Nums.length)) - message.Nums = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Nums.push(reader.int32()); - } else - message.Nums.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Nums != null && message.hasOwnProperty("Nums")) { - if (!Array.isArray(message.Nums)) - return "Nums: array expected"; - for (var i = 0; i < message.Nums.length; ++i) - if (!$util.isInteger(message.Nums[i])) - return "Nums: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - */ - SCCoinSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneGetPlayerNum) - return object; - var message = new $root.gamehall.SCCoinSceneGetPlayerNum(); - if (object.Nums) { - if (!Array.isArray(object.Nums)) - throw TypeError(".gamehall.SCCoinSceneGetPlayerNum.Nums: array expected"); - message.Nums = []; - for (var i = 0; i < object.Nums.length; ++i) - message.Nums[i] = object.Nums[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.SCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Nums = []; - if (message.Nums && message.Nums.length) { - object.Nums = []; - for (var j = 0; j < message.Nums.length; ++j) - object.Nums[j] = message.Nums[j]; - } - return object; - }; - - /** - * Converts this SCCoinSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneGetPlayerNum"; - }; - - return SCCoinSceneGetPlayerNum; - })(); - - gamehall.CSCoinSceneOp = (function() { - - /** - * Properties of a CSCoinSceneOp. - * @memberof gamehall - * @interface ICSCoinSceneOp - * @property {number|null} [Id] CSCoinSceneOp Id - * @property {number|null} [OpType] CSCoinSceneOp OpType - * @property {Array.|null} [OpParams] CSCoinSceneOp OpParams - * @property {string|null} [Platform] CSCoinSceneOp Platform - */ - - /** - * Constructs a new CSCoinSceneOp. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneOp. - * @implements ICSCoinSceneOp - * @constructor - * @param {gamehall.ICSCoinSceneOp=} [properties] Properties to set - */ - function CSCoinSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneOp Id. - * @member {number} Id - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.Id = 0; - - /** - * CSCoinSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.OpType = 0; - - /** - * CSCoinSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * CSCoinSceneOp Platform. - * @member {string} Platform - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.Platform = ""; - - /** - * Creates a new CSCoinSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp instance - */ - CSCoinSceneOp.create = function create(properties) { - return new CSCoinSceneOp(properties); - }; - - /** - * Encodes the specified CSCoinSceneOp message. Does not implicitly {@link gamehall.CSCoinSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp} message CSCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Platform); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneOp message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp} message CSCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpType = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.Platform = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneOp message. - * @function verify - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - return null; - }; - - /** - * Creates a CSCoinSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - */ - CSCoinSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneOp) - return object; - var message = new $root.gamehall.CSCoinSceneOp(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSCoinSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.Platform != null) - message.Platform = String(object.Platform); - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.CSCoinSceneOp} message CSCoinSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.OpType = 0; - object.Platform = ""; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - return object; - }; - - /** - * Converts this CSCoinSceneOp to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneOp - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneOp - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneOp"; - }; - - return CSCoinSceneOp; - })(); - - gamehall.SCCoinSceneOp = (function() { - - /** - * Properties of a SCCoinSceneOp. - * @memberof gamehall - * @interface ISCCoinSceneOp - * @property {gamehall.OpResultCode|null} [OpCode] SCCoinSceneOp OpCode - * @property {number|null} [Id] SCCoinSceneOp Id - * @property {number|null} [OpType] SCCoinSceneOp OpType - * @property {Array.|null} [OpParams] SCCoinSceneOp OpParams - */ - - /** - * Constructs a new SCCoinSceneOp. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneOp. - * @implements ISCCoinSceneOp - * @constructor - * @param {gamehall.ISCCoinSceneOp=} [properties] Properties to set - */ - function SCCoinSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneOp OpCode. - * @member {gamehall.OpResultCode} OpCode - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpCode = 0; - - /** - * SCCoinSceneOp Id. - * @member {number} Id - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.Id = 0; - - /** - * SCCoinSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpType = 0; - - /** - * SCCoinSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * Creates a new SCCoinSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp instance - */ - SCCoinSceneOp.create = function create(properties) { - return new SCCoinSceneOp(properties); - }; - - /** - * Encodes the specified SCCoinSceneOp message. Does not implicitly {@link gamehall.SCCoinSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp} message SCCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinSceneOp message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp} message SCCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.OpType = reader.int32(); - break; - } - case 4: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneOp message. - * @function verify - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1019: - case 1053: - case 1054: - case 1056: - case 1058: - case 1059: - case 1079: - case 1080: - case 1081: - case 1082: - case 1103: - case 1105: - case 1106: - case 1107: - case 1113: - case 1078: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - */ - SCCoinSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneOp) - return object; - var message = new $root.gamehall.SCCoinSceneOp(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomIsFull": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadClosed": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_CoinNotEnough": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_CoinSceneYouAreGaming": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_NoFindDownTiceRoom": - case 1079: - message.OpCode = 1079; - break; - case "OPRC_ChangeRoomTooOften": - case 1080: - message.OpCode = 1080; - break; - case "OPRC_NoOtherDownTiceRoom": - case 1081: - message.OpCode = 1081; - break; - case "OPRC_OpYield": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_RoomGameTimes": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_CoinSceneEnterQueueSucc": - case 1105: - message.OpCode = 1105; - break; - case "OPRC_CoinSceneEnterQueueFail": - case 1106: - message.OpCode = 1106; - break; - case "OPRC_CoinSceneEnterQueueOverTime": - case 1107: - message.OpCode = 1107; - break; - case "OPRC_MustBindPromoter": - case 1113: - message.OpCode = 1113; - break; - case "OPRC_YourAreGamingCannotLeave": - case 1078: - message.OpCode = 1078; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCCoinSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.SCCoinSceneOp} message SCCoinSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess" : 0; - object.Id = 0; - object.OpType = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - return object; - }; - - /** - * Converts this SCCoinSceneOp to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneOp - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneOp - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneOp"; - }; - - return SCCoinSceneOp; - })(); - - gamehall.CSCoinSceneListRoom = (function() { - - /** - * Properties of a CSCoinSceneListRoom. - * @memberof gamehall - * @interface ICSCoinSceneListRoom - * @property {number|null} [Id] CSCoinSceneListRoom Id - */ - - /** - * Constructs a new CSCoinSceneListRoom. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneListRoom. - * @implements ICSCoinSceneListRoom - * @constructor - * @param {gamehall.ICSCoinSceneListRoom=} [properties] Properties to set - */ - function CSCoinSceneListRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneListRoom Id. - * @member {number} Id - * @memberof gamehall.CSCoinSceneListRoom - * @instance - */ - CSCoinSceneListRoom.prototype.Id = 0; - - /** - * Creates a new CSCoinSceneListRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom instance - */ - CSCoinSceneListRoom.create = function create(properties) { - return new CSCoinSceneListRoom(properties); - }; - - /** - * Encodes the specified CSCoinSceneListRoom message. Does not implicitly {@link gamehall.CSCoinSceneListRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom} message CSCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneListRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneListRoom message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneListRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom} message CSCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneListRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneListRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneListRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneListRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneListRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneListRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneListRoom message. - * @function verify - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneListRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - return null; - }; - - /** - * Creates a CSCoinSceneListRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - */ - CSCoinSceneListRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneListRoom) - return object; - var message = new $root.gamehall.CSCoinSceneListRoom(); - if (object.Id != null) - message.Id = object.Id | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneListRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.CSCoinSceneListRoom} message CSCoinSceneListRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneListRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.Id = 0; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - return object; - }; - - /** - * Converts this CSCoinSceneListRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneListRoom - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneListRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneListRoom - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneListRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneListRoom"; - }; - - return CSCoinSceneListRoom; - })(); - - gamehall.CoinSceneInfo = (function() { - - /** - * Properties of a CoinSceneInfo. - * @memberof gamehall - * @interface ICoinSceneInfo - * @property {number|null} [SceneId] CoinSceneInfo SceneId - * @property {number|null} [PlayerNum] CoinSceneInfo PlayerNum - */ - - /** - * Constructs a new CoinSceneInfo. - * @memberof gamehall - * @classdesc Represents a CoinSceneInfo. - * @implements ICoinSceneInfo - * @constructor - * @param {gamehall.ICoinSceneInfo=} [properties] Properties to set - */ - function CoinSceneInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CoinSceneInfo SceneId. - * @member {number} SceneId - * @memberof gamehall.CoinSceneInfo - * @instance - */ - CoinSceneInfo.prototype.SceneId = 0; - - /** - * CoinSceneInfo PlayerNum. - * @member {number} PlayerNum - * @memberof gamehall.CoinSceneInfo - * @instance - */ - CoinSceneInfo.prototype.PlayerNum = 0; - - /** - * Creates a new CoinSceneInfo instance using the specified properties. - * @function create - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo=} [properties] Properties to set - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo instance - */ - CoinSceneInfo.create = function create(properties) { - return new CoinSceneInfo(properties); - }; - - /** - * Encodes the specified CoinSceneInfo message. Does not implicitly {@link gamehall.CoinSceneInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo} message CoinSceneInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinSceneInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SceneId != null && Object.hasOwnProperty.call(message, "SceneId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SceneId); - if (message.PlayerNum != null && Object.hasOwnProperty.call(message, "PlayerNum")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PlayerNum); - return writer; - }; - - /** - * Encodes the specified CoinSceneInfo message, length delimited. Does not implicitly {@link gamehall.CoinSceneInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo} message CoinSceneInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinSceneInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CoinSceneInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CoinSceneInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinSceneInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CoinSceneInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SceneId = reader.int32(); - break; - } - case 2: { - message.PlayerNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CoinSceneInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CoinSceneInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinSceneInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CoinSceneInfo message. - * @function verify - * @memberof gamehall.CoinSceneInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CoinSceneInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SceneId != null && message.hasOwnProperty("SceneId")) - if (!$util.isInteger(message.SceneId)) - return "SceneId: integer expected"; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - if (!$util.isInteger(message.PlayerNum)) - return "PlayerNum: integer expected"; - return null; - }; - - /** - * Creates a CoinSceneInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CoinSceneInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - */ - CoinSceneInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CoinSceneInfo) - return object; - var message = new $root.gamehall.CoinSceneInfo(); - if (object.SceneId != null) - message.SceneId = object.SceneId | 0; - if (object.PlayerNum != null) - message.PlayerNum = object.PlayerNum | 0; - return message; - }; - - /** - * Creates a plain object from a CoinSceneInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.CoinSceneInfo} message CoinSceneInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CoinSceneInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SceneId = 0; - object.PlayerNum = 0; - } - if (message.SceneId != null && message.hasOwnProperty("SceneId")) - object.SceneId = message.SceneId; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - object.PlayerNum = message.PlayerNum; - return object; - }; - - /** - * Converts this CoinSceneInfo to JSON. - * @function toJSON - * @memberof gamehall.CoinSceneInfo - * @instance - * @returns {Object.} JSON object - */ - CoinSceneInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CoinSceneInfo - * @function getTypeUrl - * @memberof gamehall.CoinSceneInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CoinSceneInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CoinSceneInfo"; - }; - - return CoinSceneInfo; - })(); - - gamehall.SCCoinSceneListRoom = (function() { - - /** - * Properties of a SCCoinSceneListRoom. - * @memberof gamehall - * @interface ISCCoinSceneListRoom - * @property {number|null} [Id] SCCoinSceneListRoom Id - * @property {number|null} [LimitCoin] SCCoinSceneListRoom LimitCoin - * @property {number|null} [MaxCoinLimit] SCCoinSceneListRoom MaxCoinLimit - * @property {number|null} [BaseScore] SCCoinSceneListRoom BaseScore - * @property {number|null} [MaxScore] SCCoinSceneListRoom MaxScore - * @property {number|null} [MaxPlayerNum] SCCoinSceneListRoom MaxPlayerNum - * @property {Array.|null} [OtherIntParams] SCCoinSceneListRoom OtherIntParams - * @property {Array.|null} [Datas] SCCoinSceneListRoom Datas - */ - - /** - * Constructs a new SCCoinSceneListRoom. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneListRoom. - * @implements ISCCoinSceneListRoom - * @constructor - * @param {gamehall.ISCCoinSceneListRoom=} [properties] Properties to set - */ - function SCCoinSceneListRoom(properties) { - this.OtherIntParams = []; - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneListRoom Id. - * @member {number} Id - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.Id = 0; - - /** - * SCCoinSceneListRoom LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.LimitCoin = 0; - - /** - * SCCoinSceneListRoom MaxCoinLimit. - * @member {number} MaxCoinLimit - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxCoinLimit = 0; - - /** - * SCCoinSceneListRoom BaseScore. - * @member {number} BaseScore - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.BaseScore = 0; - - /** - * SCCoinSceneListRoom MaxScore. - * @member {number} MaxScore - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxScore = 0; - - /** - * SCCoinSceneListRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxPlayerNum = 0; - - /** - * SCCoinSceneListRoom OtherIntParams. - * @member {Array.} OtherIntParams - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.OtherIntParams = $util.emptyArray; - - /** - * SCCoinSceneListRoom Datas. - * @member {Array.} Datas - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCCoinSceneListRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom instance - */ - SCCoinSceneListRoom.create = function create(properties) { - return new SCCoinSceneListRoom(properties); - }; - - /** - * Encodes the specified SCCoinSceneListRoom message. Does not implicitly {@link gamehall.SCCoinSceneListRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom} message SCCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneListRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LimitCoin); - if (message.MaxCoinLimit != null && Object.hasOwnProperty.call(message, "MaxCoinLimit")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.MaxCoinLimit); - if (message.BaseScore != null && Object.hasOwnProperty.call(message, "BaseScore")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseScore); - if (message.MaxScore != null && Object.hasOwnProperty.call(message, "MaxScore")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MaxScore); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxPlayerNum); - if (message.OtherIntParams != null && message.OtherIntParams.length) { - writer.uint32(/* id 7, wireType 2 =*/58).fork(); - for (var i = 0; i < message.OtherIntParams.length; ++i) - writer.int32(message.OtherIntParams[i]); - writer.ldelim(); - } - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.CoinSceneInfo.encode(message.Datas[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCCoinSceneListRoom message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneListRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom} message SCCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneListRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneListRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneListRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneListRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.LimitCoin = reader.int32(); - break; - } - case 3: { - message.MaxCoinLimit = reader.int32(); - break; - } - case 4: { - message.BaseScore = reader.int32(); - break; - } - case 5: { - message.MaxScore = reader.int32(); - break; - } - case 6: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 7: { - if (!(message.OtherIntParams && message.OtherIntParams.length)) - message.OtherIntParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherIntParams.push(reader.int32()); - } else - message.OtherIntParams.push(reader.int32()); - break; - } - case 8: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.CoinSceneInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneListRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneListRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneListRoom message. - * @function verify - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneListRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - if (!$util.isInteger(message.MaxCoinLimit)) - return "MaxCoinLimit: integer expected"; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - if (!$util.isInteger(message.BaseScore)) - return "BaseScore: integer expected"; - if (message.MaxScore != null && message.hasOwnProperty("MaxScore")) - if (!$util.isInteger(message.MaxScore)) - return "MaxScore: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.OtherIntParams != null && message.hasOwnProperty("OtherIntParams")) { - if (!Array.isArray(message.OtherIntParams)) - return "OtherIntParams: array expected"; - for (var i = 0; i < message.OtherIntParams.length; ++i) - if (!$util.isInteger(message.OtherIntParams[i])) - return "OtherIntParams: integer[] expected"; - } - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.CoinSceneInfo.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCCoinSceneListRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - */ - SCCoinSceneListRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneListRoom) - return object; - var message = new $root.gamehall.SCCoinSceneListRoom(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.MaxCoinLimit != null) - message.MaxCoinLimit = object.MaxCoinLimit | 0; - if (object.BaseScore != null) - message.BaseScore = object.BaseScore | 0; - if (object.MaxScore != null) - message.MaxScore = object.MaxScore | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.OtherIntParams) { - if (!Array.isArray(object.OtherIntParams)) - throw TypeError(".gamehall.SCCoinSceneListRoom.OtherIntParams: array expected"); - message.OtherIntParams = []; - for (var i = 0; i < object.OtherIntParams.length; ++i) - message.OtherIntParams[i] = object.OtherIntParams[i] | 0; - } - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCCoinSceneListRoom.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCCoinSceneListRoom.Datas: object expected"); - message.Datas[i] = $root.gamehall.CoinSceneInfo.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneListRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.SCCoinSceneListRoom} message SCCoinSceneListRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneListRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.OtherIntParams = []; - object.Datas = []; - } - if (options.defaults) { - object.Id = 0; - object.LimitCoin = 0; - object.MaxCoinLimit = 0; - object.BaseScore = 0; - object.MaxScore = 0; - object.MaxPlayerNum = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - object.MaxCoinLimit = message.MaxCoinLimit; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - object.BaseScore = message.BaseScore; - if (message.MaxScore != null && message.hasOwnProperty("MaxScore")) - object.MaxScore = message.MaxScore; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.OtherIntParams && message.OtherIntParams.length) { - object.OtherIntParams = []; - for (var j = 0; j < message.OtherIntParams.length; ++j) - object.OtherIntParams[j] = message.OtherIntParams[j]; - } - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.CoinSceneInfo.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCCoinSceneListRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneListRoom - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneListRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneListRoom - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneListRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneListRoom"; - }; - - return SCCoinSceneListRoom; - })(); - - gamehall.SCCoinSceneQueueState = (function() { - - /** - * Properties of a SCCoinSceneQueueState. - * @memberof gamehall - * @interface ISCCoinSceneQueueState - * @property {number|null} [GameFreeId] SCCoinSceneQueueState GameFreeId - * @property {number|null} [Count] SCCoinSceneQueueState Count - * @property {number|Long|null} [Ts] SCCoinSceneQueueState Ts - */ - - /** - * Constructs a new SCCoinSceneQueueState. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneQueueState. - * @implements ISCCoinSceneQueueState - * @constructor - * @param {gamehall.ISCCoinSceneQueueState=} [properties] Properties to set - */ - function SCCoinSceneQueueState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneQueueState GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.GameFreeId = 0; - - /** - * SCCoinSceneQueueState Count. - * @member {number} Count - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.Count = 0; - - /** - * SCCoinSceneQueueState Ts. - * @member {number|Long} Ts - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCCoinSceneQueueState instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState instance - */ - SCCoinSceneQueueState.create = function create(properties) { - return new SCCoinSceneQueueState(properties); - }; - - /** - * Encodes the specified SCCoinSceneQueueState message. Does not implicitly {@link gamehall.SCCoinSceneQueueState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState} message SCCoinSceneQueueState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneQueueState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Count != null && Object.hasOwnProperty.call(message, "Count")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Count); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Ts); - return writer; - }; - - /** - * Encodes the specified SCCoinSceneQueueState message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneQueueState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState} message SCCoinSceneQueueState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneQueueState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneQueueState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneQueueState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneQueueState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Count = reader.int32(); - break; - } - case 3: { - message.Ts = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneQueueState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneQueueState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneQueueState message. - * @function verify - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneQueueState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Count != null && message.hasOwnProperty("Count")) - if (!$util.isInteger(message.Count)) - return "Count: integer expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - return null; - }; - - /** - * Creates a SCCoinSceneQueueState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - */ - SCCoinSceneQueueState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneQueueState) - return object; - var message = new $root.gamehall.SCCoinSceneQueueState(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Count != null) - message.Count = object.Count | 0; - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneQueueState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.SCCoinSceneQueueState} message SCCoinSceneQueueState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneQueueState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.Count = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Count != null && message.hasOwnProperty("Count")) - object.Count = message.Count; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - return object; - }; - - /** - * Converts this SCCoinSceneQueueState to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneQueueState - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneQueueState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneQueueState - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneQueueState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneQueueState"; - }; - - return SCCoinSceneQueueState; - })(); - - /** - * OpResultCode_Game enum. - * @name gamehall.OpResultCode_Game - * @enum {number} - * @property {number} OPRC_Sucess_Game=0 OPRC_Sucess_Game value - * @property {number} OPRC_Error_Game=1 OPRC_Error_Game value - * @property {number} OPRC_RoomNotExist_Game=1016 OPRC_RoomNotExist_Game value - * @property {number} OPRC_GameNotExist_Game=1017 OPRC_GameNotExist_Game value - * @property {number} OPRC_GameHadClosed=1018 OPRC_GameHadClosed value - * @property {number} OPRC_RoomIsFull_Game=1019 OPRC_RoomIsFull_Game value - * @property {number} OPRC_RoomHadExist_Game=1020 OPRC_RoomHadExist_Game value - * @property {number} OPRC_GameStarting_Game=1022 OPRC_GameStarting_Game value - * @property {number} OPRC_CannotWatchReasonInOther_Game=1024 OPRC_CannotWatchReasonInOther_Game value - * @property {number} OPRC_MoneyNotEnough_Game=1040 OPRC_MoneyNotEnough_Game value - * @property {number} OPRC_CannotWatchReasonRoomNotStart_Game=1042 OPRC_CannotWatchReasonRoomNotStart_Game value - * @property {number} OPRC_OnlyAllowClubMemberEnter_Game=1043 OPRC_OnlyAllowClubMemberEnter_Game value - * @property {number} OPRC_YourResVerIsLow_Game=1044 OPRC_YourResVerIsLow_Game value - * @property {number} OPRC_YourAppVerIsLow_Game=1045 OPRC_YourAppVerIsLow_Game value - * @property {number} OPRC_ScenePosFull_Game=1048 OPRC_ScenePosFull_Game value - * @property {number} OPRC_SceneEnterForWatcher_Game=1050 OPRC_SceneEnterForWatcher_Game value - * @property {number} OPRC_RoomHadClosed_Game=1053 OPRC_RoomHadClosed_Game value - * @property {number} OPRC_SceneServerMaintain_Game=1054 OPRC_SceneServerMaintain_Game value - * @property {number} OPRC_SameIpForbid_Game=1055 OPRC_SameIpForbid_Game value - * @property {number} OPRC_CoinNotEnough_Game=1056 OPRC_CoinNotEnough_Game value - * @property {number} OPRC_CoinTooMore_Game=1058 OPRC_CoinTooMore_Game value - * @property {number} OPRC_InOtherGameIng_Game=1059 OPRC_InOtherGameIng_Game value - * @property {number} OPRC_OpYield_Game=1082 OPRC_OpYield_Game value - * @property {number} OPRC_AllocRoomIdFailed_Game=1097 OPRC_AllocRoomIdFailed_Game value - * @property {number} OPRC_PrivateRoomCountLimit_Game=1098 OPRC_PrivateRoomCountLimit_Game value - * @property {number} OPRC_LowerRice_ScenceMax_Game=1075 OPRC_LowerRice_ScenceMax_Game value - * @property {number} OPRC_LowerRice_PlayerMax_Game=1076 OPRC_LowerRice_PlayerMax_Game value - * @property {number} OPRC_LowerRice_PlayerDownMax_Game=1077 OPRC_LowerRice_PlayerDownMax_Game value - * @property {number} OPRC_YourAreGamingCannotLeave_Game=1078 OPRC_YourAreGamingCannotLeave_Game value - * @property {number} OPRC_ThirdPltProcessing_Game=1096 OPRC_ThirdPltProcessing_Game value - * @property {number} OPRC_RoomGameTimes_Game=1103 OPRC_RoomGameTimes_Game value - * @property {number} OPRC_MustBindPromoter_Game=1113 OPRC_MustBindPromoter_Game value - * @property {number} Oprc_Club_ClubIsClose_Game=5023 Oprc_Club_ClubIsClose_Game value - * @property {number} OPRC_Dg_RegistErr_Game=9000 OPRC_Dg_RegistErr_Game value - * @property {number} OPRC_Dg_LoginErr_Game=9001 OPRC_Dg_LoginErr_Game value - * @property {number} OPRC_Dg_PlatErr_Game=9002 OPRC_Dg_PlatErr_Game value - * @property {number} OPRC_Dg_QuotaNotEnough_Game=9003 OPRC_Dg_QuotaNotEnough_Game value - * @property {number} OPRC_Thr_GameClose_Game=9010 OPRC_Thr_GameClose_Game value - */ - gamehall.OpResultCode_Game = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Game"] = 0; - values[valuesById[1] = "OPRC_Error_Game"] = 1; - values[valuesById[1016] = "OPRC_RoomNotExist_Game"] = 1016; - values[valuesById[1017] = "OPRC_GameNotExist_Game"] = 1017; - values[valuesById[1018] = "OPRC_GameHadClosed"] = 1018; - values[valuesById[1019] = "OPRC_RoomIsFull_Game"] = 1019; - values[valuesById[1020] = "OPRC_RoomHadExist_Game"] = 1020; - values[valuesById[1022] = "OPRC_GameStarting_Game"] = 1022; - values[valuesById[1024] = "OPRC_CannotWatchReasonInOther_Game"] = 1024; - values[valuesById[1040] = "OPRC_MoneyNotEnough_Game"] = 1040; - values[valuesById[1042] = "OPRC_CannotWatchReasonRoomNotStart_Game"] = 1042; - values[valuesById[1043] = "OPRC_OnlyAllowClubMemberEnter_Game"] = 1043; - values[valuesById[1044] = "OPRC_YourResVerIsLow_Game"] = 1044; - values[valuesById[1045] = "OPRC_YourAppVerIsLow_Game"] = 1045; - values[valuesById[1048] = "OPRC_ScenePosFull_Game"] = 1048; - values[valuesById[1050] = "OPRC_SceneEnterForWatcher_Game"] = 1050; - values[valuesById[1053] = "OPRC_RoomHadClosed_Game"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain_Game"] = 1054; - values[valuesById[1055] = "OPRC_SameIpForbid_Game"] = 1055; - values[valuesById[1056] = "OPRC_CoinNotEnough_Game"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore_Game"] = 1058; - values[valuesById[1059] = "OPRC_InOtherGameIng_Game"] = 1059; - values[valuesById[1082] = "OPRC_OpYield_Game"] = 1082; - values[valuesById[1097] = "OPRC_AllocRoomIdFailed_Game"] = 1097; - values[valuesById[1098] = "OPRC_PrivateRoomCountLimit_Game"] = 1098; - values[valuesById[1075] = "OPRC_LowerRice_ScenceMax_Game"] = 1075; - values[valuesById[1076] = "OPRC_LowerRice_PlayerMax_Game"] = 1076; - values[valuesById[1077] = "OPRC_LowerRice_PlayerDownMax_Game"] = 1077; - values[valuesById[1078] = "OPRC_YourAreGamingCannotLeave_Game"] = 1078; - values[valuesById[1096] = "OPRC_ThirdPltProcessing_Game"] = 1096; - values[valuesById[1103] = "OPRC_RoomGameTimes_Game"] = 1103; - values[valuesById[1113] = "OPRC_MustBindPromoter_Game"] = 1113; - values[valuesById[5023] = "Oprc_Club_ClubIsClose_Game"] = 5023; - values[valuesById[9000] = "OPRC_Dg_RegistErr_Game"] = 9000; - values[valuesById[9001] = "OPRC_Dg_LoginErr_Game"] = 9001; - values[valuesById[9002] = "OPRC_Dg_PlatErr_Game"] = 9002; - values[valuesById[9003] = "OPRC_Dg_QuotaNotEnough_Game"] = 9003; - values[valuesById[9010] = "OPRC_Thr_GameClose_Game"] = 9010; - return values; - })(); - - /** - * GameHallPacketID enum. - * @name gamehall.GameHallPacketID - * @enum {number} - * @property {number} PACKET_GameHall_ZERO=0 PACKET_GameHall_ZERO value - * @property {number} PACKET_CS_JOINGAME=2200 PACKET_CS_JOINGAME value - * @property {number} PACKET_SC_JOINGAME=2201 PACKET_SC_JOINGAME value - * @property {number} PACKET_CS_CREATEROOM=2202 PACKET_CS_CREATEROOM value - * @property {number} PACKET_SC_CREATEROOM=2203 PACKET_SC_CREATEROOM value - * @property {number} PACKET_CS_ENTERROOM=2204 PACKET_CS_ENTERROOM value - * @property {number} PACKET_SC_ENTERROOM=2205 PACKET_SC_ENTERROOM value - * @property {number} PACKET_CS_RETURNROOM=2206 PACKET_CS_RETURNROOM value - * @property {number} PACKET_SC_RETURNROOM=2207 PACKET_SC_RETURNROOM value - * @property {number} PACKET_CS_AUDIENCE_ENTERROOM=2208 PACKET_CS_AUDIENCE_ENTERROOM value - * @property {number} PACKET_CS_ENTERGAME=2209 PACKET_CS_ENTERGAME value - * @property {number} PACKET_SC_ENTERGAME=2210 PACKET_SC_ENTERGAME value - * @property {number} PACKET_CS_QUITGAME=2211 PACKET_CS_QUITGAME value - * @property {number} PACKET_SC_QUITGAME=2212 PACKET_SC_QUITGAME value - * @property {number} PACKET_SC_CARDGAINWAY=2213 PACKET_SC_CARDGAINWAY value - * @property {number} PACKET_CS_TASKLIST=2214 PACKET_CS_TASKLIST value - * @property {number} PACKET_SC_TASKLIST=2215 PACKET_SC_TASKLIST value - * @property {number} PACKET_SC_TASKCHG=2216 PACKET_SC_TASKCHG value - * @property {number} PACKET_SC_TACKCOMPLETE=2217 PACKET_SC_TACKCOMPLETE value - * @property {number} PACKET_SC_TASKDEL=2218 PACKET_SC_TASKDEL value - * @property {number} PACKET_CS_TACKDRAWPRIZE=2219 PACKET_CS_TACKDRAWPRIZE value - * @property {number} PACKET_SC_TACKDRAWPRIZE=2220 PACKET_SC_TACKDRAWPRIZE value - * @property {number} PACKET_CS_GETAGENTGAMEREC=2223 PACKET_CS_GETAGENTGAMEREC value - * @property {number} PACKET_SC_GETAGENTGAMEREC=2224 PACKET_SC_GETAGENTGAMEREC value - * @property {number} PACKET_CS_DELAGENTGAMEREC=2225 PACKET_CS_DELAGENTGAMEREC value - * @property {number} PACKET_CS_SHOPBUY=2226 PACKET_CS_SHOPBUY value - * @property {number} PACKET_SC_SHOPBUY=2227 PACKET_SC_SHOPBUY value - * @property {number} PACKET_SC_LIMITLIST=2228 PACKET_SC_LIMITLIST value - * @property {number} PACKET_CS_GETLATELYGAMEIDS=2229 PACKET_CS_GETLATELYGAMEIDS value - * @property {number} PACKET_SC_GETLATELYGAMEIDS=2230 PACKET_SC_GETLATELYGAMEIDS value - * @property {number} PACKET_CS_GETGAMECONFIG=2231 PACKET_CS_GETGAMECONFIG value - * @property {number} PACKET_SC_GETGAMECONFIG=2232 PACKET_SC_GETGAMECONFIG value - * @property {number} PACKET_SC_CHANGEGAMESTATUS=2233 PACKET_SC_CHANGEGAMESTATUS value - * @property {number} PACKET_CS_ENTERHALL=2240 PACKET_CS_ENTERHALL value - * @property {number} PACKET_SC_ENTERHALL=2241 PACKET_SC_ENTERHALL value - * @property {number} PACKET_CS_LEAVEHALL=2242 PACKET_CS_LEAVEHALL value - * @property {number} PACKET_SC_LEAVEHALL=2243 PACKET_SC_LEAVEHALL value - * @property {number} PACKET_CS_HALLROOMLIST=2244 PACKET_CS_HALLROOMLIST value - * @property {number} PACKET_SC_HALLROOMLIST=2245 PACKET_SC_HALLROOMLIST value - * @property {number} PACKET_SC_ROOMPLAYERENTER=2246 PACKET_SC_ROOMPLAYERENTER value - * @property {number} PACKET_SC_ROOMPLAYERLEAVE=2247 PACKET_SC_ROOMPLAYERLEAVE value - * @property {number} PACKET_SC_ROOMSTATECHANG=2248 PACKET_SC_ROOMSTATECHANG value - * @property {number} PACKET_SC_HALLPLAYERNUM=2249 PACKET_SC_HALLPLAYERNUM value - * @property {number} PACKET_SC_BULLETIONINFO=2250 PACKET_SC_BULLETIONINFO value - * @property {number} PACKET_CS_BULLETIONINFO=2251 PACKET_CS_BULLETIONINFO value - * @property {number} PACKET_CS_CUSTOMERINFOLIST=2252 PACKET_CS_CUSTOMERINFOLIST value - * @property {number} PACKET_SC_CUSTOMERINFOLIST=2253 PACKET_SC_CUSTOMERINFOLIST value - * @property {number} PACKET_CS_ENTERDGGAME=2254 PACKET_CS_ENTERDGGAME value - * @property {number} PACKET_SC_ENTERDGGAME=2255 PACKET_SC_ENTERDGGAME value - * @property {number} PACKET_CS_LEAVEDGGAME=2256 PACKET_CS_LEAVEDGGAME value - * @property {number} PACKET_SC_LEAVEDGGAME=2257 PACKET_SC_LEAVEDGGAME value - * @property {number} PACKET_SC_PLAYERRECHARGEANSWER=2258 PACKET_SC_PLAYERRECHARGEANSWER value - * @property {number} PACKET_CS_THRIDACCOUNTSTATICSTIC=2259 PACKET_CS_THRIDACCOUNTSTATICSTIC value - * @property {number} PACKET_SC_THRIDACCOUNTSTATICSTIC=2260 PACKET_SC_THRIDACCOUNTSTATICSTIC value - * @property {number} PACKET_CS_THRIDACCOUNTTRANSFER=2261 PACKET_CS_THRIDACCOUNTTRANSFER value - * @property {number} PACKET_SC_THRIDACCOUNTTRANSFER=2262 PACKET_SC_THRIDACCOUNTTRANSFER value - * @property {number} PACKET_CS_ENTERTHRIDGAME=2263 PACKET_CS_ENTERTHRIDGAME value - * @property {number} PACKET_SC_ENTERTHRIDGAME=2264 PACKET_SC_ENTERTHRIDGAME value - * @property {number} PACKET_CS_LEAVETHRIDGAME=2265 PACKET_CS_LEAVETHRIDGAME value - * @property {number} PACKET_SC_LEAVETHRIDGAME=2266 PACKET_SC_LEAVETHRIDGAME value - * @property {number} PACKET_CS_THRIDGAMELIST=2267 PACKET_CS_THRIDGAMELIST value - * @property {number} PACKET_SC_THRIDGAMELIST=2268 PACKET_SC_THRIDGAMELIST value - * @property {number} PACKET_CS_THRIDGAMEBALANCEUPDATE=2269 PACKET_CS_THRIDGAMEBALANCEUPDATE value - * @property {number} PACKET_SC_THRIDGAMEBALANCEUPDATE=2270 PACKET_SC_THRIDGAMEBALANCEUPDATE value - * @property {number} PACKET_SC_THRIDGAMEBALANCEUPDATESTATE=2271 PACKET_SC_THRIDGAMEBALANCEUPDATESTATE value - * @property {number} PACKET_CS_CREATEPRIVATEROOM=2272 PACKET_CS_CREATEPRIVATEROOM value - * @property {number} PACKET_SC_CREATEPRIVATEROOM=2273 PACKET_SC_CREATEPRIVATEROOM value - * @property {number} PACKET_CS_GETPRIVATEROOMLIST=2274 PACKET_CS_GETPRIVATEROOMLIST value - * @property {number} PACKET_SC_GETPRIVATEROOMLIST=2275 PACKET_SC_GETPRIVATEROOMLIST value - * @property {number} PACKET_CS_GETPRIVATEROOMHISTORY=2276 PACKET_CS_GETPRIVATEROOMHISTORY value - * @property {number} PACKET_SC_GETPRIVATEROOMHISTORY=2277 PACKET_SC_GETPRIVATEROOMHISTORY value - * @property {number} PACKET_CS_DESTROYPRIVATEROOM=2278 PACKET_CS_DESTROYPRIVATEROOM value - * @property {number} PACKET_SC_DESTROYPRIVATEROOM=2279 PACKET_SC_DESTROYPRIVATEROOM value - * @property {number} PACKET_CS_QUERYROOMINFO=2280 PACKET_CS_QUERYROOMINFO value - * @property {number} PACKET_SC_QUERYROOMINFO=2281 PACKET_SC_QUERYROOMINFO value - * @property {number} PACKET_SC_GAMESUBLIST=2283 PACKET_SC_GAMESUBLIST value - * @property {number} PACKET_CS_GAMEOBSERVE=2284 PACKET_CS_GAMEOBSERVE value - * @property {number} PACKET_SC_GAMESTATE=2285 PACKET_SC_GAMESTATE value - * @property {number} PACKET_SC_SYNCGAMEFREE=2286 PACKET_SC_SYNCGAMEFREE value - * @property {number} PACKET_SC_LOTTERYSYNC=2287 PACKET_SC_LOTTERYSYNC value - * @property {number} PACKET_CS_LOTTERYLOG=2288 PACKET_CS_LOTTERYLOG value - * @property {number} PACKET_SC_LOTTERYLOG=2289 PACKET_SC_LOTTERYLOG value - * @property {number} PACKET_SC_LOTTERYBILL=2290 PACKET_SC_LOTTERYBILL value - * @property {number} PACKET_CS_UPLOADLOC=2291 PACKET_CS_UPLOADLOC value - * @property {number} PACKET_SC_UPLOADLOC=2292 PACKET_SC_UPLOADLOC value - * @property {number} PACKET_CS_AUDIENCESIT=2293 PACKET_CS_AUDIENCESIT value - * @property {number} PACKET_SC_AUDIENCESIT=2294 PACKET_SC_AUDIENCESIT value - * @property {number} PACKET_CS_COMNOTICE=2295 PACKET_CS_COMNOTICE value - * @property {number} PACKET_SC_COMNOTICE=2296 PACKET_SC_COMNOTICE value - * @property {number} PACKET_SC_CHANGEENTRYSWITCH=2297 PACKET_SC_CHANGEENTRYSWITCH value - * @property {number} PACKET_CS_LEAVEROOM=8001 PACKET_CS_LEAVEROOM value - * @property {number} PACKET_SC_LEAVEROOM=8002 PACKET_SC_LEAVEROOM value - * @property {number} PACKET_CS_DESTROYROOM=8003 PACKET_CS_DESTROYROOM value - * @property {number} PACKET_SC_DESTROYROOM=8004 PACKET_SC_DESTROYROOM value - * @property {number} PACKET_CS_FORCESTART=8005 PACKET_CS_FORCESTART value - * @property {number} PACKET_SC_FORCESTART=8006 PACKET_SC_FORCESTART value - * @property {number} PACKET_CS_AUDIENCE_LEAVEROOM=8007 PACKET_CS_AUDIENCE_LEAVEROOM value - * @property {number} PACKET_CS_PLAYER_SWITCHFLAG=8008 PACKET_CS_PLAYER_SWITCHFLAG value - */ - gamehall.GameHallPacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_GameHall_ZERO"] = 0; - values[valuesById[2200] = "PACKET_CS_JOINGAME"] = 2200; - values[valuesById[2201] = "PACKET_SC_JOINGAME"] = 2201; - values[valuesById[2202] = "PACKET_CS_CREATEROOM"] = 2202; - values[valuesById[2203] = "PACKET_SC_CREATEROOM"] = 2203; - values[valuesById[2204] = "PACKET_CS_ENTERROOM"] = 2204; - values[valuesById[2205] = "PACKET_SC_ENTERROOM"] = 2205; - values[valuesById[2206] = "PACKET_CS_RETURNROOM"] = 2206; - values[valuesById[2207] = "PACKET_SC_RETURNROOM"] = 2207; - values[valuesById[2208] = "PACKET_CS_AUDIENCE_ENTERROOM"] = 2208; - values[valuesById[2209] = "PACKET_CS_ENTERGAME"] = 2209; - values[valuesById[2210] = "PACKET_SC_ENTERGAME"] = 2210; - values[valuesById[2211] = "PACKET_CS_QUITGAME"] = 2211; - values[valuesById[2212] = "PACKET_SC_QUITGAME"] = 2212; - values[valuesById[2213] = "PACKET_SC_CARDGAINWAY"] = 2213; - values[valuesById[2214] = "PACKET_CS_TASKLIST"] = 2214; - values[valuesById[2215] = "PACKET_SC_TASKLIST"] = 2215; - values[valuesById[2216] = "PACKET_SC_TASKCHG"] = 2216; - values[valuesById[2217] = "PACKET_SC_TACKCOMPLETE"] = 2217; - values[valuesById[2218] = "PACKET_SC_TASKDEL"] = 2218; - values[valuesById[2219] = "PACKET_CS_TACKDRAWPRIZE"] = 2219; - values[valuesById[2220] = "PACKET_SC_TACKDRAWPRIZE"] = 2220; - values[valuesById[2223] = "PACKET_CS_GETAGENTGAMEREC"] = 2223; - values[valuesById[2224] = "PACKET_SC_GETAGENTGAMEREC"] = 2224; - values[valuesById[2225] = "PACKET_CS_DELAGENTGAMEREC"] = 2225; - values[valuesById[2226] = "PACKET_CS_SHOPBUY"] = 2226; - values[valuesById[2227] = "PACKET_SC_SHOPBUY"] = 2227; - values[valuesById[2228] = "PACKET_SC_LIMITLIST"] = 2228; - values[valuesById[2229] = "PACKET_CS_GETLATELYGAMEIDS"] = 2229; - values[valuesById[2230] = "PACKET_SC_GETLATELYGAMEIDS"] = 2230; - values[valuesById[2231] = "PACKET_CS_GETGAMECONFIG"] = 2231; - values[valuesById[2232] = "PACKET_SC_GETGAMECONFIG"] = 2232; - values[valuesById[2233] = "PACKET_SC_CHANGEGAMESTATUS"] = 2233; - values[valuesById[2240] = "PACKET_CS_ENTERHALL"] = 2240; - values[valuesById[2241] = "PACKET_SC_ENTERHALL"] = 2241; - values[valuesById[2242] = "PACKET_CS_LEAVEHALL"] = 2242; - values[valuesById[2243] = "PACKET_SC_LEAVEHALL"] = 2243; - values[valuesById[2244] = "PACKET_CS_HALLROOMLIST"] = 2244; - values[valuesById[2245] = "PACKET_SC_HALLROOMLIST"] = 2245; - values[valuesById[2246] = "PACKET_SC_ROOMPLAYERENTER"] = 2246; - values[valuesById[2247] = "PACKET_SC_ROOMPLAYERLEAVE"] = 2247; - values[valuesById[2248] = "PACKET_SC_ROOMSTATECHANG"] = 2248; - values[valuesById[2249] = "PACKET_SC_HALLPLAYERNUM"] = 2249; - values[valuesById[2250] = "PACKET_SC_BULLETIONINFO"] = 2250; - values[valuesById[2251] = "PACKET_CS_BULLETIONINFO"] = 2251; - values[valuesById[2252] = "PACKET_CS_CUSTOMERINFOLIST"] = 2252; - values[valuesById[2253] = "PACKET_SC_CUSTOMERINFOLIST"] = 2253; - values[valuesById[2254] = "PACKET_CS_ENTERDGGAME"] = 2254; - values[valuesById[2255] = "PACKET_SC_ENTERDGGAME"] = 2255; - values[valuesById[2256] = "PACKET_CS_LEAVEDGGAME"] = 2256; - values[valuesById[2257] = "PACKET_SC_LEAVEDGGAME"] = 2257; - values[valuesById[2258] = "PACKET_SC_PLAYERRECHARGEANSWER"] = 2258; - values[valuesById[2259] = "PACKET_CS_THRIDACCOUNTSTATICSTIC"] = 2259; - values[valuesById[2260] = "PACKET_SC_THRIDACCOUNTSTATICSTIC"] = 2260; - values[valuesById[2261] = "PACKET_CS_THRIDACCOUNTTRANSFER"] = 2261; - values[valuesById[2262] = "PACKET_SC_THRIDACCOUNTTRANSFER"] = 2262; - values[valuesById[2263] = "PACKET_CS_ENTERTHRIDGAME"] = 2263; - values[valuesById[2264] = "PACKET_SC_ENTERTHRIDGAME"] = 2264; - values[valuesById[2265] = "PACKET_CS_LEAVETHRIDGAME"] = 2265; - values[valuesById[2266] = "PACKET_SC_LEAVETHRIDGAME"] = 2266; - values[valuesById[2267] = "PACKET_CS_THRIDGAMELIST"] = 2267; - values[valuesById[2268] = "PACKET_SC_THRIDGAMELIST"] = 2268; - values[valuesById[2269] = "PACKET_CS_THRIDGAMEBALANCEUPDATE"] = 2269; - values[valuesById[2270] = "PACKET_SC_THRIDGAMEBALANCEUPDATE"] = 2270; - values[valuesById[2271] = "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE"] = 2271; - values[valuesById[2272] = "PACKET_CS_CREATEPRIVATEROOM"] = 2272; - values[valuesById[2273] = "PACKET_SC_CREATEPRIVATEROOM"] = 2273; - values[valuesById[2274] = "PACKET_CS_GETPRIVATEROOMLIST"] = 2274; - values[valuesById[2275] = "PACKET_SC_GETPRIVATEROOMLIST"] = 2275; - values[valuesById[2276] = "PACKET_CS_GETPRIVATEROOMHISTORY"] = 2276; - values[valuesById[2277] = "PACKET_SC_GETPRIVATEROOMHISTORY"] = 2277; - values[valuesById[2278] = "PACKET_CS_DESTROYPRIVATEROOM"] = 2278; - values[valuesById[2279] = "PACKET_SC_DESTROYPRIVATEROOM"] = 2279; - values[valuesById[2280] = "PACKET_CS_QUERYROOMINFO"] = 2280; - values[valuesById[2281] = "PACKET_SC_QUERYROOMINFO"] = 2281; - values[valuesById[2283] = "PACKET_SC_GAMESUBLIST"] = 2283; - values[valuesById[2284] = "PACKET_CS_GAMEOBSERVE"] = 2284; - values[valuesById[2285] = "PACKET_SC_GAMESTATE"] = 2285; - values[valuesById[2286] = "PACKET_SC_SYNCGAMEFREE"] = 2286; - values[valuesById[2287] = "PACKET_SC_LOTTERYSYNC"] = 2287; - values[valuesById[2288] = "PACKET_CS_LOTTERYLOG"] = 2288; - values[valuesById[2289] = "PACKET_SC_LOTTERYLOG"] = 2289; - values[valuesById[2290] = "PACKET_SC_LOTTERYBILL"] = 2290; - values[valuesById[2291] = "PACKET_CS_UPLOADLOC"] = 2291; - values[valuesById[2292] = "PACKET_SC_UPLOADLOC"] = 2292; - values[valuesById[2293] = "PACKET_CS_AUDIENCESIT"] = 2293; - values[valuesById[2294] = "PACKET_SC_AUDIENCESIT"] = 2294; - values[valuesById[2295] = "PACKET_CS_COMNOTICE"] = 2295; - values[valuesById[2296] = "PACKET_SC_COMNOTICE"] = 2296; - values[valuesById[2297] = "PACKET_SC_CHANGEENTRYSWITCH"] = 2297; - values[valuesById[8001] = "PACKET_CS_LEAVEROOM"] = 8001; - values[valuesById[8002] = "PACKET_SC_LEAVEROOM"] = 8002; - values[valuesById[8003] = "PACKET_CS_DESTROYROOM"] = 8003; - values[valuesById[8004] = "PACKET_SC_DESTROYROOM"] = 8004; - values[valuesById[8005] = "PACKET_CS_FORCESTART"] = 8005; - values[valuesById[8006] = "PACKET_SC_FORCESTART"] = 8006; - values[valuesById[8007] = "PACKET_CS_AUDIENCE_LEAVEROOM"] = 8007; - values[valuesById[8008] = "PACKET_CS_PLAYER_SWITCHFLAG"] = 8008; - return values; - })(); - - gamehall.CSEnterHall = (function() { - - /** - * Properties of a CSEnterHall. - * @memberof gamehall - * @interface ICSEnterHall - * @property {number|null} [HallId] CSEnterHall HallId - */ - - /** - * Constructs a new CSEnterHall. - * @memberof gamehall - * @classdesc Represents a CSEnterHall. - * @implements ICSEnterHall - * @constructor - * @param {gamehall.ICSEnterHall=} [properties] Properties to set - */ - function CSEnterHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterHall HallId. - * @member {number} HallId - * @memberof gamehall.CSEnterHall - * @instance - */ - CSEnterHall.prototype.HallId = 0; - - /** - * Creates a new CSEnterHall instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall=} [properties] Properties to set - * @returns {gamehall.CSEnterHall} CSEnterHall instance - */ - CSEnterHall.create = function create(properties) { - return new CSEnterHall(properties); - }; - - /** - * Encodes the specified CSEnterHall message. Does not implicitly {@link gamehall.CSEnterHall.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall} message CSEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified CSEnterHall message, length delimited. Does not implicitly {@link gamehall.CSEnterHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall} message CSEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterHall} CSEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterHall} CSEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterHall message. - * @function verify - * @memberof gamehall.CSEnterHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterHall} CSEnterHall - */ - CSEnterHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterHall) - return object; - var message = new $root.gamehall.CSEnterHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.CSEnterHall} message CSEnterHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this CSEnterHall to JSON. - * @function toJSON - * @memberof gamehall.CSEnterHall - * @instance - * @returns {Object.} JSON object - */ - CSEnterHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterHall - * @function getTypeUrl - * @memberof gamehall.CSEnterHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterHall"; - }; - - return CSEnterHall; - })(); - - gamehall.SCEnterHall = (function() { - - /** - * Properties of a SCEnterHall. - * @memberof gamehall - * @interface ISCEnterHall - * @property {number|null} [HallId] SCEnterHall HallId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterHall OpRetCode - */ - - /** - * Constructs a new SCEnterHall. - * @memberof gamehall - * @classdesc Represents a SCEnterHall. - * @implements ISCEnterHall - * @constructor - * @param {gamehall.ISCEnterHall=} [properties] Properties to set - */ - function SCEnterHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterHall HallId. - * @member {number} HallId - * @memberof gamehall.SCEnterHall - * @instance - */ - SCEnterHall.prototype.HallId = 0; - - /** - * SCEnterHall OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterHall - * @instance - */ - SCEnterHall.prototype.OpRetCode = 0; - - /** - * Creates a new SCEnterHall instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall=} [properties] Properties to set - * @returns {gamehall.SCEnterHall} SCEnterHall instance - */ - SCEnterHall.create = function create(properties) { - return new SCEnterHall(properties); - }; - - /** - * Encodes the specified SCEnterHall message. Does not implicitly {@link gamehall.SCEnterHall.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall} message SCEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCEnterHall message, length delimited. Does not implicitly {@link gamehall.SCEnterHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall} message SCEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterHall} SCEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterHall} SCEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterHall message. - * @function verify - * @memberof gamehall.SCEnterHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCEnterHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterHall} SCEnterHall - */ - SCEnterHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterHall) - return object; - var message = new $root.gamehall.SCEnterHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCEnterHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.SCEnterHall} message SCEnterHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.HallId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCEnterHall to JSON. - * @function toJSON - * @memberof gamehall.SCEnterHall - * @instance - * @returns {Object.} JSON object - */ - SCEnterHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterHall - * @function getTypeUrl - * @memberof gamehall.SCEnterHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterHall"; - }; - - return SCEnterHall; - })(); - - gamehall.CSLeaveHall = (function() { - - /** - * Properties of a CSLeaveHall. - * @memberof gamehall - * @interface ICSLeaveHall - */ - - /** - * Constructs a new CSLeaveHall. - * @memberof gamehall - * @classdesc Represents a CSLeaveHall. - * @implements ICSLeaveHall - * @constructor - * @param {gamehall.ICSLeaveHall=} [properties] Properties to set - */ - function CSLeaveHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveHall instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall=} [properties] Properties to set - * @returns {gamehall.CSLeaveHall} CSLeaveHall instance - */ - CSLeaveHall.create = function create(properties) { - return new CSLeaveHall(properties); - }; - - /** - * Encodes the specified CSLeaveHall message. Does not implicitly {@link gamehall.CSLeaveHall.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall} message CSLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveHall message, length delimited. Does not implicitly {@link gamehall.CSLeaveHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall} message CSLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveHall} CSLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveHall} CSLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveHall message. - * @function verify - * @memberof gamehall.CSLeaveHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveHall} CSLeaveHall - */ - CSLeaveHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveHall) - return object; - return new $root.gamehall.CSLeaveHall(); - }; - - /** - * Creates a plain object from a CSLeaveHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.CSLeaveHall} message CSLeaveHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveHall.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveHall to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveHall - * @instance - * @returns {Object.} JSON object - */ - CSLeaveHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveHall - * @function getTypeUrl - * @memberof gamehall.CSLeaveHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveHall"; - }; - - return CSLeaveHall; - })(); - - gamehall.SCLeaveHall = (function() { - - /** - * Properties of a SCLeaveHall. - * @memberof gamehall - * @interface ISCLeaveHall - * @property {number|null} [HallId] SCLeaveHall HallId - */ - - /** - * Constructs a new SCLeaveHall. - * @memberof gamehall - * @classdesc Represents a SCLeaveHall. - * @implements ISCLeaveHall - * @constructor - * @param {gamehall.ISCLeaveHall=} [properties] Properties to set - */ - function SCLeaveHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveHall HallId. - * @member {number} HallId - * @memberof gamehall.SCLeaveHall - * @instance - */ - SCLeaveHall.prototype.HallId = 0; - - /** - * Creates a new SCLeaveHall instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall=} [properties] Properties to set - * @returns {gamehall.SCLeaveHall} SCLeaveHall instance - */ - SCLeaveHall.create = function create(properties) { - return new SCLeaveHall(properties); - }; - - /** - * Encodes the specified SCLeaveHall message. Does not implicitly {@link gamehall.SCLeaveHall.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall} message SCLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified SCLeaveHall message, length delimited. Does not implicitly {@link gamehall.SCLeaveHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall} message SCLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveHall} SCLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveHall} SCLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveHall message. - * @function verify - * @memberof gamehall.SCLeaveHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a SCLeaveHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveHall} SCLeaveHall - */ - SCLeaveHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveHall) - return object; - var message = new $root.gamehall.SCLeaveHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a SCLeaveHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.SCLeaveHall} message SCLeaveHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this SCLeaveHall to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveHall - * @instance - * @returns {Object.} JSON object - */ - SCLeaveHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveHall - * @function getTypeUrl - * @memberof gamehall.SCLeaveHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveHall"; - }; - - return SCLeaveHall; - })(); - - gamehall.RoomPlayerInfo = (function() { - - /** - * Properties of a RoomPlayerInfo. - * @memberof gamehall - * @interface IRoomPlayerInfo - * @property {number|null} [SnId] RoomPlayerInfo SnId - * @property {number|null} [Head] RoomPlayerInfo Head - * @property {number|null} [Sex] RoomPlayerInfo Sex - * @property {string|null} [Name] RoomPlayerInfo Name - * @property {number|null} [Pos] RoomPlayerInfo Pos - * @property {number|null} [Flag] RoomPlayerInfo Flag - * @property {number|null} [HeadOutLine] RoomPlayerInfo HeadOutLine - * @property {number|null} [VIP] RoomPlayerInfo VIP - */ - - /** - * Constructs a new RoomPlayerInfo. - * @memberof gamehall - * @classdesc Represents a RoomPlayerInfo. - * @implements IRoomPlayerInfo - * @constructor - * @param {gamehall.IRoomPlayerInfo=} [properties] Properties to set - */ - function RoomPlayerInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RoomPlayerInfo SnId. - * @member {number} SnId - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.SnId = 0; - - /** - * RoomPlayerInfo Head. - * @member {number} Head - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Head = 0; - - /** - * RoomPlayerInfo Sex. - * @member {number} Sex - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Sex = 0; - - /** - * RoomPlayerInfo Name. - * @member {string} Name - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Name = ""; - - /** - * RoomPlayerInfo Pos. - * @member {number} Pos - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Pos = 0; - - /** - * RoomPlayerInfo Flag. - * @member {number} Flag - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Flag = 0; - - /** - * RoomPlayerInfo HeadOutLine. - * @member {number} HeadOutLine - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.HeadOutLine = 0; - - /** - * RoomPlayerInfo VIP. - * @member {number} VIP - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.VIP = 0; - - /** - * Creates a new RoomPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo=} [properties] Properties to set - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo instance - */ - RoomPlayerInfo.create = function create(properties) { - return new RoomPlayerInfo(properties); - }; - - /** - * Encodes the specified RoomPlayerInfo message. Does not implicitly {@link gamehall.RoomPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo} message RoomPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SnId); - if (message.Head != null && Object.hasOwnProperty.call(message, "Head")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Head); - if (message.Sex != null && Object.hasOwnProperty.call(message, "Sex")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Sex); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Name); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Pos); - if (message.Flag != null && Object.hasOwnProperty.call(message, "Flag")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.Flag); - if (message.HeadOutLine != null && Object.hasOwnProperty.call(message, "HeadOutLine")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.HeadOutLine); - if (message.VIP != null && Object.hasOwnProperty.call(message, "VIP")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.VIP); - return writer; - }; - - /** - * Encodes the specified RoomPlayerInfo message, length delimited. Does not implicitly {@link gamehall.RoomPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo} message RoomPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RoomPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RoomPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SnId = reader.int32(); - break; - } - case 2: { - message.Head = reader.int32(); - break; - } - case 3: { - message.Sex = reader.int32(); - break; - } - case 4: { - message.Name = reader.string(); - break; - } - case 5: { - message.Pos = reader.int32(); - break; - } - case 6: { - message.Flag = reader.int32(); - break; - } - case 7: { - message.HeadOutLine = reader.int32(); - break; - } - case 8: { - message.VIP = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RoomPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RoomPlayerInfo message. - * @function verify - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RoomPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Head != null && message.hasOwnProperty("Head")) - if (!$util.isInteger(message.Head)) - return "Head: integer expected"; - if (message.Sex != null && message.hasOwnProperty("Sex")) - if (!$util.isInteger(message.Sex)) - return "Sex: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Flag != null && message.hasOwnProperty("Flag")) - if (!$util.isInteger(message.Flag)) - return "Flag: integer expected"; - if (message.HeadOutLine != null && message.hasOwnProperty("HeadOutLine")) - if (!$util.isInteger(message.HeadOutLine)) - return "HeadOutLine: integer expected"; - if (message.VIP != null && message.hasOwnProperty("VIP")) - if (!$util.isInteger(message.VIP)) - return "VIP: integer expected"; - return null; - }; - - /** - * Creates a RoomPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - */ - RoomPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RoomPlayerInfo) - return object; - var message = new $root.gamehall.RoomPlayerInfo(); - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Head != null) - message.Head = object.Head | 0; - if (object.Sex != null) - message.Sex = object.Sex | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Flag != null) - message.Flag = object.Flag | 0; - if (object.HeadOutLine != null) - message.HeadOutLine = object.HeadOutLine | 0; - if (object.VIP != null) - message.VIP = object.VIP | 0; - return message; - }; - - /** - * Creates a plain object from a RoomPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.RoomPlayerInfo} message RoomPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RoomPlayerInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SnId = 0; - object.Head = 0; - object.Sex = 0; - object.Name = ""; - object.Pos = 0; - object.Flag = 0; - object.HeadOutLine = 0; - object.VIP = 0; - } - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Head != null && message.hasOwnProperty("Head")) - object.Head = message.Head; - if (message.Sex != null && message.hasOwnProperty("Sex")) - object.Sex = message.Sex; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Flag != null && message.hasOwnProperty("Flag")) - object.Flag = message.Flag; - if (message.HeadOutLine != null && message.hasOwnProperty("HeadOutLine")) - object.HeadOutLine = message.HeadOutLine; - if (message.VIP != null && message.hasOwnProperty("VIP")) - object.VIP = message.VIP; - return object; - }; - - /** - * Converts this RoomPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.RoomPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - RoomPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RoomPlayerInfo - * @function getTypeUrl - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RoomPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RoomPlayerInfo"; - }; - - return RoomPlayerInfo; - })(); - - gamehall.RoomInfo = (function() { - - /** - * Properties of a RoomInfo. - * @memberof gamehall - * @interface IRoomInfo - * @property {number|null} [RoomId] RoomInfo RoomId - * @property {boolean|null} [Starting] RoomInfo Starting - * @property {Array.|null} [Players] RoomInfo Players - */ - - /** - * Constructs a new RoomInfo. - * @memberof gamehall - * @classdesc Represents a RoomInfo. - * @implements IRoomInfo - * @constructor - * @param {gamehall.IRoomInfo=} [properties] Properties to set - */ - function RoomInfo(properties) { - this.Players = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.RoomId = 0; - - /** - * RoomInfo Starting. - * @member {boolean} Starting - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.Starting = false; - - /** - * RoomInfo Players. - * @member {Array.} Players - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.Players = $util.emptyArray; - - /** - * Creates a new RoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo=} [properties] Properties to set - * @returns {gamehall.RoomInfo} RoomInfo instance - */ - RoomInfo.create = function create(properties) { - return new RoomInfo(properties); - }; - - /** - * Encodes the specified RoomInfo message. Does not implicitly {@link gamehall.RoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo} message RoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Players != null && message.Players.length) - for (var i = 0; i < message.Players.length; ++i) - $root.gamehall.RoomPlayerInfo.encode(message.Players[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.Starting != null && Object.hasOwnProperty.call(message, "Starting")) - writer.uint32(/* id 7, wireType 0 =*/56).bool(message.Starting); - return writer; - }; - - /** - * Encodes the specified RoomInfo message, length delimited. Does not implicitly {@link gamehall.RoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo} message RoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RoomInfo} RoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 7: { - message.Starting = reader.bool(); - break; - } - case 5: { - if (!(message.Players && message.Players.length)) - message.Players = []; - message.Players.push($root.gamehall.RoomPlayerInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RoomInfo} RoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RoomInfo message. - * @function verify - * @memberof gamehall.RoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Starting != null && message.hasOwnProperty("Starting")) - if (typeof message.Starting !== "boolean") - return "Starting: boolean expected"; - if (message.Players != null && message.hasOwnProperty("Players")) { - if (!Array.isArray(message.Players)) - return "Players: array expected"; - for (var i = 0; i < message.Players.length; ++i) { - var error = $root.gamehall.RoomPlayerInfo.verify(message.Players[i]); - if (error) - return "Players." + error; - } - } - return null; - }; - - /** - * Creates a RoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RoomInfo} RoomInfo - */ - RoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RoomInfo) - return object; - var message = new $root.gamehall.RoomInfo(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Starting != null) - message.Starting = Boolean(object.Starting); - if (object.Players) { - if (!Array.isArray(object.Players)) - throw TypeError(".gamehall.RoomInfo.Players: array expected"); - message.Players = []; - for (var i = 0; i < object.Players.length; ++i) { - if (typeof object.Players[i] !== "object") - throw TypeError(".gamehall.RoomInfo.Players: object expected"); - message.Players[i] = $root.gamehall.RoomPlayerInfo.fromObject(object.Players[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a RoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.RoomInfo} message RoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Players = []; - if (options.defaults) { - object.RoomId = 0; - object.Starting = false; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Players && message.Players.length) { - object.Players = []; - for (var j = 0; j < message.Players.length; ++j) - object.Players[j] = $root.gamehall.RoomPlayerInfo.toObject(message.Players[j], options); - } - if (message.Starting != null && message.hasOwnProperty("Starting")) - object.Starting = message.Starting; - return object; - }; - - /** - * Converts this RoomInfo to JSON. - * @function toJSON - * @memberof gamehall.RoomInfo - * @instance - * @returns {Object.} JSON object - */ - RoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RoomInfo - * @function getTypeUrl - * @memberof gamehall.RoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RoomInfo"; - }; - - return RoomInfo; - })(); - - gamehall.CSHallRoomList = (function() { - - /** - * Properties of a CSHallRoomList. - * @memberof gamehall - * @interface ICSHallRoomList - * @property {number|null} [HallId] CSHallRoomList HallId - */ - - /** - * Constructs a new CSHallRoomList. - * @memberof gamehall - * @classdesc Represents a CSHallRoomList. - * @implements ICSHallRoomList - * @constructor - * @param {gamehall.ICSHallRoomList=} [properties] Properties to set - */ - function CSHallRoomList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHallRoomList HallId. - * @member {number} HallId - * @memberof gamehall.CSHallRoomList - * @instance - */ - CSHallRoomList.prototype.HallId = 0; - - /** - * Creates a new CSHallRoomList instance using the specified properties. - * @function create - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList=} [properties] Properties to set - * @returns {gamehall.CSHallRoomList} CSHallRoomList instance - */ - CSHallRoomList.create = function create(properties) { - return new CSHallRoomList(properties); - }; - - /** - * Encodes the specified CSHallRoomList message. Does not implicitly {@link gamehall.CSHallRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList} message CSHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHallRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified CSHallRoomList message, length delimited. Does not implicitly {@link gamehall.CSHallRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList} message CSHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHallRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHallRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHallRoomList} CSHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHallRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHallRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHallRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHallRoomList} CSHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHallRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHallRoomList message. - * @function verify - * @memberof gamehall.CSHallRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHallRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a CSHallRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHallRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHallRoomList} CSHallRoomList - */ - CSHallRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHallRoomList) - return object; - var message = new $root.gamehall.CSHallRoomList(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a CSHallRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.CSHallRoomList} message CSHallRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHallRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this CSHallRoomList to JSON. - * @function toJSON - * @memberof gamehall.CSHallRoomList - * @instance - * @returns {Object.} JSON object - */ - CSHallRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHallRoomList - * @function getTypeUrl - * @memberof gamehall.CSHallRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHallRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHallRoomList"; - }; - - return CSHallRoomList; - })(); - - gamehall.HallInfo = (function() { - - /** - * Properties of a HallInfo. - * @memberof gamehall - * @interface IHallInfo - * @property {number|null} [SceneType] HallInfo SceneType - * @property {number|null} [PlayerNum] HallInfo PlayerNum - */ - - /** - * Constructs a new HallInfo. - * @memberof gamehall - * @classdesc Represents a HallInfo. - * @implements IHallInfo - * @constructor - * @param {gamehall.IHallInfo=} [properties] Properties to set - */ - function HallInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallInfo SceneType. - * @member {number} SceneType - * @memberof gamehall.HallInfo - * @instance - */ - HallInfo.prototype.SceneType = 0; - - /** - * HallInfo PlayerNum. - * @member {number} PlayerNum - * @memberof gamehall.HallInfo - * @instance - */ - HallInfo.prototype.PlayerNum = 0; - - /** - * Creates a new HallInfo instance using the specified properties. - * @function create - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo=} [properties] Properties to set - * @returns {gamehall.HallInfo} HallInfo instance - */ - HallInfo.create = function create(properties) { - return new HallInfo(properties); - }; - - /** - * Encodes the specified HallInfo message. Does not implicitly {@link gamehall.HallInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo} message HallInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SceneType != null && Object.hasOwnProperty.call(message, "SceneType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SceneType); - if (message.PlayerNum != null && Object.hasOwnProperty.call(message, "PlayerNum")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PlayerNum); - return writer; - }; - - /** - * Encodes the specified HallInfo message, length delimited. Does not implicitly {@link gamehall.HallInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo} message HallInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallInfo} HallInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SceneType = reader.int32(); - break; - } - case 2: { - message.PlayerNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallInfo} HallInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallInfo message. - * @function verify - * @memberof gamehall.HallInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - if (!$util.isInteger(message.SceneType)) - return "SceneType: integer expected"; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - if (!$util.isInteger(message.PlayerNum)) - return "PlayerNum: integer expected"; - return null; - }; - - /** - * Creates a HallInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallInfo} HallInfo - */ - HallInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallInfo) - return object; - var message = new $root.gamehall.HallInfo(); - if (object.SceneType != null) - message.SceneType = object.SceneType | 0; - if (object.PlayerNum != null) - message.PlayerNum = object.PlayerNum | 0; - return message; - }; - - /** - * Creates a plain object from a HallInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.HallInfo} message HallInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SceneType = 0; - object.PlayerNum = 0; - } - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - object.SceneType = message.SceneType; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - object.PlayerNum = message.PlayerNum; - return object; - }; - - /** - * Converts this HallInfo to JSON. - * @function toJSON - * @memberof gamehall.HallInfo - * @instance - * @returns {Object.} JSON object - */ - HallInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallInfo - * @function getTypeUrl - * @memberof gamehall.HallInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallInfo"; - }; - - return HallInfo; - })(); - - gamehall.HallPlayerNum = (function() { - - /** - * Properties of a HallPlayerNum. - * @memberof gamehall - * @interface IHallPlayerNum - * @property {Array.|null} [HallData] HallPlayerNum HallData - */ - - /** - * Constructs a new HallPlayerNum. - * @memberof gamehall - * @classdesc Represents a HallPlayerNum. - * @implements IHallPlayerNum - * @constructor - * @param {gamehall.IHallPlayerNum=} [properties] Properties to set - */ - function HallPlayerNum(properties) { - this.HallData = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallPlayerNum HallData. - * @member {Array.} HallData - * @memberof gamehall.HallPlayerNum - * @instance - */ - HallPlayerNum.prototype.HallData = $util.emptyArray; - - /** - * Creates a new HallPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum=} [properties] Properties to set - * @returns {gamehall.HallPlayerNum} HallPlayerNum instance - */ - HallPlayerNum.create = function create(properties) { - return new HallPlayerNum(properties); - }; - - /** - * Encodes the specified HallPlayerNum message. Does not implicitly {@link gamehall.HallPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum} message HallPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallData != null && message.HallData.length) - for (var i = 0; i < message.HallData.length; ++i) - $root.gamehall.HallInfo.encode(message.HallData[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified HallPlayerNum message, length delimited. Does not implicitly {@link gamehall.HallPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum} message HallPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallPlayerNum} HallPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.HallData && message.HallData.length)) - message.HallData = []; - message.HallData.push($root.gamehall.HallInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallPlayerNum} HallPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallPlayerNum message. - * @function verify - * @memberof gamehall.HallPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallData != null && message.hasOwnProperty("HallData")) { - if (!Array.isArray(message.HallData)) - return "HallData: array expected"; - for (var i = 0; i < message.HallData.length; ++i) { - var error = $root.gamehall.HallInfo.verify(message.HallData[i]); - if (error) - return "HallData." + error; - } - } - return null; - }; - - /** - * Creates a HallPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallPlayerNum} HallPlayerNum - */ - HallPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallPlayerNum) - return object; - var message = new $root.gamehall.HallPlayerNum(); - if (object.HallData) { - if (!Array.isArray(object.HallData)) - throw TypeError(".gamehall.HallPlayerNum.HallData: array expected"); - message.HallData = []; - for (var i = 0; i < object.HallData.length; ++i) { - if (typeof object.HallData[i] !== "object") - throw TypeError(".gamehall.HallPlayerNum.HallData: object expected"); - message.HallData[i] = $root.gamehall.HallInfo.fromObject(object.HallData[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a HallPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.HallPlayerNum} message HallPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.HallData = []; - if (message.HallData && message.HallData.length) { - object.HallData = []; - for (var j = 0; j < message.HallData.length; ++j) - object.HallData[j] = $root.gamehall.HallInfo.toObject(message.HallData[j], options); - } - return object; - }; - - /** - * Converts this HallPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.HallPlayerNum - * @instance - * @returns {Object.} JSON object - */ - HallPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallPlayerNum - * @function getTypeUrl - * @memberof gamehall.HallPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallPlayerNum"; - }; - - return HallPlayerNum; - })(); - - gamehall.SCHallRoomList = (function() { - - /** - * Properties of a SCHallRoomList. - * @memberof gamehall - * @interface ISCHallRoomList - * @property {number|null} [HallId] SCHallRoomList HallId - * @property {number|null} [GameId] SCHallRoomList GameId - * @property {number|null} [GameMode] SCHallRoomList GameMode - * @property {boolean|null} [IsAdd] SCHallRoomList IsAdd - * @property {Array.|null} [Params] SCHallRoomList Params - * @property {Array.|null} [Rooms] SCHallRoomList Rooms - * @property {Array.|null} [HallData] SCHallRoomList HallData - */ - - /** - * Constructs a new SCHallRoomList. - * @memberof gamehall - * @classdesc Represents a SCHallRoomList. - * @implements ISCHallRoomList - * @constructor - * @param {gamehall.ISCHallRoomList=} [properties] Properties to set - */ - function SCHallRoomList(properties) { - this.Params = []; - this.Rooms = []; - this.HallData = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHallRoomList HallId. - * @member {number} HallId - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.HallId = 0; - - /** - * SCHallRoomList GameId. - * @member {number} GameId - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.GameId = 0; - - /** - * SCHallRoomList GameMode. - * @member {number} GameMode - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.GameMode = 0; - - /** - * SCHallRoomList IsAdd. - * @member {boolean} IsAdd - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.IsAdd = false; - - /** - * SCHallRoomList Params. - * @member {Array.} Params - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.Params = $util.emptyArray; - - /** - * SCHallRoomList Rooms. - * @member {Array.} Rooms - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.Rooms = $util.emptyArray; - - /** - * SCHallRoomList HallData. - * @member {Array.} HallData - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.HallData = $util.emptyArray; - - /** - * Creates a new SCHallRoomList instance using the specified properties. - * @function create - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList=} [properties] Properties to set - * @returns {gamehall.SCHallRoomList} SCHallRoomList instance - */ - SCHallRoomList.create = function create(properties) { - return new SCHallRoomList(properties); - }; - - /** - * Encodes the specified SCHallRoomList message. Does not implicitly {@link gamehall.SCHallRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList} message SCHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHallRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameMode); - if (message.IsAdd != null && Object.hasOwnProperty.call(message, "IsAdd")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.IsAdd); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.Rooms != null && message.Rooms.length) - for (var i = 0; i < message.Rooms.length; ++i) - $root.gamehall.RoomInfo.encode(message.Rooms[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); - if (message.HallData != null && message.HallData.length) - for (var i = 0; i < message.HallData.length; ++i) - $root.gamehall.HallInfo.encode(message.HallData[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCHallRoomList message, length delimited. Does not implicitly {@link gamehall.SCHallRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList} message SCHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHallRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHallRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHallRoomList} SCHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHallRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHallRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - case 3: { - message.GameMode = reader.int32(); - break; - } - case 4: { - message.IsAdd = reader.bool(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - if (!(message.Rooms && message.Rooms.length)) - message.Rooms = []; - message.Rooms.push($root.gamehall.RoomInfo.decode(reader, reader.uint32())); - break; - } - case 7: { - if (!(message.HallData && message.HallData.length)) - message.HallData = []; - message.HallData.push($root.gamehall.HallInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHallRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHallRoomList} SCHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHallRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHallRoomList message. - * @function verify - * @memberof gamehall.SCHallRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHallRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - if (message.IsAdd != null && message.hasOwnProperty("IsAdd")) - if (typeof message.IsAdd !== "boolean") - return "IsAdd: boolean expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.Rooms != null && message.hasOwnProperty("Rooms")) { - if (!Array.isArray(message.Rooms)) - return "Rooms: array expected"; - for (var i = 0; i < message.Rooms.length; ++i) { - var error = $root.gamehall.RoomInfo.verify(message.Rooms[i]); - if (error) - return "Rooms." + error; - } - } - if (message.HallData != null && message.hasOwnProperty("HallData")) { - if (!Array.isArray(message.HallData)) - return "HallData: array expected"; - for (var i = 0; i < message.HallData.length; ++i) { - var error = $root.gamehall.HallInfo.verify(message.HallData[i]); - if (error) - return "HallData." + error; - } - } - return null; - }; - - /** - * Creates a SCHallRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHallRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHallRoomList} SCHallRoomList - */ - SCHallRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHallRoomList) - return object; - var message = new $root.gamehall.SCHallRoomList(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - if (object.IsAdd != null) - message.IsAdd = Boolean(object.IsAdd); - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCHallRoomList.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.Rooms) { - if (!Array.isArray(object.Rooms)) - throw TypeError(".gamehall.SCHallRoomList.Rooms: array expected"); - message.Rooms = []; - for (var i = 0; i < object.Rooms.length; ++i) { - if (typeof object.Rooms[i] !== "object") - throw TypeError(".gamehall.SCHallRoomList.Rooms: object expected"); - message.Rooms[i] = $root.gamehall.RoomInfo.fromObject(object.Rooms[i]); - } - } - if (object.HallData) { - if (!Array.isArray(object.HallData)) - throw TypeError(".gamehall.SCHallRoomList.HallData: array expected"); - message.HallData = []; - for (var i = 0; i < object.HallData.length; ++i) { - if (typeof object.HallData[i] !== "object") - throw TypeError(".gamehall.SCHallRoomList.HallData: object expected"); - message.HallData[i] = $root.gamehall.HallInfo.fromObject(object.HallData[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCHallRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.SCHallRoomList} message SCHallRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHallRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.Params = []; - object.Rooms = []; - object.HallData = []; - } - if (options.defaults) { - object.HallId = 0; - object.GameId = 0; - object.GameMode = 0; - object.IsAdd = false; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - if (message.IsAdd != null && message.hasOwnProperty("IsAdd")) - object.IsAdd = message.IsAdd; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.Rooms && message.Rooms.length) { - object.Rooms = []; - for (var j = 0; j < message.Rooms.length; ++j) - object.Rooms[j] = $root.gamehall.RoomInfo.toObject(message.Rooms[j], options); - } - if (message.HallData && message.HallData.length) { - object.HallData = []; - for (var j = 0; j < message.HallData.length; ++j) - object.HallData[j] = $root.gamehall.HallInfo.toObject(message.HallData[j], options); - } - return object; - }; - - /** - * Converts this SCHallRoomList to JSON. - * @function toJSON - * @memberof gamehall.SCHallRoomList - * @instance - * @returns {Object.} JSON object - */ - SCHallRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHallRoomList - * @function getTypeUrl - * @memberof gamehall.SCHallRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHallRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHallRoomList"; - }; - - return SCHallRoomList; - })(); - - gamehall.SCRoomPlayerEnter = (function() { - - /** - * Properties of a SCRoomPlayerEnter. - * @memberof gamehall - * @interface ISCRoomPlayerEnter - * @property {number|null} [RoomId] SCRoomPlayerEnter RoomId - * @property {gamehall.IRoomPlayerInfo|null} [Player] SCRoomPlayerEnter Player - */ - - /** - * Constructs a new SCRoomPlayerEnter. - * @memberof gamehall - * @classdesc Represents a SCRoomPlayerEnter. - * @implements ISCRoomPlayerEnter - * @constructor - * @param {gamehall.ISCRoomPlayerEnter=} [properties] Properties to set - */ - function SCRoomPlayerEnter(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomPlayerEnter RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomPlayerEnter - * @instance - */ - SCRoomPlayerEnter.prototype.RoomId = 0; - - /** - * SCRoomPlayerEnter Player. - * @member {gamehall.IRoomPlayerInfo|null|undefined} Player - * @memberof gamehall.SCRoomPlayerEnter - * @instance - */ - SCRoomPlayerEnter.prototype.Player = null; - - /** - * Creates a new SCRoomPlayerEnter instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter=} [properties] Properties to set - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter instance - */ - SCRoomPlayerEnter.create = function create(properties) { - return new SCRoomPlayerEnter(properties); - }; - - /** - * Encodes the specified SCRoomPlayerEnter message. Does not implicitly {@link gamehall.SCRoomPlayerEnter.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter} message SCRoomPlayerEnter message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerEnter.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Player != null && Object.hasOwnProperty.call(message, "Player")) - $root.gamehall.RoomPlayerInfo.encode(message.Player, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCRoomPlayerEnter message, length delimited. Does not implicitly {@link gamehall.SCRoomPlayerEnter.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter} message SCRoomPlayerEnter message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerEnter.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomPlayerEnter message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerEnter.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomPlayerEnter(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Player = $root.gamehall.RoomPlayerInfo.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomPlayerEnter message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerEnter.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomPlayerEnter message. - * @function verify - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomPlayerEnter.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Player != null && message.hasOwnProperty("Player")) { - var error = $root.gamehall.RoomPlayerInfo.verify(message.Player); - if (error) - return "Player." + error; - } - return null; - }; - - /** - * Creates a SCRoomPlayerEnter message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - */ - SCRoomPlayerEnter.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomPlayerEnter) - return object; - var message = new $root.gamehall.SCRoomPlayerEnter(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Player != null) { - if (typeof object.Player !== "object") - throw TypeError(".gamehall.SCRoomPlayerEnter.Player: object expected"); - message.Player = $root.gamehall.RoomPlayerInfo.fromObject(object.Player); - } - return message; - }; - - /** - * Creates a plain object from a SCRoomPlayerEnter message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.SCRoomPlayerEnter} message SCRoomPlayerEnter - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomPlayerEnter.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Player = null; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Player != null && message.hasOwnProperty("Player")) - object.Player = $root.gamehall.RoomPlayerInfo.toObject(message.Player, options); - return object; - }; - - /** - * Converts this SCRoomPlayerEnter to JSON. - * @function toJSON - * @memberof gamehall.SCRoomPlayerEnter - * @instance - * @returns {Object.} JSON object - */ - SCRoomPlayerEnter.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomPlayerEnter - * @function getTypeUrl - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomPlayerEnter.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomPlayerEnter"; - }; - - return SCRoomPlayerEnter; - })(); - - gamehall.SCRoomPlayerLeave = (function() { - - /** - * Properties of a SCRoomPlayerLeave. - * @memberof gamehall - * @interface ISCRoomPlayerLeave - * @property {number|null} [RoomId] SCRoomPlayerLeave RoomId - * @property {number|null} [Pos] SCRoomPlayerLeave Pos - */ - - /** - * Constructs a new SCRoomPlayerLeave. - * @memberof gamehall - * @classdesc Represents a SCRoomPlayerLeave. - * @implements ISCRoomPlayerLeave - * @constructor - * @param {gamehall.ISCRoomPlayerLeave=} [properties] Properties to set - */ - function SCRoomPlayerLeave(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomPlayerLeave RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomPlayerLeave - * @instance - */ - SCRoomPlayerLeave.prototype.RoomId = 0; - - /** - * SCRoomPlayerLeave Pos. - * @member {number} Pos - * @memberof gamehall.SCRoomPlayerLeave - * @instance - */ - SCRoomPlayerLeave.prototype.Pos = 0; - - /** - * Creates a new SCRoomPlayerLeave instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave=} [properties] Properties to set - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave instance - */ - SCRoomPlayerLeave.create = function create(properties) { - return new SCRoomPlayerLeave(properties); - }; - - /** - * Encodes the specified SCRoomPlayerLeave message. Does not implicitly {@link gamehall.SCRoomPlayerLeave.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave} message SCRoomPlayerLeave message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerLeave.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Pos); - return writer; - }; - - /** - * Encodes the specified SCRoomPlayerLeave message, length delimited. Does not implicitly {@link gamehall.SCRoomPlayerLeave.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave} message SCRoomPlayerLeave message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerLeave.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomPlayerLeave message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerLeave.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomPlayerLeave(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Pos = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomPlayerLeave message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerLeave.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomPlayerLeave message. - * @function verify - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomPlayerLeave.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - return null; - }; - - /** - * Creates a SCRoomPlayerLeave message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - */ - SCRoomPlayerLeave.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomPlayerLeave) - return object; - var message = new $root.gamehall.SCRoomPlayerLeave(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Pos != null) - message.Pos = object.Pos | 0; - return message; - }; - - /** - * Creates a plain object from a SCRoomPlayerLeave message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.SCRoomPlayerLeave} message SCRoomPlayerLeave - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomPlayerLeave.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Pos = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - return object; - }; - - /** - * Converts this SCRoomPlayerLeave to JSON. - * @function toJSON - * @memberof gamehall.SCRoomPlayerLeave - * @instance - * @returns {Object.} JSON object - */ - SCRoomPlayerLeave.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomPlayerLeave - * @function getTypeUrl - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomPlayerLeave.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomPlayerLeave"; - }; - - return SCRoomPlayerLeave; - })(); - - gamehall.SCRoomStateChange = (function() { - - /** - * Properties of a SCRoomStateChange. - * @memberof gamehall - * @interface ISCRoomStateChange - * @property {number|null} [RoomId] SCRoomStateChange RoomId - * @property {boolean|null} [Starting] SCRoomStateChange Starting - * @property {number|null} [State] SCRoomStateChange State - */ - - /** - * Constructs a new SCRoomStateChange. - * @memberof gamehall - * @classdesc Represents a SCRoomStateChange. - * @implements ISCRoomStateChange - * @constructor - * @param {gamehall.ISCRoomStateChange=} [properties] Properties to set - */ - function SCRoomStateChange(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomStateChange RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.RoomId = 0; - - /** - * SCRoomStateChange Starting. - * @member {boolean} Starting - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.Starting = false; - - /** - * SCRoomStateChange State. - * @member {number} State - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.State = 0; - - /** - * Creates a new SCRoomStateChange instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange=} [properties] Properties to set - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange instance - */ - SCRoomStateChange.create = function create(properties) { - return new SCRoomStateChange(properties); - }; - - /** - * Encodes the specified SCRoomStateChange message. Does not implicitly {@link gamehall.SCRoomStateChange.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange} message SCRoomStateChange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomStateChange.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Starting != null && Object.hasOwnProperty.call(message, "Starting")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.Starting); - if (message.State != null && Object.hasOwnProperty.call(message, "State")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.State); - return writer; - }; - - /** - * Encodes the specified SCRoomStateChange message, length delimited. Does not implicitly {@link gamehall.SCRoomStateChange.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange} message SCRoomStateChange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomStateChange.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomStateChange message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomStateChange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomStateChange.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomStateChange(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Starting = reader.bool(); - break; - } - case 3: { - message.State = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomStateChange message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomStateChange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomStateChange.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomStateChange message. - * @function verify - * @memberof gamehall.SCRoomStateChange - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomStateChange.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Starting != null && message.hasOwnProperty("Starting")) - if (typeof message.Starting !== "boolean") - return "Starting: boolean expected"; - if (message.State != null && message.hasOwnProperty("State")) - if (!$util.isInteger(message.State)) - return "State: integer expected"; - return null; - }; - - /** - * Creates a SCRoomStateChange message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomStateChange - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - */ - SCRoomStateChange.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomStateChange) - return object; - var message = new $root.gamehall.SCRoomStateChange(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Starting != null) - message.Starting = Boolean(object.Starting); - if (object.State != null) - message.State = object.State | 0; - return message; - }; - - /** - * Creates a plain object from a SCRoomStateChange message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.SCRoomStateChange} message SCRoomStateChange - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomStateChange.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Starting = false; - object.State = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Starting != null && message.hasOwnProperty("Starting")) - object.Starting = message.Starting; - if (message.State != null && message.hasOwnProperty("State")) - object.State = message.State; - return object; - }; - - /** - * Converts this SCRoomStateChange to JSON. - * @function toJSON - * @memberof gamehall.SCRoomStateChange - * @instance - * @returns {Object.} JSON object - */ - SCRoomStateChange.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomStateChange - * @function getTypeUrl - * @memberof gamehall.SCRoomStateChange - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomStateChange.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomStateChange"; - }; - - return SCRoomStateChange; - })(); - - gamehall.CSCreateRoom = (function() { - - /** - * Properties of a CSCreateRoom. - * @memberof gamehall - * @interface ICSCreateRoom - * @property {number|null} [GameId] CSCreateRoom GameId - * @property {number|null} [BaseCoin] CSCreateRoom BaseCoin - * @property {number|null} [SceneMode] CSCreateRoom SceneMode - * @property {number|null} [MaxPlayerNum] CSCreateRoom MaxPlayerNum - * @property {Array.|null} [Params] CSCreateRoom Params - */ - - /** - * Constructs a new CSCreateRoom. - * @memberof gamehall - * @classdesc Represents a CSCreateRoom. - * @implements ICSCreateRoom - * @constructor - * @param {gamehall.ICSCreateRoom=} [properties] Properties to set - */ - function CSCreateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCreateRoom GameId. - * @member {number} GameId - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.GameId = 0; - - /** - * CSCreateRoom BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.BaseCoin = 0; - - /** - * CSCreateRoom SceneMode. - * @member {number} SceneMode - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.SceneMode = 0; - - /** - * CSCreateRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.MaxPlayerNum = 0; - - /** - * CSCreateRoom Params. - * @member {Array.} Params - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.Params = $util.emptyArray; - - /** - * Creates a new CSCreateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom=} [properties] Properties to set - * @returns {gamehall.CSCreateRoom} CSCreateRoom instance - */ - CSCreateRoom.create = function create(properties) { - return new CSCreateRoom(properties); - }; - - /** - * Encodes the specified CSCreateRoom message. Does not implicitly {@link gamehall.CSCreateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom} message CSCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.BaseCoin); - if (message.SceneMode != null && Object.hasOwnProperty.call(message, "SceneMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SceneMode); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxPlayerNum); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified CSCreateRoom message, length delimited. Does not implicitly {@link gamehall.CSCreateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom} message CSCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCreateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCreateRoom} CSCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCreateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.BaseCoin = reader.int32(); - break; - } - case 3: { - message.SceneMode = reader.int32(); - break; - } - case 4: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCreateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCreateRoom} CSCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCreateRoom message. - * @function verify - * @memberof gamehall.CSCreateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCreateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - if (!$util.isInteger(message.SceneMode)) - return "SceneMode: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - return null; - }; - - /** - * Creates a CSCreateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCreateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCreateRoom} CSCreateRoom - */ - CSCreateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCreateRoom) - return object; - var message = new $root.gamehall.CSCreateRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.SceneMode != null) - message.SceneMode = object.SceneMode | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.CSCreateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a CSCreateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.CSCreateRoom} message CSCreateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCreateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.BaseCoin = 0; - object.SceneMode = 0; - object.MaxPlayerNum = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - object.SceneMode = message.SceneMode; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - return object; - }; - - /** - * Converts this CSCreateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCreateRoom - * @instance - * @returns {Object.} JSON object - */ - CSCreateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCreateRoom - * @function getTypeUrl - * @memberof gamehall.CSCreateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCreateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCreateRoom"; - }; - - return CSCreateRoom; - })(); - - gamehall.SCCreateRoom = (function() { - - /** - * Properties of a SCCreateRoom. - * @memberof gamehall - * @interface ISCCreateRoom - * @property {number|null} [GameId] SCCreateRoom GameId - * @property {number|null} [BaseCoin] SCCreateRoom BaseCoin - * @property {number|null} [SceneMode] SCCreateRoom SceneMode - * @property {number|null} [MaxPlayerNum] SCCreateRoom MaxPlayerNum - * @property {Array.|null} [Params] SCCreateRoom Params - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCCreateRoom OpRetCode - */ - - /** - * Constructs a new SCCreateRoom. - * @memberof gamehall - * @classdesc Represents a SCCreateRoom. - * @implements ISCCreateRoom - * @constructor - * @param {gamehall.ISCCreateRoom=} [properties] Properties to set - */ - function SCCreateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCreateRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.GameId = 0; - - /** - * SCCreateRoom BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.BaseCoin = 0; - - /** - * SCCreateRoom SceneMode. - * @member {number} SceneMode - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.SceneMode = 0; - - /** - * SCCreateRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.MaxPlayerNum = 0; - - /** - * SCCreateRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.Params = $util.emptyArray; - - /** - * SCCreateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.OpRetCode = 0; - - /** - * Creates a new SCCreateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom=} [properties] Properties to set - * @returns {gamehall.SCCreateRoom} SCCreateRoom instance - */ - SCCreateRoom.create = function create(properties) { - return new SCCreateRoom(properties); - }; - - /** - * Encodes the specified SCCreateRoom message. Does not implicitly {@link gamehall.SCCreateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom} message SCCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.BaseCoin); - if (message.SceneMode != null && Object.hasOwnProperty.call(message, "SceneMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SceneMode); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxPlayerNum); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCCreateRoom message, length delimited. Does not implicitly {@link gamehall.SCCreateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom} message SCCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCreateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCreateRoom} SCCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCreateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.BaseCoin = reader.int32(); - break; - } - case 3: { - message.SceneMode = reader.int32(); - break; - } - case 4: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCreateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCreateRoom} SCCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCreateRoom message. - * @function verify - * @memberof gamehall.SCCreateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCreateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - if (!$util.isInteger(message.SceneMode)) - return "SceneMode: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCCreateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCreateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCreateRoom} SCCreateRoom - */ - SCCreateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCreateRoom) - return object; - var message = new $root.gamehall.SCCreateRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.SceneMode != null) - message.SceneMode = object.SceneMode | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCCreateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCCreateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.SCCreateRoom} message SCCreateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCreateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.BaseCoin = 0; - object.SceneMode = 0; - object.MaxPlayerNum = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - object.SceneMode = message.SceneMode; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCCreateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCreateRoom - * @instance - * @returns {Object.} JSON object - */ - SCCreateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCreateRoom - * @function getTypeUrl - * @memberof gamehall.SCCreateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCreateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCreateRoom"; - }; - - return SCCreateRoom; - })(); - - gamehall.CSDestroyRoom = (function() { - - /** - * Properties of a CSDestroyRoom. - * @memberof gamehall - * @interface ICSDestroyRoom - */ - - /** - * Constructs a new CSDestroyRoom. - * @memberof gamehall - * @classdesc Represents a CSDestroyRoom. - * @implements ICSDestroyRoom - * @constructor - * @param {gamehall.ICSDestroyRoom=} [properties] Properties to set - */ - function CSDestroyRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSDestroyRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom=} [properties] Properties to set - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom instance - */ - CSDestroyRoom.create = function create(properties) { - return new CSDestroyRoom(properties); - }; - - /** - * Encodes the specified CSDestroyRoom message. Does not implicitly {@link gamehall.CSDestroyRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom} message CSDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSDestroyRoom message, length delimited. Does not implicitly {@link gamehall.CSDestroyRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom} message CSDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSDestroyRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSDestroyRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSDestroyRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSDestroyRoom message. - * @function verify - * @memberof gamehall.CSDestroyRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSDestroyRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSDestroyRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSDestroyRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - */ - CSDestroyRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSDestroyRoom) - return object; - return new $root.gamehall.CSDestroyRoom(); - }; - - /** - * Creates a plain object from a CSDestroyRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.CSDestroyRoom} message CSDestroyRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSDestroyRoom.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSDestroyRoom to JSON. - * @function toJSON - * @memberof gamehall.CSDestroyRoom - * @instance - * @returns {Object.} JSON object - */ - CSDestroyRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSDestroyRoom - * @function getTypeUrl - * @memberof gamehall.CSDestroyRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSDestroyRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSDestroyRoom"; - }; - - return CSDestroyRoom; - })(); - - gamehall.SCDestroyRoom = (function() { - - /** - * Properties of a SCDestroyRoom. - * @memberof gamehall - * @interface ISCDestroyRoom - * @property {number|null} [RoomId] SCDestroyRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCDestroyRoom OpRetCode - * @property {number|null} [IsForce] SCDestroyRoom IsForce - */ - - /** - * Constructs a new SCDestroyRoom. - * @memberof gamehall - * @classdesc Represents a SCDestroyRoom. - * @implements ISCDestroyRoom - * @constructor - * @param {gamehall.ISCDestroyRoom=} [properties] Properties to set - */ - function SCDestroyRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCDestroyRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.RoomId = 0; - - /** - * SCDestroyRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.OpRetCode = 0; - - /** - * SCDestroyRoom IsForce. - * @member {number} IsForce - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.IsForce = 0; - - /** - * Creates a new SCDestroyRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom=} [properties] Properties to set - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom instance - */ - SCDestroyRoom.create = function create(properties) { - return new SCDestroyRoom(properties); - }; - - /** - * Encodes the specified SCDestroyRoom message. Does not implicitly {@link gamehall.SCDestroyRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom} message SCDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.IsForce != null && Object.hasOwnProperty.call(message, "IsForce")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.IsForce); - return writer; - }; - - /** - * Encodes the specified SCDestroyRoom message, length delimited. Does not implicitly {@link gamehall.SCDestroyRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom} message SCDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCDestroyRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCDestroyRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.IsForce = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCDestroyRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCDestroyRoom message. - * @function verify - * @memberof gamehall.SCDestroyRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCDestroyRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.IsForce != null && message.hasOwnProperty("IsForce")) - if (!$util.isInteger(message.IsForce)) - return "IsForce: integer expected"; - return null; - }; - - /** - * Creates a SCDestroyRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCDestroyRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - */ - SCDestroyRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCDestroyRoom) - return object; - var message = new $root.gamehall.SCDestroyRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.IsForce != null) - message.IsForce = object.IsForce | 0; - return message; - }; - - /** - * Creates a plain object from a SCDestroyRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.SCDestroyRoom} message SCDestroyRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCDestroyRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.IsForce = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.IsForce != null && message.hasOwnProperty("IsForce")) - object.IsForce = message.IsForce; - return object; - }; - - /** - * Converts this SCDestroyRoom to JSON. - * @function toJSON - * @memberof gamehall.SCDestroyRoom - * @instance - * @returns {Object.} JSON object - */ - SCDestroyRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCDestroyRoom - * @function getTypeUrl - * @memberof gamehall.SCDestroyRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCDestroyRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCDestroyRoom"; - }; - - return SCDestroyRoom; - })(); - - gamehall.CSEnterRoom = (function() { - - /** - * Properties of a CSEnterRoom. - * @memberof gamehall - * @interface ICSEnterRoom - * @property {number|null} [RoomId] CSEnterRoom RoomId - * @property {number|null} [GameId] CSEnterRoom GameId - */ - - /** - * Constructs a new CSEnterRoom. - * @memberof gamehall - * @classdesc Represents a CSEnterRoom. - * @implements ICSEnterRoom - * @constructor - * @param {gamehall.ICSEnterRoom=} [properties] Properties to set - */ - function CSEnterRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSEnterRoom - * @instance - */ - CSEnterRoom.prototype.RoomId = 0; - - /** - * CSEnterRoom GameId. - * @member {number} GameId - * @memberof gamehall.CSEnterRoom - * @instance - */ - CSEnterRoom.prototype.GameId = 0; - - /** - * Creates a new CSEnterRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom=} [properties] Properties to set - * @returns {gamehall.CSEnterRoom} CSEnterRoom instance - */ - CSEnterRoom.create = function create(properties) { - return new CSEnterRoom(properties); - }; - - /** - * Encodes the specified CSEnterRoom message. Does not implicitly {@link gamehall.CSEnterRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom} message CSEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSEnterRoom message, length delimited. Does not implicitly {@link gamehall.CSEnterRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom} message CSEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterRoom} CSEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterRoom} CSEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterRoom message. - * @function verify - * @memberof gamehall.CSEnterRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterRoom} CSEnterRoom - */ - CSEnterRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterRoom) - return object; - var message = new $root.gamehall.CSEnterRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.CSEnterRoom} message CSEnterRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.GameId = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSEnterRoom to JSON. - * @function toJSON - * @memberof gamehall.CSEnterRoom - * @instance - * @returns {Object.} JSON object - */ - CSEnterRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterRoom - * @function getTypeUrl - * @memberof gamehall.CSEnterRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterRoom"; - }; - - return CSEnterRoom; - })(); - - gamehall.SCEnterRoom = (function() { - - /** - * Properties of a SCEnterRoom. - * @memberof gamehall - * @interface ISCEnterRoom - * @property {number|null} [GameId] SCEnterRoom GameId - * @property {number|null} [ModeType] SCEnterRoom ModeType - * @property {Array.|null} [Params] SCEnterRoom Params - * @property {number|null} [RoomId] SCEnterRoom RoomId - * @property {number|null} [HallId] SCEnterRoom HallId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterRoom OpRetCode - * @property {number|null} [ClubId] SCEnterRoom ClubId - */ - - /** - * Constructs a new SCEnterRoom. - * @memberof gamehall - * @classdesc Represents a SCEnterRoom. - * @implements ISCEnterRoom - * @constructor - * @param {gamehall.ISCEnterRoom=} [properties] Properties to set - */ - function SCEnterRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.GameId = 0; - - /** - * SCEnterRoom ModeType. - * @member {number} ModeType - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.ModeType = 0; - - /** - * SCEnterRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.Params = $util.emptyArray; - - /** - * SCEnterRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.RoomId = 0; - - /** - * SCEnterRoom HallId. - * @member {number} HallId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.HallId = 0; - - /** - * SCEnterRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.OpRetCode = 0; - - /** - * SCEnterRoom ClubId. - * @member {number} ClubId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.ClubId = 0; - - /** - * Creates a new SCEnterRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom=} [properties] Properties to set - * @returns {gamehall.SCEnterRoom} SCEnterRoom instance - */ - SCEnterRoom.create = function create(properties) { - return new SCEnterRoom(properties); - }; - - /** - * Encodes the specified SCEnterRoom message. Does not implicitly {@link gamehall.SCEnterRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom} message SCEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.ModeType != null && Object.hasOwnProperty.call(message, "ModeType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ModeType); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.HallId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.OpRetCode); - if (message.ClubId != null && Object.hasOwnProperty.call(message, "ClubId")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.ClubId); - return writer; - }; - - /** - * Encodes the specified SCEnterRoom message, length delimited. Does not implicitly {@link gamehall.SCEnterRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom} message SCEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterRoom} SCEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.ModeType = reader.int32(); - break; - } - case 3: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - case 5: { - message.HallId = reader.int32(); - break; - } - case 6: { - message.OpRetCode = reader.int32(); - break; - } - case 7: { - message.ClubId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterRoom} SCEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterRoom message. - * @function verify - * @memberof gamehall.SCEnterRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - if (!$util.isInteger(message.ModeType)) - return "ModeType: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - if (!$util.isInteger(message.ClubId)) - return "ClubId: integer expected"; - return null; - }; - - /** - * Creates a SCEnterRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterRoom} SCEnterRoom - */ - SCEnterRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterRoom) - return object; - var message = new $root.gamehall.SCEnterRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.ModeType != null) - message.ModeType = object.ModeType | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCEnterRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.HallId != null) - message.HallId = object.HallId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.ClubId != null) - message.ClubId = object.ClubId | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.SCEnterRoom} message SCEnterRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.ModeType = 0; - object.RoomId = 0; - object.HallId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.ClubId = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - object.ModeType = message.ModeType; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - object.ClubId = message.ClubId; - return object; - }; - - /** - * Converts this SCEnterRoom to JSON. - * @function toJSON - * @memberof gamehall.SCEnterRoom - * @instance - * @returns {Object.} JSON object - */ - SCEnterRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterRoom - * @function getTypeUrl - * @memberof gamehall.SCEnterRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterRoom"; - }; - - return SCEnterRoom; - })(); - - gamehall.CSLeaveRoom = (function() { - - /** - * Properties of a CSLeaveRoom. - * @memberof gamehall - * @interface ICSLeaveRoom - * @property {number|null} [Mode] CSLeaveRoom Mode - */ - - /** - * Constructs a new CSLeaveRoom. - * @memberof gamehall - * @classdesc Represents a CSLeaveRoom. - * @implements ICSLeaveRoom - * @constructor - * @param {gamehall.ICSLeaveRoom=} [properties] Properties to set - */ - function CSLeaveRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSLeaveRoom Mode. - * @member {number} Mode - * @memberof gamehall.CSLeaveRoom - * @instance - */ - CSLeaveRoom.prototype.Mode = 0; - - /** - * Creates a new CSLeaveRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom=} [properties] Properties to set - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom instance - */ - CSLeaveRoom.create = function create(properties) { - return new CSLeaveRoom(properties); - }; - - /** - * Encodes the specified CSLeaveRoom message. Does not implicitly {@link gamehall.CSLeaveRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom} message CSLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Mode != null && Object.hasOwnProperty.call(message, "Mode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Mode); - return writer; - }; - - /** - * Encodes the specified CSLeaveRoom message, length delimited. Does not implicitly {@link gamehall.CSLeaveRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom} message CSLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Mode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveRoom message. - * @function verify - * @memberof gamehall.CSLeaveRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Mode != null && message.hasOwnProperty("Mode")) - if (!$util.isInteger(message.Mode)) - return "Mode: integer expected"; - return null; - }; - - /** - * Creates a CSLeaveRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - */ - CSLeaveRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveRoom) - return object; - var message = new $root.gamehall.CSLeaveRoom(); - if (object.Mode != null) - message.Mode = object.Mode | 0; - return message; - }; - - /** - * Creates a plain object from a CSLeaveRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.CSLeaveRoom} message CSLeaveRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.Mode = 0; - if (message.Mode != null && message.hasOwnProperty("Mode")) - object.Mode = message.Mode; - return object; - }; - - /** - * Converts this CSLeaveRoom to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveRoom - * @instance - * @returns {Object.} JSON object - */ - CSLeaveRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveRoom - * @function getTypeUrl - * @memberof gamehall.CSLeaveRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveRoom"; - }; - - return CSLeaveRoom; - })(); - - gamehall.SCLeaveRoom = (function() { - - /** - * Properties of a SCLeaveRoom. - * @memberof gamehall - * @interface ISCLeaveRoom - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveRoom OpRetCode - * @property {number|null} [Reason] SCLeaveRoom Reason - * @property {number|null} [RoomId] SCLeaveRoom RoomId - * @property {number|null} [Mode] SCLeaveRoom Mode - */ - - /** - * Constructs a new SCLeaveRoom. - * @memberof gamehall - * @classdesc Represents a SCLeaveRoom. - * @implements ISCLeaveRoom - * @constructor - * @param {gamehall.ISCLeaveRoom=} [properties] Properties to set - */ - function SCLeaveRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.OpRetCode = 0; - - /** - * SCLeaveRoom Reason. - * @member {number} Reason - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.Reason = 0; - - /** - * SCLeaveRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.RoomId = 0; - - /** - * SCLeaveRoom Mode. - * @member {number} Mode - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.Mode = 0; - - /** - * Creates a new SCLeaveRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom=} [properties] Properties to set - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom instance - */ - SCLeaveRoom.create = function create(properties) { - return new SCLeaveRoom(properties); - }; - - /** - * Encodes the specified SCLeaveRoom message. Does not implicitly {@link gamehall.SCLeaveRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom} message SCLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Reason != null && Object.hasOwnProperty.call(message, "Reason")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Reason); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.Mode != null && Object.hasOwnProperty.call(message, "Mode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Mode); - return writer; - }; - - /** - * Encodes the specified SCLeaveRoom message, length delimited. Does not implicitly {@link gamehall.SCLeaveRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom} message SCLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Reason = reader.int32(); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.Mode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveRoom message. - * @function verify - * @memberof gamehall.SCLeaveRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Reason != null && message.hasOwnProperty("Reason")) - if (!$util.isInteger(message.Reason)) - return "Reason: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Mode != null && message.hasOwnProperty("Mode")) - if (!$util.isInteger(message.Mode)) - return "Mode: integer expected"; - return null; - }; - - /** - * Creates a SCLeaveRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - */ - SCLeaveRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveRoom) - return object; - var message = new $root.gamehall.SCLeaveRoom(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Reason != null) - message.Reason = object.Reason | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Mode != null) - message.Mode = object.Mode | 0; - return message; - }; - - /** - * Creates a plain object from a SCLeaveRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.SCLeaveRoom} message SCLeaveRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Reason = 0; - object.RoomId = 0; - object.Mode = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Reason != null && message.hasOwnProperty("Reason")) - object.Reason = message.Reason; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Mode != null && message.hasOwnProperty("Mode")) - object.Mode = message.Mode; - return object; - }; - - /** - * Converts this SCLeaveRoom to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveRoom - * @instance - * @returns {Object.} JSON object - */ - SCLeaveRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveRoom - * @function getTypeUrl - * @memberof gamehall.SCLeaveRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveRoom"; - }; - - return SCLeaveRoom; - })(); - - gamehall.CSReturnRoom = (function() { - - /** - * Properties of a CSReturnRoom. - * @memberof gamehall - * @interface ICSReturnRoom - * @property {number|null} [ApkVer] CSReturnRoom ApkVer - * @property {number|null} [ResVer] CSReturnRoom ResVer - * @property {boolean|null} [IsLoaded] CSReturnRoom IsLoaded - * @property {number|null} [RoomId] CSReturnRoom RoomId - */ - - /** - * Constructs a new CSReturnRoom. - * @memberof gamehall - * @classdesc Represents a CSReturnRoom. - * @implements ICSReturnRoom - * @constructor - * @param {gamehall.ICSReturnRoom=} [properties] Properties to set - */ - function CSReturnRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSReturnRoom ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.ApkVer = 0; - - /** - * CSReturnRoom ResVer. - * @member {number} ResVer - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.ResVer = 0; - - /** - * CSReturnRoom IsLoaded. - * @member {boolean} IsLoaded - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.IsLoaded = false; - - /** - * CSReturnRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.RoomId = 0; - - /** - * Creates a new CSReturnRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom=} [properties] Properties to set - * @returns {gamehall.CSReturnRoom} CSReturnRoom instance - */ - CSReturnRoom.create = function create(properties) { - return new CSReturnRoom(properties); - }; - - /** - * Encodes the specified CSReturnRoom message. Does not implicitly {@link gamehall.CSReturnRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom} message CSReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReturnRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ResVer); - if (message.IsLoaded != null && Object.hasOwnProperty.call(message, "IsLoaded")) - writer.uint32(/* id 3, wireType 0 =*/24).bool(message.IsLoaded); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSReturnRoom message, length delimited. Does not implicitly {@link gamehall.CSReturnRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom} message CSReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReturnRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReturnRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReturnRoom} CSReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReturnRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReturnRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ApkVer = reader.int32(); - break; - } - case 2: { - message.ResVer = reader.int32(); - break; - } - case 3: { - message.IsLoaded = reader.bool(); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReturnRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReturnRoom} CSReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReturnRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReturnRoom message. - * @function verify - * @memberof gamehall.CSReturnRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReturnRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - if (typeof message.IsLoaded !== "boolean") - return "IsLoaded: boolean expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSReturnRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReturnRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReturnRoom} CSReturnRoom - */ - CSReturnRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReturnRoom) - return object; - var message = new $root.gamehall.CSReturnRoom(); - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - if (object.IsLoaded != null) - message.IsLoaded = Boolean(object.IsLoaded); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSReturnRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.CSReturnRoom} message CSReturnRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReturnRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ApkVer = 0; - object.ResVer = 0; - object.IsLoaded = false; - object.RoomId = 0; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - object.IsLoaded = message.IsLoaded; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSReturnRoom to JSON. - * @function toJSON - * @memberof gamehall.CSReturnRoom - * @instance - * @returns {Object.} JSON object - */ - CSReturnRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReturnRoom - * @function getTypeUrl - * @memberof gamehall.CSReturnRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReturnRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReturnRoom"; - }; - - return CSReturnRoom; - })(); - - gamehall.SCReturnRoom = (function() { - - /** - * Properties of a SCReturnRoom. - * @memberof gamehall - * @interface ISCReturnRoom - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCReturnRoom OpRetCode - * @property {number|null} [RoomId] SCReturnRoom RoomId - * @property {number|null} [GameId] SCReturnRoom GameId - * @property {number|null} [ModeType] SCReturnRoom ModeType - * @property {Array.|null} [Params] SCReturnRoom Params - * @property {number|null} [HallId] SCReturnRoom HallId - * @property {number|null} [MinApkVer] SCReturnRoom MinApkVer - * @property {number|null} [LatestApkVer] SCReturnRoom LatestApkVer - * @property {number|null} [MinResVer] SCReturnRoom MinResVer - * @property {number|null} [LatestResVer] SCReturnRoom LatestResVer - * @property {boolean|null} [IsLoaded] SCReturnRoom IsLoaded - * @property {number|null} [ClubId] SCReturnRoom ClubId - */ - - /** - * Constructs a new SCReturnRoom. - * @memberof gamehall - * @classdesc Represents a SCReturnRoom. - * @implements ISCReturnRoom - * @constructor - * @param {gamehall.ISCReturnRoom=} [properties] Properties to set - */ - function SCReturnRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReturnRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.OpRetCode = 0; - - /** - * SCReturnRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.RoomId = 0; - - /** - * SCReturnRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.GameId = 0; - - /** - * SCReturnRoom ModeType. - * @member {number} ModeType - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.ModeType = 0; - - /** - * SCReturnRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.Params = $util.emptyArray; - - /** - * SCReturnRoom HallId. - * @member {number} HallId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.HallId = 0; - - /** - * SCReturnRoom MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.MinApkVer = 0; - - /** - * SCReturnRoom LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.LatestApkVer = 0; - - /** - * SCReturnRoom MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.MinResVer = 0; - - /** - * SCReturnRoom LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.LatestResVer = 0; - - /** - * SCReturnRoom IsLoaded. - * @member {boolean} IsLoaded - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.IsLoaded = false; - - /** - * SCReturnRoom ClubId. - * @member {number} ClubId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.ClubId = 0; - - /** - * Creates a new SCReturnRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom=} [properties] Properties to set - * @returns {gamehall.SCReturnRoom} SCReturnRoom instance - */ - SCReturnRoom.create = function create(properties) { - return new SCReturnRoom(properties); - }; - - /** - * Encodes the specified SCReturnRoom message. Does not implicitly {@link gamehall.SCReturnRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom} message SCReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReturnRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - if (message.ModeType != null && Object.hasOwnProperty.call(message, "ModeType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ModeType); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.HallId); - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.LatestResVer); - if (message.IsLoaded != null && Object.hasOwnProperty.call(message, "IsLoaded")) - writer.uint32(/* id 11, wireType 0 =*/88).bool(message.IsLoaded); - if (message.ClubId != null && Object.hasOwnProperty.call(message, "ClubId")) - writer.uint32(/* id 12, wireType 0 =*/96).int32(message.ClubId); - return writer; - }; - - /** - * Encodes the specified SCReturnRoom message, length delimited. Does not implicitly {@link gamehall.SCReturnRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom} message SCReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReturnRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReturnRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReturnRoom} SCReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReturnRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReturnRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - case 4: { - message.ModeType = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - message.HallId = reader.int32(); - break; - } - case 7: { - message.MinApkVer = reader.int32(); - break; - } - case 8: { - message.LatestApkVer = reader.int32(); - break; - } - case 9: { - message.MinResVer = reader.int32(); - break; - } - case 10: { - message.LatestResVer = reader.int32(); - break; - } - case 11: { - message.IsLoaded = reader.bool(); - break; - } - case 12: { - message.ClubId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReturnRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReturnRoom} SCReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReturnRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReturnRoom message. - * @function verify - * @memberof gamehall.SCReturnRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReturnRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - if (!$util.isInteger(message.ModeType)) - return "ModeType: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - if (typeof message.IsLoaded !== "boolean") - return "IsLoaded: boolean expected"; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - if (!$util.isInteger(message.ClubId)) - return "ClubId: integer expected"; - return null; - }; - - /** - * Creates a SCReturnRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReturnRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReturnRoom} SCReturnRoom - */ - SCReturnRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReturnRoom) - return object; - var message = new $root.gamehall.SCReturnRoom(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.ModeType != null) - message.ModeType = object.ModeType | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCReturnRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.HallId != null) - message.HallId = object.HallId | 0; - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - if (object.IsLoaded != null) - message.IsLoaded = Boolean(object.IsLoaded); - if (object.ClubId != null) - message.ClubId = object.ClubId | 0; - return message; - }; - - /** - * Creates a plain object from a SCReturnRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.SCReturnRoom} message SCReturnRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReturnRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.RoomId = 0; - object.GameId = 0; - object.ModeType = 0; - object.HallId = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - object.IsLoaded = false; - object.ClubId = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - object.ModeType = message.ModeType; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - object.IsLoaded = message.IsLoaded; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - object.ClubId = message.ClubId; - return object; - }; - - /** - * Converts this SCReturnRoom to JSON. - * @function toJSON - * @memberof gamehall.SCReturnRoom - * @instance - * @returns {Object.} JSON object - */ - SCReturnRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReturnRoom - * @function getTypeUrl - * @memberof gamehall.SCReturnRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReturnRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReturnRoom"; - }; - - return SCReturnRoom; - })(); - - gamehall.CSGetGameRec = (function() { - - /** - * Properties of a CSGetGameRec. - * @memberof gamehall - * @interface ICSGetGameRec - * @property {number|null} [Ver] CSGetGameRec Ver - * @property {number|null} [GameId] CSGetGameRec GameId - */ - - /** - * Constructs a new CSGetGameRec. - * @memberof gamehall - * @classdesc Represents a CSGetGameRec. - * @implements ICSGetGameRec - * @constructor - * @param {gamehall.ICSGetGameRec=} [properties] Properties to set - */ - function CSGetGameRec(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetGameRec Ver. - * @member {number} Ver - * @memberof gamehall.CSGetGameRec - * @instance - */ - CSGetGameRec.prototype.Ver = 0; - - /** - * CSGetGameRec GameId. - * @member {number} GameId - * @memberof gamehall.CSGetGameRec - * @instance - */ - CSGetGameRec.prototype.GameId = 0; - - /** - * Creates a new CSGetGameRec instance using the specified properties. - * @function create - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec=} [properties] Properties to set - * @returns {gamehall.CSGetGameRec} CSGetGameRec instance - */ - CSGetGameRec.create = function create(properties) { - return new CSGetGameRec(properties); - }; - - /** - * Encodes the specified CSGetGameRec message. Does not implicitly {@link gamehall.CSGetGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec} message CSGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ver != null && Object.hasOwnProperty.call(message, "Ver")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Ver); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSGetGameRec message, length delimited. Does not implicitly {@link gamehall.CSGetGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec} message CSGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetGameRec} CSGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ver = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetGameRec} CSGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetGameRec message. - * @function verify - * @memberof gamehall.CSGetGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ver != null && message.hasOwnProperty("Ver")) - if (!$util.isInteger(message.Ver)) - return "Ver: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSGetGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetGameRec} CSGetGameRec - */ - CSGetGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetGameRec) - return object; - var message = new $root.gamehall.CSGetGameRec(); - if (object.Ver != null) - message.Ver = object.Ver | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.CSGetGameRec} message CSGetGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Ver = 0; - object.GameId = 0; - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - object.Ver = message.Ver; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSGetGameRec to JSON. - * @function toJSON - * @memberof gamehall.CSGetGameRec - * @instance - * @returns {Object.} JSON object - */ - CSGetGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetGameRec - * @function getTypeUrl - * @memberof gamehall.CSGetGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetGameRec"; - }; - - return CSGetGameRec; - })(); - - gamehall.PlayerGameRec = (function() { - - /** - * Properties of a PlayerGameRec. - * @memberof gamehall - * @interface IPlayerGameRec - * @property {number|null} [Id] PlayerGameRec Id - * @property {string|null} [Name] PlayerGameRec Name - * @property {number|null} [Head] PlayerGameRec Head - * @property {number|Long|null} [Coin] PlayerGameRec Coin - * @property {number|null} [Pos] PlayerGameRec Pos - * @property {Array.|null} [OtherParams] PlayerGameRec OtherParams - */ - - /** - * Constructs a new PlayerGameRec. - * @memberof gamehall - * @classdesc Represents a PlayerGameRec. - * @implements IPlayerGameRec - * @constructor - * @param {gamehall.IPlayerGameRec=} [properties] Properties to set - */ - function PlayerGameRec(properties) { - this.OtherParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerGameRec Id. - * @member {number} Id - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Id = 0; - - /** - * PlayerGameRec Name. - * @member {string} Name - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Name = ""; - - /** - * PlayerGameRec Head. - * @member {number} Head - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Head = 0; - - /** - * PlayerGameRec Coin. - * @member {number|Long} Coin - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerGameRec Pos. - * @member {number} Pos - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Pos = 0; - - /** - * PlayerGameRec OtherParams. - * @member {Array.} OtherParams - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.OtherParams = $util.emptyArray; - - /** - * Creates a new PlayerGameRec instance using the specified properties. - * @function create - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec=} [properties] Properties to set - * @returns {gamehall.PlayerGameRec} PlayerGameRec instance - */ - PlayerGameRec.create = function create(properties) { - return new PlayerGameRec(properties); - }; - - /** - * Encodes the specified PlayerGameRec message. Does not implicitly {@link gamehall.PlayerGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec} message PlayerGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.Head != null && Object.hasOwnProperty.call(message, "Head")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Head); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Coin); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Pos); - if (message.OtherParams != null && message.OtherParams.length) { - writer.uint32(/* id 6, wireType 2 =*/50).fork(); - for (var i = 0; i < message.OtherParams.length; ++i) - writer.int32(message.OtherParams[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified PlayerGameRec message, length delimited. Does not implicitly {@link gamehall.PlayerGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec} message PlayerGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerGameRec} PlayerGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.Head = reader.int32(); - break; - } - case 4: { - message.Coin = reader.int64(); - break; - } - case 5: { - message.Pos = reader.int32(); - break; - } - case 6: { - if (!(message.OtherParams && message.OtherParams.length)) - message.OtherParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherParams.push(reader.int32()); - } else - message.OtherParams.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerGameRec} PlayerGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerGameRec message. - * @function verify - * @memberof gamehall.PlayerGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Head != null && message.hasOwnProperty("Head")) - if (!$util.isInteger(message.Head)) - return "Head: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.OtherParams != null && message.hasOwnProperty("OtherParams")) { - if (!Array.isArray(message.OtherParams)) - return "OtherParams: array expected"; - for (var i = 0; i < message.OtherParams.length; ++i) - if (!$util.isInteger(message.OtherParams[i])) - return "OtherParams: integer[] expected"; - } - return null; - }; - - /** - * Creates a PlayerGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerGameRec} PlayerGameRec - */ - PlayerGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerGameRec) - return object; - var message = new $root.gamehall.PlayerGameRec(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Head != null) - message.Head = object.Head | 0; - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.OtherParams) { - if (!Array.isArray(object.OtherParams)) - throw TypeError(".gamehall.PlayerGameRec.OtherParams: array expected"); - message.OtherParams = []; - for (var i = 0; i < object.OtherParams.length; ++i) - message.OtherParams[i] = object.OtherParams[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a PlayerGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.PlayerGameRec} message PlayerGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OtherParams = []; - if (options.defaults) { - object.Id = 0; - object.Name = ""; - object.Head = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.Pos = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Head != null && message.hasOwnProperty("Head")) - object.Head = message.Head; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.OtherParams && message.OtherParams.length) { - object.OtherParams = []; - for (var j = 0; j < message.OtherParams.length; ++j) - object.OtherParams[j] = message.OtherParams[j]; - } - return object; - }; - - /** - * Converts this PlayerGameRec to JSON. - * @function toJSON - * @memberof gamehall.PlayerGameRec - * @instance - * @returns {Object.} JSON object - */ - PlayerGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerGameRec - * @function getTypeUrl - * @memberof gamehall.PlayerGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerGameRec"; - }; - - return PlayerGameRec; - })(); - - gamehall.GameRec = (function() { - - /** - * Properties of a GameRec. - * @memberof gamehall - * @interface IGameRec - * @property {number|null} [RecId] GameRec RecId - * @property {Array.|null} [Datas] GameRec Datas - * @property {number|Long|null} [Ts] GameRec Ts - * @property {number|null} [RoomId] GameRec RoomId - * @property {number|null} [GameMode] GameRec GameMode - * @property {number|null} [SceneType] GameRec SceneType - * @property {number|null} [GameId] GameRec GameId - * @property {number|null} [TotalOfGames] GameRec TotalOfGames - * @property {number|null} [NumOfGames] GameRec NumOfGames - * @property {number|null} [RoomFeeMode] GameRec RoomFeeMode - * @property {number|null} [RoomCardCnt] GameRec RoomCardCnt - * @property {Array.|null} [Params] GameRec Params - * @property {number|null} [GameTime] GameRec GameTime - */ - - /** - * Constructs a new GameRec. - * @memberof gamehall - * @classdesc Represents a GameRec. - * @implements IGameRec - * @constructor - * @param {gamehall.IGameRec=} [properties] Properties to set - */ - function GameRec(properties) { - this.Datas = []; - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameRec RecId. - * @member {number} RecId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RecId = 0; - - /** - * GameRec Datas. - * @member {Array.} Datas - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Datas = $util.emptyArray; - - /** - * GameRec Ts. - * @member {number|Long} Ts - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameRec RoomId. - * @member {number} RoomId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomId = 0; - - /** - * GameRec GameMode. - * @member {number} GameMode - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameMode = 0; - - /** - * GameRec SceneType. - * @member {number} SceneType - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.SceneType = 0; - - /** - * GameRec GameId. - * @member {number} GameId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameId = 0; - - /** - * GameRec TotalOfGames. - * @member {number} TotalOfGames - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.TotalOfGames = 0; - - /** - * GameRec NumOfGames. - * @member {number} NumOfGames - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.NumOfGames = 0; - - /** - * GameRec RoomFeeMode. - * @member {number} RoomFeeMode - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomFeeMode = 0; - - /** - * GameRec RoomCardCnt. - * @member {number} RoomCardCnt - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomCardCnt = 0; - - /** - * GameRec Params. - * @member {Array.} Params - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Params = $util.emptyArray; - - /** - * GameRec GameTime. - * @member {number} GameTime - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameTime = 0; - - /** - * Creates a new GameRec instance using the specified properties. - * @function create - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec=} [properties] Properties to set - * @returns {gamehall.GameRec} GameRec instance - */ - GameRec.create = function create(properties) { - return new GameRec(properties); - }; - - /** - * Encodes the specified GameRec message. Does not implicitly {@link gamehall.GameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec} message GameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RecId != null && Object.hasOwnProperty.call(message, "RecId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RecId); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PlayerGameRec.encode(message.Datas[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Ts); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.GameMode); - if (message.SceneType != null && Object.hasOwnProperty.call(message, "SceneType")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.SceneType); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.GameId); - if (message.TotalOfGames != null && Object.hasOwnProperty.call(message, "TotalOfGames")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.TotalOfGames); - if (message.NumOfGames != null && Object.hasOwnProperty.call(message, "NumOfGames")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.NumOfGames); - if (message.RoomFeeMode != null && Object.hasOwnProperty.call(message, "RoomFeeMode")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.RoomFeeMode); - if (message.RoomCardCnt != null && Object.hasOwnProperty.call(message, "RoomCardCnt")) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.RoomCardCnt); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 12, wireType 2 =*/98).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.GameTime != null && Object.hasOwnProperty.call(message, "GameTime")) - writer.uint32(/* id 13, wireType 0 =*/104).int32(message.GameTime); - return writer; - }; - - /** - * Encodes the specified GameRec message, length delimited. Does not implicitly {@link gamehall.GameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec} message GameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameRec} GameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RecId = reader.int32(); - break; - } - case 2: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PlayerGameRec.decode(reader, reader.uint32())); - break; - } - case 3: { - message.Ts = reader.int64(); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - case 5: { - message.GameMode = reader.int32(); - break; - } - case 6: { - message.SceneType = reader.int32(); - break; - } - case 7: { - message.GameId = reader.int32(); - break; - } - case 8: { - message.TotalOfGames = reader.int32(); - break; - } - case 9: { - message.NumOfGames = reader.int32(); - break; - } - case 10: { - message.RoomFeeMode = reader.int32(); - break; - } - case 11: { - message.RoomCardCnt = reader.int32(); - break; - } - case 12: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 13: { - message.GameTime = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameRec} GameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameRec message. - * @function verify - * @memberof gamehall.GameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RecId != null && message.hasOwnProperty("RecId")) - if (!$util.isInteger(message.RecId)) - return "RecId: integer expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PlayerGameRec.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - if (!$util.isInteger(message.SceneType)) - return "SceneType: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.TotalOfGames != null && message.hasOwnProperty("TotalOfGames")) - if (!$util.isInteger(message.TotalOfGames)) - return "TotalOfGames: integer expected"; - if (message.NumOfGames != null && message.hasOwnProperty("NumOfGames")) - if (!$util.isInteger(message.NumOfGames)) - return "NumOfGames: integer expected"; - if (message.RoomFeeMode != null && message.hasOwnProperty("RoomFeeMode")) - if (!$util.isInteger(message.RoomFeeMode)) - return "RoomFeeMode: integer expected"; - if (message.RoomCardCnt != null && message.hasOwnProperty("RoomCardCnt")) - if (!$util.isInteger(message.RoomCardCnt)) - return "RoomCardCnt: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.GameTime != null && message.hasOwnProperty("GameTime")) - if (!$util.isInteger(message.GameTime)) - return "GameTime: integer expected"; - return null; - }; - - /** - * Creates a GameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameRec} GameRec - */ - GameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameRec) - return object; - var message = new $root.gamehall.GameRec(); - if (object.RecId != null) - message.RecId = object.RecId | 0; - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.GameRec.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.GameRec.Datas: object expected"); - message.Datas[i] = $root.gamehall.PlayerGameRec.fromObject(object.Datas[i]); - } - } - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - if (object.SceneType != null) - message.SceneType = object.SceneType | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.TotalOfGames != null) - message.TotalOfGames = object.TotalOfGames | 0; - if (object.NumOfGames != null) - message.NumOfGames = object.NumOfGames | 0; - if (object.RoomFeeMode != null) - message.RoomFeeMode = object.RoomFeeMode | 0; - if (object.RoomCardCnt != null) - message.RoomCardCnt = object.RoomCardCnt | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.GameRec.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.GameTime != null) - message.GameTime = object.GameTime | 0; - return message; - }; - - /** - * Creates a plain object from a GameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameRec - * @static - * @param {gamehall.GameRec} message GameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.Datas = []; - object.Params = []; - } - if (options.defaults) { - object.RecId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.RoomId = 0; - object.GameMode = 0; - object.SceneType = 0; - object.GameId = 0; - object.TotalOfGames = 0; - object.NumOfGames = 0; - object.RoomFeeMode = 0; - object.RoomCardCnt = 0; - object.GameTime = 0; - } - if (message.RecId != null && message.hasOwnProperty("RecId")) - object.RecId = message.RecId; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PlayerGameRec.toObject(message.Datas[j], options); - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - object.SceneType = message.SceneType; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.TotalOfGames != null && message.hasOwnProperty("TotalOfGames")) - object.TotalOfGames = message.TotalOfGames; - if (message.NumOfGames != null && message.hasOwnProperty("NumOfGames")) - object.NumOfGames = message.NumOfGames; - if (message.RoomFeeMode != null && message.hasOwnProperty("RoomFeeMode")) - object.RoomFeeMode = message.RoomFeeMode; - if (message.RoomCardCnt != null && message.hasOwnProperty("RoomCardCnt")) - object.RoomCardCnt = message.RoomCardCnt; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.GameTime != null && message.hasOwnProperty("GameTime")) - object.GameTime = message.GameTime; - return object; - }; - - /** - * Converts this GameRec to JSON. - * @function toJSON - * @memberof gamehall.GameRec - * @instance - * @returns {Object.} JSON object - */ - GameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameRec - * @function getTypeUrl - * @memberof gamehall.GameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameRec"; - }; - - return GameRec; - })(); - - gamehall.SCGetGameRec = (function() { - - /** - * Properties of a SCGetGameRec. - * @memberof gamehall - * @interface ISCGetGameRec - * @property {Array.|null} [Recs] SCGetGameRec Recs - * @property {number|null} [Ver] SCGetGameRec Ver - * @property {number|null} [GameId] SCGetGameRec GameId - */ - - /** - * Constructs a new SCGetGameRec. - * @memberof gamehall - * @classdesc Represents a SCGetGameRec. - * @implements ISCGetGameRec - * @constructor - * @param {gamehall.ISCGetGameRec=} [properties] Properties to set - */ - function SCGetGameRec(properties) { - this.Recs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetGameRec Recs. - * @member {Array.} Recs - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.Recs = $util.emptyArray; - - /** - * SCGetGameRec Ver. - * @member {number} Ver - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.Ver = 0; - - /** - * SCGetGameRec GameId. - * @member {number} GameId - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.GameId = 0; - - /** - * Creates a new SCGetGameRec instance using the specified properties. - * @function create - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec=} [properties] Properties to set - * @returns {gamehall.SCGetGameRec} SCGetGameRec instance - */ - SCGetGameRec.create = function create(properties) { - return new SCGetGameRec(properties); - }; - - /** - * Encodes the specified SCGetGameRec message. Does not implicitly {@link gamehall.SCGetGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec} message SCGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Recs != null && message.Recs.length) - for (var i = 0; i < message.Recs.length; ++i) - $root.gamehall.GameRec.encode(message.Recs[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.Ver != null && Object.hasOwnProperty.call(message, "Ver")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Ver); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCGetGameRec message, length delimited. Does not implicitly {@link gamehall.SCGetGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec} message SCGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetGameRec} SCGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Recs && message.Recs.length)) - message.Recs = []; - message.Recs.push($root.gamehall.GameRec.decode(reader, reader.uint32())); - break; - } - case 2: { - message.Ver = reader.int32(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetGameRec} SCGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetGameRec message. - * @function verify - * @memberof gamehall.SCGetGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Recs != null && message.hasOwnProperty("Recs")) { - if (!Array.isArray(message.Recs)) - return "Recs: array expected"; - for (var i = 0; i < message.Recs.length; ++i) { - var error = $root.gamehall.GameRec.verify(message.Recs[i]); - if (error) - return "Recs." + error; - } - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - if (!$util.isInteger(message.Ver)) - return "Ver: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCGetGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetGameRec} SCGetGameRec - */ - SCGetGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetGameRec) - return object; - var message = new $root.gamehall.SCGetGameRec(); - if (object.Recs) { - if (!Array.isArray(object.Recs)) - throw TypeError(".gamehall.SCGetGameRec.Recs: array expected"); - message.Recs = []; - for (var i = 0; i < object.Recs.length; ++i) { - if (typeof object.Recs[i] !== "object") - throw TypeError(".gamehall.SCGetGameRec.Recs: object expected"); - message.Recs[i] = $root.gamehall.GameRec.fromObject(object.Recs[i]); - } - } - if (object.Ver != null) - message.Ver = object.Ver | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCGetGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.SCGetGameRec} message SCGetGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Recs = []; - if (options.defaults) { - object.Ver = 0; - object.GameId = 0; - } - if (message.Recs && message.Recs.length) { - object.Recs = []; - for (var j = 0; j < message.Recs.length; ++j) - object.Recs[j] = $root.gamehall.GameRec.toObject(message.Recs[j], options); - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - object.Ver = message.Ver; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCGetGameRec to JSON. - * @function toJSON - * @memberof gamehall.SCGetGameRec - * @instance - * @returns {Object.} JSON object - */ - SCGetGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetGameRec - * @function getTypeUrl - * @memberof gamehall.SCGetGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetGameRec"; - }; - - return SCGetGameRec; - })(); - - gamehall.CSShareSuc = (function() { - - /** - * Properties of a CSShareSuc. - * @memberof gamehall - * @interface ICSShareSuc - * @property {number|null} [ShareType] CSShareSuc ShareType - */ - - /** - * Constructs a new CSShareSuc. - * @memberof gamehall - * @classdesc Represents a CSShareSuc. - * @implements ICSShareSuc - * @constructor - * @param {gamehall.ICSShareSuc=} [properties] Properties to set - */ - function CSShareSuc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSShareSuc ShareType. - * @member {number} ShareType - * @memberof gamehall.CSShareSuc - * @instance - */ - CSShareSuc.prototype.ShareType = 0; - - /** - * Creates a new CSShareSuc instance using the specified properties. - * @function create - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc=} [properties] Properties to set - * @returns {gamehall.CSShareSuc} CSShareSuc instance - */ - CSShareSuc.create = function create(properties) { - return new CSShareSuc(properties); - }; - - /** - * Encodes the specified CSShareSuc message. Does not implicitly {@link gamehall.CSShareSuc.verify|verify} messages. - * @function encode - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc} message CSShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShareSuc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShareType != null && Object.hasOwnProperty.call(message, "ShareType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShareType); - return writer; - }; - - /** - * Encodes the specified CSShareSuc message, length delimited. Does not implicitly {@link gamehall.CSShareSuc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc} message CSShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShareSuc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSShareSuc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSShareSuc} CSShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShareSuc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSShareSuc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShareType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSShareSuc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSShareSuc} CSShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShareSuc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSShareSuc message. - * @function verify - * @memberof gamehall.CSShareSuc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSShareSuc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShareType != null && message.hasOwnProperty("ShareType")) - if (!$util.isInteger(message.ShareType)) - return "ShareType: integer expected"; - return null; - }; - - /** - * Creates a CSShareSuc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSShareSuc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSShareSuc} CSShareSuc - */ - CSShareSuc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSShareSuc) - return object; - var message = new $root.gamehall.CSShareSuc(); - if (object.ShareType != null) - message.ShareType = object.ShareType | 0; - return message; - }; - - /** - * Creates a plain object from a CSShareSuc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.CSShareSuc} message CSShareSuc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSShareSuc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShareType = 0; - if (message.ShareType != null && message.hasOwnProperty("ShareType")) - object.ShareType = message.ShareType; - return object; - }; - - /** - * Converts this CSShareSuc to JSON. - * @function toJSON - * @memberof gamehall.CSShareSuc - * @instance - * @returns {Object.} JSON object - */ - CSShareSuc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSShareSuc - * @function getTypeUrl - * @memberof gamehall.CSShareSuc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSShareSuc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSShareSuc"; - }; - - return CSShareSuc; - })(); - - gamehall.SCShareSuc = (function() { - - /** - * Properties of a SCShareSuc. - * @memberof gamehall - * @interface ISCShareSuc - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCShareSuc OpRetCode - */ - - /** - * Constructs a new SCShareSuc. - * @memberof gamehall - * @classdesc Represents a SCShareSuc. - * @implements ISCShareSuc - * @constructor - * @param {gamehall.ISCShareSuc=} [properties] Properties to set - */ - function SCShareSuc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShareSuc OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCShareSuc - * @instance - */ - SCShareSuc.prototype.OpRetCode = 0; - - /** - * Creates a new SCShareSuc instance using the specified properties. - * @function create - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc=} [properties] Properties to set - * @returns {gamehall.SCShareSuc} SCShareSuc instance - */ - SCShareSuc.create = function create(properties) { - return new SCShareSuc(properties); - }; - - /** - * Encodes the specified SCShareSuc message. Does not implicitly {@link gamehall.SCShareSuc.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc} message SCShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShareSuc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCShareSuc message, length delimited. Does not implicitly {@link gamehall.SCShareSuc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc} message SCShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShareSuc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShareSuc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShareSuc} SCShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShareSuc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShareSuc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShareSuc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShareSuc} SCShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShareSuc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShareSuc message. - * @function verify - * @memberof gamehall.SCShareSuc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShareSuc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCShareSuc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShareSuc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShareSuc} SCShareSuc - */ - SCShareSuc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShareSuc) - return object; - var message = new $root.gamehall.SCShareSuc(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCShareSuc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.SCShareSuc} message SCShareSuc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShareSuc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCShareSuc to JSON. - * @function toJSON - * @memberof gamehall.SCShareSuc - * @instance - * @returns {Object.} JSON object - */ - SCShareSuc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShareSuc - * @function getTypeUrl - * @memberof gamehall.SCShareSuc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShareSuc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShareSuc"; - }; - - return SCShareSuc; - })(); - - gamehall.CSForceStart = (function() { - - /** - * Properties of a CSForceStart. - * @memberof gamehall - * @interface ICSForceStart - */ - - /** - * Constructs a new CSForceStart. - * @memberof gamehall - * @classdesc Represents a CSForceStart. - * @implements ICSForceStart - * @constructor - * @param {gamehall.ICSForceStart=} [properties] Properties to set - */ - function CSForceStart(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSForceStart instance using the specified properties. - * @function create - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart=} [properties] Properties to set - * @returns {gamehall.CSForceStart} CSForceStart instance - */ - CSForceStart.create = function create(properties) { - return new CSForceStart(properties); - }; - - /** - * Encodes the specified CSForceStart message. Does not implicitly {@link gamehall.CSForceStart.verify|verify} messages. - * @function encode - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart} message CSForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSForceStart.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSForceStart message, length delimited. Does not implicitly {@link gamehall.CSForceStart.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart} message CSForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSForceStart.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSForceStart message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSForceStart} CSForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSForceStart.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSForceStart(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSForceStart message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSForceStart} CSForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSForceStart.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSForceStart message. - * @function verify - * @memberof gamehall.CSForceStart - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSForceStart.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSForceStart message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSForceStart - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSForceStart} CSForceStart - */ - CSForceStart.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSForceStart) - return object; - return new $root.gamehall.CSForceStart(); - }; - - /** - * Creates a plain object from a CSForceStart message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.CSForceStart} message CSForceStart - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSForceStart.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSForceStart to JSON. - * @function toJSON - * @memberof gamehall.CSForceStart - * @instance - * @returns {Object.} JSON object - */ - CSForceStart.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSForceStart - * @function getTypeUrl - * @memberof gamehall.CSForceStart - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSForceStart.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSForceStart"; - }; - - return CSForceStart; - })(); - - gamehall.SCForceStart = (function() { - - /** - * Properties of a SCForceStart. - * @memberof gamehall - * @interface ISCForceStart - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCForceStart OpRetCode - */ - - /** - * Constructs a new SCForceStart. - * @memberof gamehall - * @classdesc Represents a SCForceStart. - * @implements ISCForceStart - * @constructor - * @param {gamehall.ISCForceStart=} [properties] Properties to set - */ - function SCForceStart(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCForceStart OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCForceStart - * @instance - */ - SCForceStart.prototype.OpRetCode = 0; - - /** - * Creates a new SCForceStart instance using the specified properties. - * @function create - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart=} [properties] Properties to set - * @returns {gamehall.SCForceStart} SCForceStart instance - */ - SCForceStart.create = function create(properties) { - return new SCForceStart(properties); - }; - - /** - * Encodes the specified SCForceStart message. Does not implicitly {@link gamehall.SCForceStart.verify|verify} messages. - * @function encode - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart} message SCForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCForceStart.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCForceStart message, length delimited. Does not implicitly {@link gamehall.SCForceStart.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart} message SCForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCForceStart.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCForceStart message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCForceStart} SCForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCForceStart.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCForceStart(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCForceStart message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCForceStart} SCForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCForceStart.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCForceStart message. - * @function verify - * @memberof gamehall.SCForceStart - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCForceStart.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCForceStart message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCForceStart - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCForceStart} SCForceStart - */ - SCForceStart.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCForceStart) - return object; - var message = new $root.gamehall.SCForceStart(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCForceStart message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.SCForceStart} message SCForceStart - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCForceStart.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCForceStart to JSON. - * @function toJSON - * @memberof gamehall.SCForceStart - * @instance - * @returns {Object.} JSON object - */ - SCForceStart.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCForceStart - * @function getTypeUrl - * @memberof gamehall.SCForceStart - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCForceStart.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCForceStart"; - }; - - return SCForceStart; - })(); - - gamehall.CSInviteRobot = (function() { - - /** - * Properties of a CSInviteRobot. - * @memberof gamehall - * @interface ICSInviteRobot - * @property {number|null} [GameId] CSInviteRobot GameId - * @property {boolean|null} [IsAgent] CSInviteRobot IsAgent - */ - - /** - * Constructs a new CSInviteRobot. - * @memberof gamehall - * @classdesc Represents a CSInviteRobot. - * @implements ICSInviteRobot - * @constructor - * @param {gamehall.ICSInviteRobot=} [properties] Properties to set - */ - function CSInviteRobot(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSInviteRobot GameId. - * @member {number} GameId - * @memberof gamehall.CSInviteRobot - * @instance - */ - CSInviteRobot.prototype.GameId = 0; - - /** - * CSInviteRobot IsAgent. - * @member {boolean} IsAgent - * @memberof gamehall.CSInviteRobot - * @instance - */ - CSInviteRobot.prototype.IsAgent = false; - - /** - * Creates a new CSInviteRobot instance using the specified properties. - * @function create - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot=} [properties] Properties to set - * @returns {gamehall.CSInviteRobot} CSInviteRobot instance - */ - CSInviteRobot.create = function create(properties) { - return new CSInviteRobot(properties); - }; - - /** - * Encodes the specified CSInviteRobot message. Does not implicitly {@link gamehall.CSInviteRobot.verify|verify} messages. - * @function encode - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot} message CSInviteRobot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSInviteRobot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.IsAgent != null && Object.hasOwnProperty.call(message, "IsAgent")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsAgent); - return writer; - }; - - /** - * Encodes the specified CSInviteRobot message, length delimited. Does not implicitly {@link gamehall.CSInviteRobot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot} message CSInviteRobot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSInviteRobot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSInviteRobot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSInviteRobot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSInviteRobot} CSInviteRobot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSInviteRobot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSInviteRobot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.IsAgent = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSInviteRobot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSInviteRobot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSInviteRobot} CSInviteRobot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSInviteRobot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSInviteRobot message. - * @function verify - * @memberof gamehall.CSInviteRobot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSInviteRobot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.IsAgent != null && message.hasOwnProperty("IsAgent")) - if (typeof message.IsAgent !== "boolean") - return "IsAgent: boolean expected"; - return null; - }; - - /** - * Creates a CSInviteRobot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSInviteRobot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSInviteRobot} CSInviteRobot - */ - CSInviteRobot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSInviteRobot) - return object; - var message = new $root.gamehall.CSInviteRobot(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.IsAgent != null) - message.IsAgent = Boolean(object.IsAgent); - return message; - }; - - /** - * Creates a plain object from a CSInviteRobot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.CSInviteRobot} message CSInviteRobot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSInviteRobot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.IsAgent = false; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.IsAgent != null && message.hasOwnProperty("IsAgent")) - object.IsAgent = message.IsAgent; - return object; - }; - - /** - * Converts this CSInviteRobot to JSON. - * @function toJSON - * @memberof gamehall.CSInviteRobot - * @instance - * @returns {Object.} JSON object - */ - CSInviteRobot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSInviteRobot - * @function getTypeUrl - * @memberof gamehall.CSInviteRobot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSInviteRobot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSInviteRobot"; - }; - - return CSInviteRobot; - })(); - - gamehall.CSPlayerSwithFlag = (function() { - - /** - * Properties of a CSPlayerSwithFlag. - * @memberof gamehall - * @interface ICSPlayerSwithFlag - * @property {number|null} [Flag] CSPlayerSwithFlag Flag - * @property {number|null} [Mark] CSPlayerSwithFlag Mark - */ - - /** - * Constructs a new CSPlayerSwithFlag. - * @memberof gamehall - * @classdesc Represents a CSPlayerSwithFlag. - * @implements ICSPlayerSwithFlag - * @constructor - * @param {gamehall.ICSPlayerSwithFlag=} [properties] Properties to set - */ - function CSPlayerSwithFlag(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSPlayerSwithFlag Flag. - * @member {number} Flag - * @memberof gamehall.CSPlayerSwithFlag - * @instance - */ - CSPlayerSwithFlag.prototype.Flag = 0; - - /** - * CSPlayerSwithFlag Mark. - * @member {number} Mark - * @memberof gamehall.CSPlayerSwithFlag - * @instance - */ - CSPlayerSwithFlag.prototype.Mark = 0; - - /** - * Creates a new CSPlayerSwithFlag instance using the specified properties. - * @function create - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag=} [properties] Properties to set - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag instance - */ - CSPlayerSwithFlag.create = function create(properties) { - return new CSPlayerSwithFlag(properties); - }; - - /** - * Encodes the specified CSPlayerSwithFlag message. Does not implicitly {@link gamehall.CSPlayerSwithFlag.verify|verify} messages. - * @function encode - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag} message CSPlayerSwithFlag message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSPlayerSwithFlag.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Flag != null && Object.hasOwnProperty.call(message, "Flag")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Flag); - if (message.Mark != null && Object.hasOwnProperty.call(message, "Mark")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Mark); - return writer; - }; - - /** - * Encodes the specified CSPlayerSwithFlag message, length delimited. Does not implicitly {@link gamehall.CSPlayerSwithFlag.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag} message CSPlayerSwithFlag message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSPlayerSwithFlag.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSPlayerSwithFlag message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSPlayerSwithFlag.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSPlayerSwithFlag(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Flag = reader.int32(); - break; - } - case 2: { - message.Mark = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSPlayerSwithFlag message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSPlayerSwithFlag.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSPlayerSwithFlag message. - * @function verify - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSPlayerSwithFlag.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Flag != null && message.hasOwnProperty("Flag")) - if (!$util.isInteger(message.Flag)) - return "Flag: integer expected"; - if (message.Mark != null && message.hasOwnProperty("Mark")) - if (!$util.isInteger(message.Mark)) - return "Mark: integer expected"; - return null; - }; - - /** - * Creates a CSPlayerSwithFlag message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - */ - CSPlayerSwithFlag.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSPlayerSwithFlag) - return object; - var message = new $root.gamehall.CSPlayerSwithFlag(); - if (object.Flag != null) - message.Flag = object.Flag | 0; - if (object.Mark != null) - message.Mark = object.Mark | 0; - return message; - }; - - /** - * Creates a plain object from a CSPlayerSwithFlag message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.CSPlayerSwithFlag} message CSPlayerSwithFlag - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSPlayerSwithFlag.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Flag = 0; - object.Mark = 0; - } - if (message.Flag != null && message.hasOwnProperty("Flag")) - object.Flag = message.Flag; - if (message.Mark != null && message.hasOwnProperty("Mark")) - object.Mark = message.Mark; - return object; - }; - - /** - * Converts this CSPlayerSwithFlag to JSON. - * @function toJSON - * @memberof gamehall.CSPlayerSwithFlag - * @instance - * @returns {Object.} JSON object - */ - CSPlayerSwithFlag.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSPlayerSwithFlag - * @function getTypeUrl - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSPlayerSwithFlag.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSPlayerSwithFlag"; - }; - - return CSPlayerSwithFlag; - })(); - - gamehall.CSShopBuy = (function() { - - /** - * Properties of a CSShopBuy. - * @memberof gamehall - * @interface ICSShopBuy - * @property {number|null} [Id] CSShopBuy Id - * @property {number|null} [Count] CSShopBuy Count - */ - - /** - * Constructs a new CSShopBuy. - * @memberof gamehall - * @classdesc Represents a CSShopBuy. - * @implements ICSShopBuy - * @constructor - * @param {gamehall.ICSShopBuy=} [properties] Properties to set - */ - function CSShopBuy(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSShopBuy Id. - * @member {number} Id - * @memberof gamehall.CSShopBuy - * @instance - */ - CSShopBuy.prototype.Id = 0; - - /** - * CSShopBuy Count. - * @member {number} Count - * @memberof gamehall.CSShopBuy - * @instance - */ - CSShopBuy.prototype.Count = 0; - - /** - * Creates a new CSShopBuy instance using the specified properties. - * @function create - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy=} [properties] Properties to set - * @returns {gamehall.CSShopBuy} CSShopBuy instance - */ - CSShopBuy.create = function create(properties) { - return new CSShopBuy(properties); - }; - - /** - * Encodes the specified CSShopBuy message. Does not implicitly {@link gamehall.CSShopBuy.verify|verify} messages. - * @function encode - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy} message CSShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShopBuy.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.Count != null && Object.hasOwnProperty.call(message, "Count")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Count); - return writer; - }; - - /** - * Encodes the specified CSShopBuy message, length delimited. Does not implicitly {@link gamehall.CSShopBuy.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy} message CSShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShopBuy.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSShopBuy message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSShopBuy} CSShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShopBuy.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSShopBuy(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.Count = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSShopBuy message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSShopBuy} CSShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShopBuy.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSShopBuy message. - * @function verify - * @memberof gamehall.CSShopBuy - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSShopBuy.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Count != null && message.hasOwnProperty("Count")) - if (!$util.isInteger(message.Count)) - return "Count: integer expected"; - return null; - }; - - /** - * Creates a CSShopBuy message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSShopBuy - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSShopBuy} CSShopBuy - */ - CSShopBuy.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSShopBuy) - return object; - var message = new $root.gamehall.CSShopBuy(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Count != null) - message.Count = object.Count | 0; - return message; - }; - - /** - * Creates a plain object from a CSShopBuy message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.CSShopBuy} message CSShopBuy - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSShopBuy.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.Count = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Count != null && message.hasOwnProperty("Count")) - object.Count = message.Count; - return object; - }; - - /** - * Converts this CSShopBuy to JSON. - * @function toJSON - * @memberof gamehall.CSShopBuy - * @instance - * @returns {Object.} JSON object - */ - CSShopBuy.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSShopBuy - * @function getTypeUrl - * @memberof gamehall.CSShopBuy - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSShopBuy.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSShopBuy"; - }; - - return CSShopBuy; - })(); - - gamehall.SCShopBuy = (function() { - - /** - * Properties of a SCShopBuy. - * @memberof gamehall - * @interface ISCShopBuy - * @property {number|null} [Id] SCShopBuy Id - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCShopBuy OpRetCode - * @property {number|null} [CostType] SCShopBuy CostType - * @property {number|null} [CostNum] SCShopBuy CostNum - * @property {number|null} [GainType] SCShopBuy GainType - * @property {number|null} [GainNum] SCShopBuy GainNum - */ - - /** - * Constructs a new SCShopBuy. - * @memberof gamehall - * @classdesc Represents a SCShopBuy. - * @implements ISCShopBuy - * @constructor - * @param {gamehall.ISCShopBuy=} [properties] Properties to set - */ - function SCShopBuy(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShopBuy Id. - * @member {number} Id - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.Id = 0; - - /** - * SCShopBuy OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.OpRetCode = 0; - - /** - * SCShopBuy CostType. - * @member {number} CostType - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.CostType = 0; - - /** - * SCShopBuy CostNum. - * @member {number} CostNum - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.CostNum = 0; - - /** - * SCShopBuy GainType. - * @member {number} GainType - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.GainType = 0; - - /** - * SCShopBuy GainNum. - * @member {number} GainNum - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.GainNum = 0; - - /** - * Creates a new SCShopBuy instance using the specified properties. - * @function create - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy=} [properties] Properties to set - * @returns {gamehall.SCShopBuy} SCShopBuy instance - */ - SCShopBuy.create = function create(properties) { - return new SCShopBuy(properties); - }; - - /** - * Encodes the specified SCShopBuy message. Does not implicitly {@link gamehall.SCShopBuy.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy} message SCShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShopBuy.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.CostType != null && Object.hasOwnProperty.call(message, "CostType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CostType); - if (message.CostNum != null && Object.hasOwnProperty.call(message, "CostNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.CostNum); - if (message.GainType != null && Object.hasOwnProperty.call(message, "GainType")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.GainType); - if (message.GainNum != null && Object.hasOwnProperty.call(message, "GainNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.GainNum); - return writer; - }; - - /** - * Encodes the specified SCShopBuy message, length delimited. Does not implicitly {@link gamehall.SCShopBuy.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy} message SCShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShopBuy.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShopBuy message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShopBuy} SCShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShopBuy.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShopBuy(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.CostType = reader.int32(); - break; - } - case 4: { - message.CostNum = reader.int32(); - break; - } - case 5: { - message.GainType = reader.int32(); - break; - } - case 6: { - message.GainNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShopBuy message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShopBuy} SCShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShopBuy.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShopBuy message. - * @function verify - * @memberof gamehall.SCShopBuy - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShopBuy.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.CostType != null && message.hasOwnProperty("CostType")) - if (!$util.isInteger(message.CostType)) - return "CostType: integer expected"; - if (message.CostNum != null && message.hasOwnProperty("CostNum")) - if (!$util.isInteger(message.CostNum)) - return "CostNum: integer expected"; - if (message.GainType != null && message.hasOwnProperty("GainType")) - if (!$util.isInteger(message.GainType)) - return "GainType: integer expected"; - if (message.GainNum != null && message.hasOwnProperty("GainNum")) - if (!$util.isInteger(message.GainNum)) - return "GainNum: integer expected"; - return null; - }; - - /** - * Creates a SCShopBuy message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShopBuy - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShopBuy} SCShopBuy - */ - SCShopBuy.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShopBuy) - return object; - var message = new $root.gamehall.SCShopBuy(); - if (object.Id != null) - message.Id = object.Id | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.CostType != null) - message.CostType = object.CostType | 0; - if (object.CostNum != null) - message.CostNum = object.CostNum | 0; - if (object.GainType != null) - message.GainType = object.GainType | 0; - if (object.GainNum != null) - message.GainNum = object.GainNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCShopBuy message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.SCShopBuy} message SCShopBuy - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShopBuy.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.CostType = 0; - object.CostNum = 0; - object.GainType = 0; - object.GainNum = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.CostType != null && message.hasOwnProperty("CostType")) - object.CostType = message.CostType; - if (message.CostNum != null && message.hasOwnProperty("CostNum")) - object.CostNum = message.CostNum; - if (message.GainType != null && message.hasOwnProperty("GainType")) - object.GainType = message.GainType; - if (message.GainNum != null && message.hasOwnProperty("GainNum")) - object.GainNum = message.GainNum; - return object; - }; - - /** - * Converts this SCShopBuy to JSON. - * @function toJSON - * @memberof gamehall.SCShopBuy - * @instance - * @returns {Object.} JSON object - */ - SCShopBuy.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShopBuy - * @function getTypeUrl - * @memberof gamehall.SCShopBuy - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShopBuy.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShopBuy"; - }; - - return SCShopBuy; - })(); - - gamehall.CSJoinGame = (function() { - - /** - * Properties of a CSJoinGame. - * @memberof gamehall - * @interface ICSJoinGame - * @property {number|null} [MsgType] CSJoinGame MsgType - * @property {number|null} [SnId] CSJoinGame SnId - * @property {number|null} [Pos] CSJoinGame Pos - * @property {boolean|null} [Agree] CSJoinGame Agree - */ - - /** - * Constructs a new CSJoinGame. - * @memberof gamehall - * @classdesc Represents a CSJoinGame. - * @implements ICSJoinGame - * @constructor - * @param {gamehall.ICSJoinGame=} [properties] Properties to set - */ - function CSJoinGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSJoinGame MsgType. - * @member {number} MsgType - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.MsgType = 0; - - /** - * CSJoinGame SnId. - * @member {number} SnId - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.SnId = 0; - - /** - * CSJoinGame Pos. - * @member {number} Pos - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.Pos = 0; - - /** - * CSJoinGame Agree. - * @member {boolean} Agree - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.Agree = false; - - /** - * Creates a new CSJoinGame instance using the specified properties. - * @function create - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame=} [properties] Properties to set - * @returns {gamehall.CSJoinGame} CSJoinGame instance - */ - CSJoinGame.create = function create(properties) { - return new CSJoinGame(properties); - }; - - /** - * Encodes the specified CSJoinGame message. Does not implicitly {@link gamehall.CSJoinGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame} message CSJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSJoinGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.MsgType != null && Object.hasOwnProperty.call(message, "MsgType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.MsgType); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.SnId); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Pos); - if (message.Agree != null && Object.hasOwnProperty.call(message, "Agree")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.Agree); - return writer; - }; - - /** - * Encodes the specified CSJoinGame message, length delimited. Does not implicitly {@link gamehall.CSJoinGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame} message CSJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSJoinGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSJoinGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSJoinGame} CSJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSJoinGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSJoinGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.MsgType = reader.int32(); - break; - } - case 2: { - message.SnId = reader.int32(); - break; - } - case 3: { - message.Pos = reader.int32(); - break; - } - case 4: { - message.Agree = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSJoinGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSJoinGame} CSJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSJoinGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSJoinGame message. - * @function verify - * @memberof gamehall.CSJoinGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSJoinGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - if (!$util.isInteger(message.MsgType)) - return "MsgType: integer expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Agree != null && message.hasOwnProperty("Agree")) - if (typeof message.Agree !== "boolean") - return "Agree: boolean expected"; - return null; - }; - - /** - * Creates a CSJoinGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSJoinGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSJoinGame} CSJoinGame - */ - CSJoinGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSJoinGame) - return object; - var message = new $root.gamehall.CSJoinGame(); - if (object.MsgType != null) - message.MsgType = object.MsgType | 0; - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Agree != null) - message.Agree = Boolean(object.Agree); - return message; - }; - - /** - * Creates a plain object from a CSJoinGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.CSJoinGame} message CSJoinGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSJoinGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.MsgType = 0; - object.SnId = 0; - object.Pos = 0; - object.Agree = false; - } - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - object.MsgType = message.MsgType; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Agree != null && message.hasOwnProperty("Agree")) - object.Agree = message.Agree; - return object; - }; - - /** - * Converts this CSJoinGame to JSON. - * @function toJSON - * @memberof gamehall.CSJoinGame - * @instance - * @returns {Object.} JSON object - */ - CSJoinGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSJoinGame - * @function getTypeUrl - * @memberof gamehall.CSJoinGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSJoinGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSJoinGame"; - }; - - return CSJoinGame; - })(); - - gamehall.SCJoinGame = (function() { - - /** - * Properties of a SCJoinGame. - * @memberof gamehall - * @interface ISCJoinGame - * @property {number|null} [MsgType] SCJoinGame MsgType - * @property {string|null} [Name] SCJoinGame Name - * @property {number|null} [SnId] SCJoinGame SnId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCJoinGame OpRetCode - */ - - /** - * Constructs a new SCJoinGame. - * @memberof gamehall - * @classdesc Represents a SCJoinGame. - * @implements ISCJoinGame - * @constructor - * @param {gamehall.ISCJoinGame=} [properties] Properties to set - */ - function SCJoinGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCJoinGame MsgType. - * @member {number} MsgType - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.MsgType = 0; - - /** - * SCJoinGame Name. - * @member {string} Name - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.Name = ""; - - /** - * SCJoinGame SnId. - * @member {number} SnId - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.SnId = 0; - - /** - * SCJoinGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCJoinGame instance using the specified properties. - * @function create - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame=} [properties] Properties to set - * @returns {gamehall.SCJoinGame} SCJoinGame instance - */ - SCJoinGame.create = function create(properties) { - return new SCJoinGame(properties); - }; - - /** - * Encodes the specified SCJoinGame message. Does not implicitly {@link gamehall.SCJoinGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame} message SCJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCJoinGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.MsgType != null && Object.hasOwnProperty.call(message, "MsgType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.MsgType); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SnId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCJoinGame message, length delimited. Does not implicitly {@link gamehall.SCJoinGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame} message SCJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCJoinGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCJoinGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCJoinGame} SCJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCJoinGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCJoinGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.MsgType = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.SnId = reader.int32(); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCJoinGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCJoinGame} SCJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCJoinGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCJoinGame message. - * @function verify - * @memberof gamehall.SCJoinGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCJoinGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - if (!$util.isInteger(message.MsgType)) - return "MsgType: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCJoinGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCJoinGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCJoinGame} SCJoinGame - */ - SCJoinGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCJoinGame) - return object; - var message = new $root.gamehall.SCJoinGame(); - if (object.MsgType != null) - message.MsgType = object.MsgType | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.SnId != null) - message.SnId = object.SnId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCJoinGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.SCJoinGame} message SCJoinGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCJoinGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.MsgType = 0; - object.Name = ""; - object.SnId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - object.MsgType = message.MsgType; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCJoinGame to JSON. - * @function toJSON - * @memberof gamehall.SCJoinGame - * @instance - * @returns {Object.} JSON object - */ - SCJoinGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCJoinGame - * @function getTypeUrl - * @memberof gamehall.SCJoinGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCJoinGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCJoinGame"; - }; - - return SCJoinGame; - })(); - - gamehall.CSEnterDgGame = (function() { - - /** - * Properties of a CSEnterDgGame. - * @memberof gamehall - * @interface ICSEnterDgGame - * @property {number|null} [LoginType] CSEnterDgGame LoginType - * @property {number|null} [DgGameId] CSEnterDgGame DgGameId - * @property {string|null} [Domains] CSEnterDgGame Domains - */ - - /** - * Constructs a new CSEnterDgGame. - * @memberof gamehall - * @classdesc Represents a CSEnterDgGame. - * @implements ICSEnterDgGame - * @constructor - * @param {gamehall.ICSEnterDgGame=} [properties] Properties to set - */ - function CSEnterDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterDgGame LoginType. - * @member {number} LoginType - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.LoginType = 0; - - /** - * CSEnterDgGame DgGameId. - * @member {number} DgGameId - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.DgGameId = 0; - - /** - * CSEnterDgGame Domains. - * @member {string} Domains - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.Domains = ""; - - /** - * Creates a new CSEnterDgGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame=} [properties] Properties to set - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame instance - */ - CSEnterDgGame.create = function create(properties) { - return new CSEnterDgGame(properties); - }; - - /** - * Encodes the specified CSEnterDgGame message. Does not implicitly {@link gamehall.CSEnterDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame} message CSEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.LoginType != null && Object.hasOwnProperty.call(message, "LoginType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.LoginType); - if (message.DgGameId != null && Object.hasOwnProperty.call(message, "DgGameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.DgGameId); - if (message.Domains != null && Object.hasOwnProperty.call(message, "Domains")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Domains); - return writer; - }; - - /** - * Encodes the specified CSEnterDgGame message, length delimited. Does not implicitly {@link gamehall.CSEnterDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame} message CSEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.LoginType = reader.int32(); - break; - } - case 2: { - message.DgGameId = reader.int32(); - break; - } - case 3: { - message.Domains = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterDgGame message. - * @function verify - * @memberof gamehall.CSEnterDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.LoginType != null && message.hasOwnProperty("LoginType")) - if (!$util.isInteger(message.LoginType)) - return "LoginType: integer expected"; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - if (!$util.isInteger(message.DgGameId)) - return "DgGameId: integer expected"; - if (message.Domains != null && message.hasOwnProperty("Domains")) - if (!$util.isString(message.Domains)) - return "Domains: string expected"; - return null; - }; - - /** - * Creates a CSEnterDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - */ - CSEnterDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterDgGame) - return object; - var message = new $root.gamehall.CSEnterDgGame(); - if (object.LoginType != null) - message.LoginType = object.LoginType | 0; - if (object.DgGameId != null) - message.DgGameId = object.DgGameId | 0; - if (object.Domains != null) - message.Domains = String(object.Domains); - return message; - }; - - /** - * Creates a plain object from a CSEnterDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.CSEnterDgGame} message CSEnterDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.LoginType = 0; - object.DgGameId = 0; - object.Domains = ""; - } - if (message.LoginType != null && message.hasOwnProperty("LoginType")) - object.LoginType = message.LoginType; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - object.DgGameId = message.DgGameId; - if (message.Domains != null && message.hasOwnProperty("Domains")) - object.Domains = message.Domains; - return object; - }; - - /** - * Converts this CSEnterDgGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterDgGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterDgGame - * @function getTypeUrl - * @memberof gamehall.CSEnterDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterDgGame"; - }; - - return CSEnterDgGame; - })(); - - gamehall.SCEnterDgGame = (function() { - - /** - * Properties of a SCEnterDgGame. - * @memberof gamehall - * @interface ISCEnterDgGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterDgGame OpRetCode - * @property {string|null} [LoginUrl] SCEnterDgGame LoginUrl - * @property {string|null} [Token] SCEnterDgGame Token - * @property {number|null} [DgGameId] SCEnterDgGame DgGameId - * @property {number|null} [CodeId] SCEnterDgGame CodeId - * @property {string|null} [Domains] SCEnterDgGame Domains - * @property {Array.|null} [List] SCEnterDgGame List - */ - - /** - * Constructs a new SCEnterDgGame. - * @memberof gamehall - * @classdesc Represents a SCEnterDgGame. - * @implements ISCEnterDgGame - * @constructor - * @param {gamehall.ISCEnterDgGame=} [properties] Properties to set - */ - function SCEnterDgGame(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterDgGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.OpRetCode = 0; - - /** - * SCEnterDgGame LoginUrl. - * @member {string} LoginUrl - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.LoginUrl = ""; - - /** - * SCEnterDgGame Token. - * @member {string} Token - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.Token = ""; - - /** - * SCEnterDgGame DgGameId. - * @member {number} DgGameId - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.DgGameId = 0; - - /** - * SCEnterDgGame CodeId. - * @member {number} CodeId - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.CodeId = 0; - - /** - * SCEnterDgGame Domains. - * @member {string} Domains - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.Domains = ""; - - /** - * SCEnterDgGame List. - * @member {Array.} List - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.List = $util.emptyArray; - - /** - * Creates a new SCEnterDgGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame=} [properties] Properties to set - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame instance - */ - SCEnterDgGame.create = function create(properties) { - return new SCEnterDgGame(properties); - }; - - /** - * Encodes the specified SCEnterDgGame message. Does not implicitly {@link gamehall.SCEnterDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame} message SCEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.LoginUrl != null && Object.hasOwnProperty.call(message, "LoginUrl")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.LoginUrl); - if (message.Token != null && Object.hasOwnProperty.call(message, "Token")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Token); - if (message.DgGameId != null && Object.hasOwnProperty.call(message, "DgGameId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.DgGameId); - if (message.CodeId != null && Object.hasOwnProperty.call(message, "CodeId")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CodeId); - if (message.Domains != null && Object.hasOwnProperty.call(message, "Domains")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.Domains); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - writer.uint32(/* id 7, wireType 2 =*/58).string(message.List[i]); - return writer; - }; - - /** - * Encodes the specified SCEnterDgGame message, length delimited. Does not implicitly {@link gamehall.SCEnterDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame} message SCEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.LoginUrl = reader.string(); - break; - } - case 3: { - message.Token = reader.string(); - break; - } - case 4: { - message.DgGameId = reader.int32(); - break; - } - case 5: { - message.CodeId = reader.int32(); - break; - } - case 6: { - message.Domains = reader.string(); - break; - } - case 7: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push(reader.string()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterDgGame message. - * @function verify - * @memberof gamehall.SCEnterDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.LoginUrl != null && message.hasOwnProperty("LoginUrl")) - if (!$util.isString(message.LoginUrl)) - return "LoginUrl: string expected"; - if (message.Token != null && message.hasOwnProperty("Token")) - if (!$util.isString(message.Token)) - return "Token: string expected"; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - if (!$util.isInteger(message.DgGameId)) - return "DgGameId: integer expected"; - if (message.CodeId != null && message.hasOwnProperty("CodeId")) - if (!$util.isInteger(message.CodeId)) - return "CodeId: integer expected"; - if (message.Domains != null && message.hasOwnProperty("Domains")) - if (!$util.isString(message.Domains)) - return "Domains: string expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) - if (!$util.isString(message.List[i])) - return "List: string[] expected"; - } - return null; - }; - - /** - * Creates a SCEnterDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - */ - SCEnterDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterDgGame) - return object; - var message = new $root.gamehall.SCEnterDgGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.LoginUrl != null) - message.LoginUrl = String(object.LoginUrl); - if (object.Token != null) - message.Token = String(object.Token); - if (object.DgGameId != null) - message.DgGameId = object.DgGameId | 0; - if (object.CodeId != null) - message.CodeId = object.CodeId | 0; - if (object.Domains != null) - message.Domains = String(object.Domains); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCEnterDgGame.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) - message.List[i] = String(object.List[i]); - } - return message; - }; - - /** - * Creates a plain object from a SCEnterDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.SCEnterDgGame} message SCEnterDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.LoginUrl = ""; - object.Token = ""; - object.DgGameId = 0; - object.CodeId = 0; - object.Domains = ""; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.LoginUrl != null && message.hasOwnProperty("LoginUrl")) - object.LoginUrl = message.LoginUrl; - if (message.Token != null && message.hasOwnProperty("Token")) - object.Token = message.Token; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - object.DgGameId = message.DgGameId; - if (message.CodeId != null && message.hasOwnProperty("CodeId")) - object.CodeId = message.CodeId; - if (message.Domains != null && message.hasOwnProperty("Domains")) - object.Domains = message.Domains; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = message.List[j]; - } - return object; - }; - - /** - * Converts this SCEnterDgGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterDgGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterDgGame - * @function getTypeUrl - * @memberof gamehall.SCEnterDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterDgGame"; - }; - - return SCEnterDgGame; - })(); - - gamehall.CSLeaveDgGame = (function() { - - /** - * Properties of a CSLeaveDgGame. - * @memberof gamehall - * @interface ICSLeaveDgGame - */ - - /** - * Constructs a new CSLeaveDgGame. - * @memberof gamehall - * @classdesc Represents a CSLeaveDgGame. - * @implements ICSLeaveDgGame - * @constructor - * @param {gamehall.ICSLeaveDgGame=} [properties] Properties to set - */ - function CSLeaveDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveDgGame instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame=} [properties] Properties to set - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame instance - */ - CSLeaveDgGame.create = function create(properties) { - return new CSLeaveDgGame(properties); - }; - - /** - * Encodes the specified CSLeaveDgGame message. Does not implicitly {@link gamehall.CSLeaveDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame} message CSLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveDgGame message, length delimited. Does not implicitly {@link gamehall.CSLeaveDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame} message CSLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveDgGame message. - * @function verify - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - */ - CSLeaveDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveDgGame) - return object; - return new $root.gamehall.CSLeaveDgGame(); - }; - - /** - * Creates a plain object from a CSLeaveDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.CSLeaveDgGame} message CSLeaveDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveDgGame.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveDgGame to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveDgGame - * @instance - * @returns {Object.} JSON object - */ - CSLeaveDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveDgGame - * @function getTypeUrl - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveDgGame"; - }; - - return CSLeaveDgGame; - })(); - - gamehall.SCLeaveDgGame = (function() { - - /** - * Properties of a SCLeaveDgGame. - * @memberof gamehall - * @interface ISCLeaveDgGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveDgGame OpRetCode - */ - - /** - * Constructs a new SCLeaveDgGame. - * @memberof gamehall - * @classdesc Represents a SCLeaveDgGame. - * @implements ISCLeaveDgGame - * @constructor - * @param {gamehall.ISCLeaveDgGame=} [properties] Properties to set - */ - function SCLeaveDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveDgGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveDgGame - * @instance - */ - SCLeaveDgGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCLeaveDgGame instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame=} [properties] Properties to set - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame instance - */ - SCLeaveDgGame.create = function create(properties) { - return new SCLeaveDgGame(properties); - }; - - /** - * Encodes the specified SCLeaveDgGame message. Does not implicitly {@link gamehall.SCLeaveDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame} message SCLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCLeaveDgGame message, length delimited. Does not implicitly {@link gamehall.SCLeaveDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame} message SCLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveDgGame message. - * @function verify - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCLeaveDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - */ - SCLeaveDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveDgGame) - return object; - var message = new $root.gamehall.SCLeaveDgGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCLeaveDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.SCLeaveDgGame} message SCLeaveDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCLeaveDgGame to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveDgGame - * @instance - * @returns {Object.} JSON object - */ - SCLeaveDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveDgGame - * @function getTypeUrl - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveDgGame"; - }; - - return SCLeaveDgGame; - })(); - - gamehall.CSThridAccountStatistic = (function() { - - /** - * Properties of a CSThridAccountStatistic. - * @memberof gamehall - * @interface ICSThridAccountStatistic - * @property {number|null} [ReqId] CSThridAccountStatistic ReqId - */ - - /** - * Constructs a new CSThridAccountStatistic. - * @memberof gamehall - * @classdesc Represents a CSThridAccountStatistic. - * @implements ICSThridAccountStatistic - * @constructor - * @param {gamehall.ICSThridAccountStatistic=} [properties] Properties to set - */ - function CSThridAccountStatistic(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSThridAccountStatistic ReqId. - * @member {number} ReqId - * @memberof gamehall.CSThridAccountStatistic - * @instance - */ - CSThridAccountStatistic.prototype.ReqId = 0; - - /** - * Creates a new CSThridAccountStatistic instance using the specified properties. - * @function create - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic=} [properties] Properties to set - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic instance - */ - CSThridAccountStatistic.create = function create(properties) { - return new CSThridAccountStatistic(properties); - }; - - /** - * Encodes the specified CSThridAccountStatistic message. Does not implicitly {@link gamehall.CSThridAccountStatistic.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic} message CSThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountStatistic.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ReqId != null && Object.hasOwnProperty.call(message, "ReqId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ReqId); - return writer; - }; - - /** - * Encodes the specified CSThridAccountStatistic message, length delimited. Does not implicitly {@link gamehall.CSThridAccountStatistic.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic} message CSThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountStatistic.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridAccountStatistic message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountStatistic.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridAccountStatistic(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ReqId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridAccountStatistic message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountStatistic.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridAccountStatistic message. - * @function verify - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridAccountStatistic.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - if (!$util.isInteger(message.ReqId)) - return "ReqId: integer expected"; - return null; - }; - - /** - * Creates a CSThridAccountStatistic message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - */ - CSThridAccountStatistic.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridAccountStatistic) - return object; - var message = new $root.gamehall.CSThridAccountStatistic(); - if (object.ReqId != null) - message.ReqId = object.ReqId | 0; - return message; - }; - - /** - * Creates a plain object from a CSThridAccountStatistic message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.CSThridAccountStatistic} message CSThridAccountStatistic - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridAccountStatistic.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ReqId = 0; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - object.ReqId = message.ReqId; - return object; - }; - - /** - * Converts this CSThridAccountStatistic to JSON. - * @function toJSON - * @memberof gamehall.CSThridAccountStatistic - * @instance - * @returns {Object.} JSON object - */ - CSThridAccountStatistic.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridAccountStatistic - * @function getTypeUrl - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridAccountStatistic.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridAccountStatistic"; - }; - - return CSThridAccountStatistic; - })(); - - gamehall.ThridAccount = (function() { - - /** - * Properties of a ThridAccount. - * @memberof gamehall - * @interface IThridAccount - * @property {number|null} [ThridPlatformId] ThridAccount ThridPlatformId - * @property {string|null} [Name] ThridAccount Name - * @property {number|null} [Status] ThridAccount Status - * @property {number|Long|null} [Balance] ThridAccount Balance - */ - - /** - * Constructs a new ThridAccount. - * @memberof gamehall - * @classdesc Represents a ThridAccount. - * @implements IThridAccount - * @constructor - * @param {gamehall.IThridAccount=} [properties] Properties to set - */ - function ThridAccount(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridAccount ThridPlatformId. - * @member {number} ThridPlatformId - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.ThridPlatformId = 0; - - /** - * ThridAccount Name. - * @member {string} Name - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Name = ""; - - /** - * ThridAccount Status. - * @member {number} Status - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Status = 0; - - /** - * ThridAccount Balance. - * @member {number|Long} Balance - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Balance = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new ThridAccount instance using the specified properties. - * @function create - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount=} [properties] Properties to set - * @returns {gamehall.ThridAccount} ThridAccount instance - */ - ThridAccount.create = function create(properties) { - return new ThridAccount(properties); - }; - - /** - * Encodes the specified ThridAccount message. Does not implicitly {@link gamehall.ThridAccount.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount} message ThridAccount message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridAccount.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridPlatformId != null && Object.hasOwnProperty.call(message, "ThridPlatformId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ThridPlatformId); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.Status != null && Object.hasOwnProperty.call(message, "Status")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Status); - if (message.Balance != null && Object.hasOwnProperty.call(message, "Balance")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Balance); - return writer; - }; - - /** - * Encodes the specified ThridAccount message, length delimited. Does not implicitly {@link gamehall.ThridAccount.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount} message ThridAccount message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridAccount.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridAccount message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridAccount - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridAccount} ThridAccount - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridAccount.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridAccount(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridPlatformId = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.Status = reader.int32(); - break; - } - case 4: { - message.Balance = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridAccount message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridAccount - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridAccount} ThridAccount - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridAccount.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridAccount message. - * @function verify - * @memberof gamehall.ThridAccount - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridAccount.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - if (!$util.isInteger(message.ThridPlatformId)) - return "ThridPlatformId: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Status != null && message.hasOwnProperty("Status")) - if (!$util.isInteger(message.Status)) - return "Status: integer expected"; - if (message.Balance != null && message.hasOwnProperty("Balance")) - if (!$util.isInteger(message.Balance) && !(message.Balance && $util.isInteger(message.Balance.low) && $util.isInteger(message.Balance.high))) - return "Balance: integer|Long expected"; - return null; - }; - - /** - * Creates a ThridAccount message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridAccount - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridAccount} ThridAccount - */ - ThridAccount.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridAccount) - return object; - var message = new $root.gamehall.ThridAccount(); - if (object.ThridPlatformId != null) - message.ThridPlatformId = object.ThridPlatformId | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Status != null) - message.Status = object.Status | 0; - if (object.Balance != null) - if ($util.Long) - (message.Balance = $util.Long.fromValue(object.Balance)).unsigned = false; - else if (typeof object.Balance === "string") - message.Balance = parseInt(object.Balance, 10); - else if (typeof object.Balance === "number") - message.Balance = object.Balance; - else if (typeof object.Balance === "object") - message.Balance = new $util.LongBits(object.Balance.low >>> 0, object.Balance.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a ThridAccount message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.ThridAccount} message ThridAccount - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridAccount.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ThridPlatformId = 0; - object.Name = ""; - object.Status = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Balance = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Balance = options.longs === String ? "0" : 0; - } - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - object.ThridPlatformId = message.ThridPlatformId; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Status != null && message.hasOwnProperty("Status")) - object.Status = message.Status; - if (message.Balance != null && message.hasOwnProperty("Balance")) - if (typeof message.Balance === "number") - object.Balance = options.longs === String ? String(message.Balance) : message.Balance; - else - object.Balance = options.longs === String ? $util.Long.prototype.toString.call(message.Balance) : options.longs === Number ? new $util.LongBits(message.Balance.low >>> 0, message.Balance.high >>> 0).toNumber() : message.Balance; - return object; - }; - - /** - * Converts this ThridAccount to JSON. - * @function toJSON - * @memberof gamehall.ThridAccount - * @instance - * @returns {Object.} JSON object - */ - ThridAccount.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridAccount - * @function getTypeUrl - * @memberof gamehall.ThridAccount - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridAccount.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridAccount"; - }; - - return ThridAccount; - })(); - - gamehall.SCThridAccountStatistic = (function() { - - /** - * Properties of a SCThridAccountStatistic. - * @memberof gamehall - * @interface ISCThridAccountStatistic - * @property {number|null} [ReqId] SCThridAccountStatistic ReqId - * @property {Array.|null} [Accounts] SCThridAccountStatistic Accounts - */ - - /** - * Constructs a new SCThridAccountStatistic. - * @memberof gamehall - * @classdesc Represents a SCThridAccountStatistic. - * @implements ISCThridAccountStatistic - * @constructor - * @param {gamehall.ISCThridAccountStatistic=} [properties] Properties to set - */ - function SCThridAccountStatistic(properties) { - this.Accounts = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridAccountStatistic ReqId. - * @member {number} ReqId - * @memberof gamehall.SCThridAccountStatistic - * @instance - */ - SCThridAccountStatistic.prototype.ReqId = 0; - - /** - * SCThridAccountStatistic Accounts. - * @member {Array.} Accounts - * @memberof gamehall.SCThridAccountStatistic - * @instance - */ - SCThridAccountStatistic.prototype.Accounts = $util.emptyArray; - - /** - * Creates a new SCThridAccountStatistic instance using the specified properties. - * @function create - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic=} [properties] Properties to set - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic instance - */ - SCThridAccountStatistic.create = function create(properties) { - return new SCThridAccountStatistic(properties); - }; - - /** - * Encodes the specified SCThridAccountStatistic message. Does not implicitly {@link gamehall.SCThridAccountStatistic.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic} message SCThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountStatistic.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ReqId != null && Object.hasOwnProperty.call(message, "ReqId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ReqId); - if (message.Accounts != null && message.Accounts.length) - for (var i = 0; i < message.Accounts.length; ++i) - $root.gamehall.ThridAccount.encode(message.Accounts[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridAccountStatistic message, length delimited. Does not implicitly {@link gamehall.SCThridAccountStatistic.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic} message SCThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountStatistic.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridAccountStatistic message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountStatistic.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridAccountStatistic(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ReqId = reader.int32(); - break; - } - case 2: { - if (!(message.Accounts && message.Accounts.length)) - message.Accounts = []; - message.Accounts.push($root.gamehall.ThridAccount.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridAccountStatistic message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountStatistic.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridAccountStatistic message. - * @function verify - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridAccountStatistic.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - if (!$util.isInteger(message.ReqId)) - return "ReqId: integer expected"; - if (message.Accounts != null && message.hasOwnProperty("Accounts")) { - if (!Array.isArray(message.Accounts)) - return "Accounts: array expected"; - for (var i = 0; i < message.Accounts.length; ++i) { - var error = $root.gamehall.ThridAccount.verify(message.Accounts[i]); - if (error) - return "Accounts." + error; - } - } - return null; - }; - - /** - * Creates a SCThridAccountStatistic message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - */ - SCThridAccountStatistic.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridAccountStatistic) - return object; - var message = new $root.gamehall.SCThridAccountStatistic(); - if (object.ReqId != null) - message.ReqId = object.ReqId | 0; - if (object.Accounts) { - if (!Array.isArray(object.Accounts)) - throw TypeError(".gamehall.SCThridAccountStatistic.Accounts: array expected"); - message.Accounts = []; - for (var i = 0; i < object.Accounts.length; ++i) { - if (typeof object.Accounts[i] !== "object") - throw TypeError(".gamehall.SCThridAccountStatistic.Accounts: object expected"); - message.Accounts[i] = $root.gamehall.ThridAccount.fromObject(object.Accounts[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridAccountStatistic message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.SCThridAccountStatistic} message SCThridAccountStatistic - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridAccountStatistic.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Accounts = []; - if (options.defaults) - object.ReqId = 0; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - object.ReqId = message.ReqId; - if (message.Accounts && message.Accounts.length) { - object.Accounts = []; - for (var j = 0; j < message.Accounts.length; ++j) - object.Accounts[j] = $root.gamehall.ThridAccount.toObject(message.Accounts[j], options); - } - return object; - }; - - /** - * Converts this SCThridAccountStatistic to JSON. - * @function toJSON - * @memberof gamehall.SCThridAccountStatistic - * @instance - * @returns {Object.} JSON object - */ - SCThridAccountStatistic.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridAccountStatistic - * @function getTypeUrl - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridAccountStatistic.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridAccountStatistic"; - }; - - return SCThridAccountStatistic; - })(); - - gamehall.CSThridAccountTransfer = (function() { - - /** - * Properties of a CSThridAccountTransfer. - * @memberof gamehall - * @interface ICSThridAccountTransfer - * @property {number|null} [FromId] CSThridAccountTransfer FromId - * @property {number|null} [ToId] CSThridAccountTransfer ToId - * @property {number|Long|null} [Amount] CSThridAccountTransfer Amount - */ - - /** - * Constructs a new CSThridAccountTransfer. - * @memberof gamehall - * @classdesc Represents a CSThridAccountTransfer. - * @implements ICSThridAccountTransfer - * @constructor - * @param {gamehall.ICSThridAccountTransfer=} [properties] Properties to set - */ - function CSThridAccountTransfer(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSThridAccountTransfer FromId. - * @member {number} FromId - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.FromId = 0; - - /** - * CSThridAccountTransfer ToId. - * @member {number} ToId - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.ToId = 0; - - /** - * CSThridAccountTransfer Amount. - * @member {number|Long} Amount - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.Amount = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSThridAccountTransfer instance using the specified properties. - * @function create - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer=} [properties] Properties to set - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer instance - */ - CSThridAccountTransfer.create = function create(properties) { - return new CSThridAccountTransfer(properties); - }; - - /** - * Encodes the specified CSThridAccountTransfer message. Does not implicitly {@link gamehall.CSThridAccountTransfer.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer} message CSThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountTransfer.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.FromId != null && Object.hasOwnProperty.call(message, "FromId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.FromId); - if (message.ToId != null && Object.hasOwnProperty.call(message, "ToId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ToId); - if (message.Amount != null && Object.hasOwnProperty.call(message, "Amount")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Amount); - return writer; - }; - - /** - * Encodes the specified CSThridAccountTransfer message, length delimited. Does not implicitly {@link gamehall.CSThridAccountTransfer.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer} message CSThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountTransfer.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridAccountTransfer message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountTransfer.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridAccountTransfer(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.FromId = reader.int32(); - break; - } - case 2: { - message.ToId = reader.int32(); - break; - } - case 3: { - message.Amount = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridAccountTransfer message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountTransfer.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridAccountTransfer message. - * @function verify - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridAccountTransfer.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.FromId != null && message.hasOwnProperty("FromId")) - if (!$util.isInteger(message.FromId)) - return "FromId: integer expected"; - if (message.ToId != null && message.hasOwnProperty("ToId")) - if (!$util.isInteger(message.ToId)) - return "ToId: integer expected"; - if (message.Amount != null && message.hasOwnProperty("Amount")) - if (!$util.isInteger(message.Amount) && !(message.Amount && $util.isInteger(message.Amount.low) && $util.isInteger(message.Amount.high))) - return "Amount: integer|Long expected"; - return null; - }; - - /** - * Creates a CSThridAccountTransfer message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - */ - CSThridAccountTransfer.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridAccountTransfer) - return object; - var message = new $root.gamehall.CSThridAccountTransfer(); - if (object.FromId != null) - message.FromId = object.FromId | 0; - if (object.ToId != null) - message.ToId = object.ToId | 0; - if (object.Amount != null) - if ($util.Long) - (message.Amount = $util.Long.fromValue(object.Amount)).unsigned = false; - else if (typeof object.Amount === "string") - message.Amount = parseInt(object.Amount, 10); - else if (typeof object.Amount === "number") - message.Amount = object.Amount; - else if (typeof object.Amount === "object") - message.Amount = new $util.LongBits(object.Amount.low >>> 0, object.Amount.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSThridAccountTransfer message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.CSThridAccountTransfer} message CSThridAccountTransfer - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridAccountTransfer.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.FromId = 0; - object.ToId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Amount = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Amount = options.longs === String ? "0" : 0; - } - if (message.FromId != null && message.hasOwnProperty("FromId")) - object.FromId = message.FromId; - if (message.ToId != null && message.hasOwnProperty("ToId")) - object.ToId = message.ToId; - if (message.Amount != null && message.hasOwnProperty("Amount")) - if (typeof message.Amount === "number") - object.Amount = options.longs === String ? String(message.Amount) : message.Amount; - else - object.Amount = options.longs === String ? $util.Long.prototype.toString.call(message.Amount) : options.longs === Number ? new $util.LongBits(message.Amount.low >>> 0, message.Amount.high >>> 0).toNumber() : message.Amount; - return object; - }; - - /** - * Converts this CSThridAccountTransfer to JSON. - * @function toJSON - * @memberof gamehall.CSThridAccountTransfer - * @instance - * @returns {Object.} JSON object - */ - CSThridAccountTransfer.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridAccountTransfer - * @function getTypeUrl - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridAccountTransfer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridAccountTransfer"; - }; - - return CSThridAccountTransfer; - })(); - - gamehall.SCThridAccountTransfer = (function() { - - /** - * Properties of a SCThridAccountTransfer. - * @memberof gamehall - * @interface ISCThridAccountTransfer - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridAccountTransfer OpRetCode - * @property {Array.|null} [Accounts] SCThridAccountTransfer Accounts - */ - - /** - * Constructs a new SCThridAccountTransfer. - * @memberof gamehall - * @classdesc Represents a SCThridAccountTransfer. - * @implements ISCThridAccountTransfer - * @constructor - * @param {gamehall.ISCThridAccountTransfer=} [properties] Properties to set - */ - function SCThridAccountTransfer(properties) { - this.Accounts = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridAccountTransfer OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridAccountTransfer - * @instance - */ - SCThridAccountTransfer.prototype.OpRetCode = 0; - - /** - * SCThridAccountTransfer Accounts. - * @member {Array.} Accounts - * @memberof gamehall.SCThridAccountTransfer - * @instance - */ - SCThridAccountTransfer.prototype.Accounts = $util.emptyArray; - - /** - * Creates a new SCThridAccountTransfer instance using the specified properties. - * @function create - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer=} [properties] Properties to set - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer instance - */ - SCThridAccountTransfer.create = function create(properties) { - return new SCThridAccountTransfer(properties); - }; - - /** - * Encodes the specified SCThridAccountTransfer message. Does not implicitly {@link gamehall.SCThridAccountTransfer.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer} message SCThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountTransfer.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Accounts != null && message.Accounts.length) - for (var i = 0; i < message.Accounts.length; ++i) - $root.gamehall.ThridAccount.encode(message.Accounts[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridAccountTransfer message, length delimited. Does not implicitly {@link gamehall.SCThridAccountTransfer.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer} message SCThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountTransfer.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridAccountTransfer message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountTransfer.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridAccountTransfer(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - if (!(message.Accounts && message.Accounts.length)) - message.Accounts = []; - message.Accounts.push($root.gamehall.ThridAccount.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridAccountTransfer message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountTransfer.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridAccountTransfer message. - * @function verify - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridAccountTransfer.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Accounts != null && message.hasOwnProperty("Accounts")) { - if (!Array.isArray(message.Accounts)) - return "Accounts: array expected"; - for (var i = 0; i < message.Accounts.length; ++i) { - var error = $root.gamehall.ThridAccount.verify(message.Accounts[i]); - if (error) - return "Accounts." + error; - } - } - return null; - }; - - /** - * Creates a SCThridAccountTransfer message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - */ - SCThridAccountTransfer.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridAccountTransfer) - return object; - var message = new $root.gamehall.SCThridAccountTransfer(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Accounts) { - if (!Array.isArray(object.Accounts)) - throw TypeError(".gamehall.SCThridAccountTransfer.Accounts: array expected"); - message.Accounts = []; - for (var i = 0; i < object.Accounts.length; ++i) { - if (typeof object.Accounts[i] !== "object") - throw TypeError(".gamehall.SCThridAccountTransfer.Accounts: object expected"); - message.Accounts[i] = $root.gamehall.ThridAccount.fromObject(object.Accounts[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridAccountTransfer message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.SCThridAccountTransfer} message SCThridAccountTransfer - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridAccountTransfer.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Accounts = []; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Accounts && message.Accounts.length) { - object.Accounts = []; - for (var j = 0; j < message.Accounts.length; ++j) - object.Accounts[j] = $root.gamehall.ThridAccount.toObject(message.Accounts[j], options); - } - return object; - }; - - /** - * Converts this SCThridAccountTransfer to JSON. - * @function toJSON - * @memberof gamehall.SCThridAccountTransfer - * @instance - * @returns {Object.} JSON object - */ - SCThridAccountTransfer.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridAccountTransfer - * @function getTypeUrl - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridAccountTransfer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridAccountTransfer"; - }; - - return SCThridAccountTransfer; - })(); - - gamehall.CSEnterThridGame = (function() { - - /** - * Properties of a CSEnterThridGame. - * @memberof gamehall - * @interface ICSEnterThridGame - * @property {number|null} [ThridGameId] CSEnterThridGame ThridGameId - */ - - /** - * Constructs a new CSEnterThridGame. - * @memberof gamehall - * @classdesc Represents a CSEnterThridGame. - * @implements ICSEnterThridGame - * @constructor - * @param {gamehall.ICSEnterThridGame=} [properties] Properties to set - */ - function CSEnterThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterThridGame ThridGameId. - * @member {number} ThridGameId - * @memberof gamehall.CSEnterThridGame - * @instance - */ - CSEnterThridGame.prototype.ThridGameId = 0; - - /** - * Creates a new CSEnterThridGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame=} [properties] Properties to set - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame instance - */ - CSEnterThridGame.create = function create(properties) { - return new CSEnterThridGame(properties); - }; - - /** - * Encodes the specified CSEnterThridGame message. Does not implicitly {@link gamehall.CSEnterThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame} message CSEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ThridGameId); - return writer; - }; - - /** - * Encodes the specified CSEnterThridGame message, length delimited. Does not implicitly {@link gamehall.CSEnterThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame} message CSEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 2: { - message.ThridGameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterThridGame message. - * @function verify - * @memberof gamehall.CSEnterThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isInteger(message.ThridGameId)) - return "ThridGameId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - */ - CSEnterThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterThridGame) - return object; - var message = new $root.gamehall.CSEnterThridGame(); - if (object.ThridGameId != null) - message.ThridGameId = object.ThridGameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.CSEnterThridGame} message CSEnterThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ThridGameId = 0; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - return object; - }; - - /** - * Converts this CSEnterThridGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterThridGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterThridGame - * @function getTypeUrl - * @memberof gamehall.CSEnterThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterThridGame"; - }; - - return CSEnterThridGame; - })(); - - gamehall.SCEnterThridGame = (function() { - - /** - * Properties of a SCEnterThridGame. - * @memberof gamehall - * @interface ISCEnterThridGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterThridGame OpRetCode - * @property {string|null} [EnterUrl] SCEnterThridGame EnterUrl - * @property {number|null} [ScreenOrientationType] SCEnterThridGame ScreenOrientationType - * @property {number|null} [ThridGameId] SCEnterThridGame ThridGameId - */ - - /** - * Constructs a new SCEnterThridGame. - * @memberof gamehall - * @classdesc Represents a SCEnterThridGame. - * @implements ISCEnterThridGame - * @constructor - * @param {gamehall.ISCEnterThridGame=} [properties] Properties to set - */ - function SCEnterThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterThridGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.OpRetCode = 0; - - /** - * SCEnterThridGame EnterUrl. - * @member {string} EnterUrl - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.EnterUrl = ""; - - /** - * SCEnterThridGame ScreenOrientationType. - * @member {number} ScreenOrientationType - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.ScreenOrientationType = 0; - - /** - * SCEnterThridGame ThridGameId. - * @member {number} ThridGameId - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.ThridGameId = 0; - - /** - * Creates a new SCEnterThridGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame=} [properties] Properties to set - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame instance - */ - SCEnterThridGame.create = function create(properties) { - return new SCEnterThridGame(properties); - }; - - /** - * Encodes the specified SCEnterThridGame message. Does not implicitly {@link gamehall.SCEnterThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame} message SCEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.EnterUrl != null && Object.hasOwnProperty.call(message, "EnterUrl")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.EnterUrl); - if (message.ScreenOrientationType != null && Object.hasOwnProperty.call(message, "ScreenOrientationType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.ScreenOrientationType); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ThridGameId); - return writer; - }; - - /** - * Encodes the specified SCEnterThridGame message, length delimited. Does not implicitly {@link gamehall.SCEnterThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame} message SCEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.EnterUrl = reader.string(); - break; - } - case 3: { - message.ScreenOrientationType = reader.int32(); - break; - } - case 4: { - message.ThridGameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterThridGame message. - * @function verify - * @memberof gamehall.SCEnterThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.EnterUrl != null && message.hasOwnProperty("EnterUrl")) - if (!$util.isString(message.EnterUrl)) - return "EnterUrl: string expected"; - if (message.ScreenOrientationType != null && message.hasOwnProperty("ScreenOrientationType")) - if (!$util.isInteger(message.ScreenOrientationType)) - return "ScreenOrientationType: integer expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isInteger(message.ThridGameId)) - return "ThridGameId: integer expected"; - return null; - }; - - /** - * Creates a SCEnterThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - */ - SCEnterThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterThridGame) - return object; - var message = new $root.gamehall.SCEnterThridGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.EnterUrl != null) - message.EnterUrl = String(object.EnterUrl); - if (object.ScreenOrientationType != null) - message.ScreenOrientationType = object.ScreenOrientationType | 0; - if (object.ThridGameId != null) - message.ThridGameId = object.ThridGameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.SCEnterThridGame} message SCEnterThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.EnterUrl = ""; - object.ScreenOrientationType = 0; - object.ThridGameId = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.EnterUrl != null && message.hasOwnProperty("EnterUrl")) - object.EnterUrl = message.EnterUrl; - if (message.ScreenOrientationType != null && message.hasOwnProperty("ScreenOrientationType")) - object.ScreenOrientationType = message.ScreenOrientationType; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - return object; - }; - - /** - * Converts this SCEnterThridGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterThridGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterThridGame - * @function getTypeUrl - * @memberof gamehall.SCEnterThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterThridGame"; - }; - - return SCEnterThridGame; - })(); - - gamehall.CSLeaveThridGame = (function() { - - /** - * Properties of a CSLeaveThridGame. - * @memberof gamehall - * @interface ICSLeaveThridGame - */ - - /** - * Constructs a new CSLeaveThridGame. - * @memberof gamehall - * @classdesc Represents a CSLeaveThridGame. - * @implements ICSLeaveThridGame - * @constructor - * @param {gamehall.ICSLeaveThridGame=} [properties] Properties to set - */ - function CSLeaveThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveThridGame instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame=} [properties] Properties to set - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame instance - */ - CSLeaveThridGame.create = function create(properties) { - return new CSLeaveThridGame(properties); - }; - - /** - * Encodes the specified CSLeaveThridGame message. Does not implicitly {@link gamehall.CSLeaveThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame} message CSLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveThridGame message, length delimited. Does not implicitly {@link gamehall.CSLeaveThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame} message CSLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveThridGame message. - * @function verify - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - */ - CSLeaveThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveThridGame) - return object; - return new $root.gamehall.CSLeaveThridGame(); - }; - - /** - * Creates a plain object from a CSLeaveThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.CSLeaveThridGame} message CSLeaveThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveThridGame.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveThridGame to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveThridGame - * @instance - * @returns {Object.} JSON object - */ - CSLeaveThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveThridGame - * @function getTypeUrl - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveThridGame"; - }; - - return CSLeaveThridGame; - })(); - - gamehall.SCLeaveThridGame = (function() { - - /** - * Properties of a SCLeaveThridGame. - * @memberof gamehall - * @interface ISCLeaveThridGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveThridGame OpRetCode - */ - - /** - * Constructs a new SCLeaveThridGame. - * @memberof gamehall - * @classdesc Represents a SCLeaveThridGame. - * @implements ISCLeaveThridGame - * @constructor - * @param {gamehall.ISCLeaveThridGame=} [properties] Properties to set - */ - function SCLeaveThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveThridGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveThridGame - * @instance - */ - SCLeaveThridGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCLeaveThridGame instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame=} [properties] Properties to set - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame instance - */ - SCLeaveThridGame.create = function create(properties) { - return new SCLeaveThridGame(properties); - }; - - /** - * Encodes the specified SCLeaveThridGame message. Does not implicitly {@link gamehall.SCLeaveThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame} message SCLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCLeaveThridGame message, length delimited. Does not implicitly {@link gamehall.SCLeaveThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame} message SCLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveThridGame message. - * @function verify - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCLeaveThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - */ - SCLeaveThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveThridGame) - return object; - var message = new $root.gamehall.SCLeaveThridGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCLeaveThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.SCLeaveThridGame} message SCLeaveThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCLeaveThridGame to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveThridGame - * @instance - * @returns {Object.} JSON object - */ - SCLeaveThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveThridGame - * @function getTypeUrl - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveThridGame"; - }; - - return SCLeaveThridGame; - })(); - - gamehall.CSThridGameList = (function() { - - /** - * Properties of a CSThridGameList. - * @memberof gamehall - * @interface ICSThridGameList - */ - - /** - * Constructs a new CSThridGameList. - * @memberof gamehall - * @classdesc Represents a CSThridGameList. - * @implements ICSThridGameList - * @constructor - * @param {gamehall.ICSThridGameList=} [properties] Properties to set - */ - function CSThridGameList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSThridGameList instance using the specified properties. - * @function create - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList=} [properties] Properties to set - * @returns {gamehall.CSThridGameList} CSThridGameList instance - */ - CSThridGameList.create = function create(properties) { - return new CSThridGameList(properties); - }; - - /** - * Encodes the specified CSThridGameList message. Does not implicitly {@link gamehall.CSThridGameList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList} message CSThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSThridGameList message, length delimited. Does not implicitly {@link gamehall.CSThridGameList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList} message CSThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridGameList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridGameList} CSThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridGameList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridGameList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridGameList} CSThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridGameList message. - * @function verify - * @memberof gamehall.CSThridGameList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridGameList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSThridGameList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridGameList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridGameList} CSThridGameList - */ - CSThridGameList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridGameList) - return object; - return new $root.gamehall.CSThridGameList(); - }; - - /** - * Creates a plain object from a CSThridGameList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.CSThridGameList} message CSThridGameList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridGameList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSThridGameList to JSON. - * @function toJSON - * @memberof gamehall.CSThridGameList - * @instance - * @returns {Object.} JSON object - */ - CSThridGameList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridGameList - * @function getTypeUrl - * @memberof gamehall.CSThridGameList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridGameList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridGameList"; - }; - - return CSThridGameList; - })(); - - gamehall.ThridGameDatas = (function() { - - /** - * Properties of a ThridGameDatas. - * @memberof gamehall - * @interface IThridGameDatas - * @property {string|null} [ThridGameId] ThridGameDatas ThridGameId - * @property {string|null} [ThridGameName] ThridGameDatas ThridGameName - */ - - /** - * Constructs a new ThridGameDatas. - * @memberof gamehall - * @classdesc Represents a ThridGameDatas. - * @implements IThridGameDatas - * @constructor - * @param {gamehall.IThridGameDatas=} [properties] Properties to set - */ - function ThridGameDatas(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridGameDatas ThridGameId. - * @member {string} ThridGameId - * @memberof gamehall.ThridGameDatas - * @instance - */ - ThridGameDatas.prototype.ThridGameId = ""; - - /** - * ThridGameDatas ThridGameName. - * @member {string} ThridGameName - * @memberof gamehall.ThridGameDatas - * @instance - */ - ThridGameDatas.prototype.ThridGameName = ""; - - /** - * Creates a new ThridGameDatas instance using the specified properties. - * @function create - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas=} [properties] Properties to set - * @returns {gamehall.ThridGameDatas} ThridGameDatas instance - */ - ThridGameDatas.create = function create(properties) { - return new ThridGameDatas(properties); - }; - - /** - * Encodes the specified ThridGameDatas message. Does not implicitly {@link gamehall.ThridGameDatas.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas} message ThridGameDatas message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGameDatas.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.ThridGameId); - if (message.ThridGameName != null && Object.hasOwnProperty.call(message, "ThridGameName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.ThridGameName); - return writer; - }; - - /** - * Encodes the specified ThridGameDatas message, length delimited. Does not implicitly {@link gamehall.ThridGameDatas.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas} message ThridGameDatas message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGameDatas.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridGameDatas message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridGameDatas - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridGameDatas} ThridGameDatas - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGameDatas.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridGameDatas(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridGameId = reader.string(); - break; - } - case 2: { - message.ThridGameName = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridGameDatas message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridGameDatas - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridGameDatas} ThridGameDatas - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGameDatas.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridGameDatas message. - * @function verify - * @memberof gamehall.ThridGameDatas - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridGameDatas.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isString(message.ThridGameId)) - return "ThridGameId: string expected"; - if (message.ThridGameName != null && message.hasOwnProperty("ThridGameName")) - if (!$util.isString(message.ThridGameName)) - return "ThridGameName: string expected"; - return null; - }; - - /** - * Creates a ThridGameDatas message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridGameDatas - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridGameDatas} ThridGameDatas - */ - ThridGameDatas.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridGameDatas) - return object; - var message = new $root.gamehall.ThridGameDatas(); - if (object.ThridGameId != null) - message.ThridGameId = String(object.ThridGameId); - if (object.ThridGameName != null) - message.ThridGameName = String(object.ThridGameName); - return message; - }; - - /** - * Creates a plain object from a ThridGameDatas message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.ThridGameDatas} message ThridGameDatas - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridGameDatas.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ThridGameId = ""; - object.ThridGameName = ""; - } - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - if (message.ThridGameName != null && message.hasOwnProperty("ThridGameName")) - object.ThridGameName = message.ThridGameName; - return object; - }; - - /** - * Converts this ThridGameDatas to JSON. - * @function toJSON - * @memberof gamehall.ThridGameDatas - * @instance - * @returns {Object.} JSON object - */ - ThridGameDatas.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridGameDatas - * @function getTypeUrl - * @memberof gamehall.ThridGameDatas - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridGameDatas.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridGameDatas"; - }; - - return ThridGameDatas; - })(); - - gamehall.ThridGamePlatforms = (function() { - - /** - * Properties of a ThridGamePlatforms. - * @memberof gamehall - * @interface IThridGamePlatforms - * @property {number|null} [ThridPlatformId] ThridGamePlatforms ThridPlatformId - * @property {string|null} [ThridPlatformName] ThridGamePlatforms ThridPlatformName - * @property {Array.|null} [GameDatas] ThridGamePlatforms GameDatas - */ - - /** - * Constructs a new ThridGamePlatforms. - * @memberof gamehall - * @classdesc Represents a ThridGamePlatforms. - * @implements IThridGamePlatforms - * @constructor - * @param {gamehall.IThridGamePlatforms=} [properties] Properties to set - */ - function ThridGamePlatforms(properties) { - this.GameDatas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridGamePlatforms ThridPlatformId. - * @member {number} ThridPlatformId - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.ThridPlatformId = 0; - - /** - * ThridGamePlatforms ThridPlatformName. - * @member {string} ThridPlatformName - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.ThridPlatformName = ""; - - /** - * ThridGamePlatforms GameDatas. - * @member {Array.} GameDatas - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.GameDatas = $util.emptyArray; - - /** - * Creates a new ThridGamePlatforms instance using the specified properties. - * @function create - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms=} [properties] Properties to set - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms instance - */ - ThridGamePlatforms.create = function create(properties) { - return new ThridGamePlatforms(properties); - }; - - /** - * Encodes the specified ThridGamePlatforms message. Does not implicitly {@link gamehall.ThridGamePlatforms.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms} message ThridGamePlatforms message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGamePlatforms.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridPlatformId != null && Object.hasOwnProperty.call(message, "ThridPlatformId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ThridPlatformId); - if (message.ThridPlatformName != null && Object.hasOwnProperty.call(message, "ThridPlatformName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.ThridPlatformName); - if (message.GameDatas != null && message.GameDatas.length) - for (var i = 0; i < message.GameDatas.length; ++i) - $root.gamehall.ThridGameDatas.encode(message.GameDatas[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified ThridGamePlatforms message, length delimited. Does not implicitly {@link gamehall.ThridGamePlatforms.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms} message ThridGamePlatforms message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGamePlatforms.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridGamePlatforms message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGamePlatforms.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridGamePlatforms(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridPlatformId = reader.int32(); - break; - } - case 2: { - message.ThridPlatformName = reader.string(); - break; - } - case 3: { - if (!(message.GameDatas && message.GameDatas.length)) - message.GameDatas = []; - message.GameDatas.push($root.gamehall.ThridGameDatas.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridGamePlatforms message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGamePlatforms.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridGamePlatforms message. - * @function verify - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridGamePlatforms.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - if (!$util.isInteger(message.ThridPlatformId)) - return "ThridPlatformId: integer expected"; - if (message.ThridPlatformName != null && message.hasOwnProperty("ThridPlatformName")) - if (!$util.isString(message.ThridPlatformName)) - return "ThridPlatformName: string expected"; - if (message.GameDatas != null && message.hasOwnProperty("GameDatas")) { - if (!Array.isArray(message.GameDatas)) - return "GameDatas: array expected"; - for (var i = 0; i < message.GameDatas.length; ++i) { - var error = $root.gamehall.ThridGameDatas.verify(message.GameDatas[i]); - if (error) - return "GameDatas." + error; - } - } - return null; - }; - - /** - * Creates a ThridGamePlatforms message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - */ - ThridGamePlatforms.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridGamePlatforms) - return object; - var message = new $root.gamehall.ThridGamePlatforms(); - if (object.ThridPlatformId != null) - message.ThridPlatformId = object.ThridPlatformId | 0; - if (object.ThridPlatformName != null) - message.ThridPlatformName = String(object.ThridPlatformName); - if (object.GameDatas) { - if (!Array.isArray(object.GameDatas)) - throw TypeError(".gamehall.ThridGamePlatforms.GameDatas: array expected"); - message.GameDatas = []; - for (var i = 0; i < object.GameDatas.length; ++i) { - if (typeof object.GameDatas[i] !== "object") - throw TypeError(".gamehall.ThridGamePlatforms.GameDatas: object expected"); - message.GameDatas[i] = $root.gamehall.ThridGameDatas.fromObject(object.GameDatas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a ThridGamePlatforms message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.ThridGamePlatforms} message ThridGamePlatforms - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridGamePlatforms.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameDatas = []; - if (options.defaults) { - object.ThridPlatformId = 0; - object.ThridPlatformName = ""; - } - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - object.ThridPlatformId = message.ThridPlatformId; - if (message.ThridPlatformName != null && message.hasOwnProperty("ThridPlatformName")) - object.ThridPlatformName = message.ThridPlatformName; - if (message.GameDatas && message.GameDatas.length) { - object.GameDatas = []; - for (var j = 0; j < message.GameDatas.length; ++j) - object.GameDatas[j] = $root.gamehall.ThridGameDatas.toObject(message.GameDatas[j], options); - } - return object; - }; - - /** - * Converts this ThridGamePlatforms to JSON. - * @function toJSON - * @memberof gamehall.ThridGamePlatforms - * @instance - * @returns {Object.} JSON object - */ - ThridGamePlatforms.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridGamePlatforms - * @function getTypeUrl - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridGamePlatforms.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridGamePlatforms"; - }; - - return ThridGamePlatforms; - })(); - - gamehall.SCThridGameList = (function() { - - /** - * Properties of a SCThridGameList. - * @memberof gamehall - * @interface ISCThridGameList - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameList OpRetCode - * @property {Array.|null} [GamePlatforms] SCThridGameList GamePlatforms - */ - - /** - * Constructs a new SCThridGameList. - * @memberof gamehall - * @classdesc Represents a SCThridGameList. - * @implements ISCThridGameList - * @constructor - * @param {gamehall.ISCThridGameList=} [properties] Properties to set - */ - function SCThridGameList(properties) { - this.GamePlatforms = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameList OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameList - * @instance - */ - SCThridGameList.prototype.OpRetCode = 0; - - /** - * SCThridGameList GamePlatforms. - * @member {Array.} GamePlatforms - * @memberof gamehall.SCThridGameList - * @instance - */ - SCThridGameList.prototype.GamePlatforms = $util.emptyArray; - - /** - * Creates a new SCThridGameList instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList=} [properties] Properties to set - * @returns {gamehall.SCThridGameList} SCThridGameList instance - */ - SCThridGameList.create = function create(properties) { - return new SCThridGameList(properties); - }; - - /** - * Encodes the specified SCThridGameList message. Does not implicitly {@link gamehall.SCThridGameList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList} message SCThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.GamePlatforms != null && message.GamePlatforms.length) - for (var i = 0; i < message.GamePlatforms.length; ++i) - $root.gamehall.ThridGamePlatforms.encode(message.GamePlatforms[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridGameList message, length delimited. Does not implicitly {@link gamehall.SCThridGameList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList} message SCThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameList} SCThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - if (!(message.GamePlatforms && message.GamePlatforms.length)) - message.GamePlatforms = []; - message.GamePlatforms.push($root.gamehall.ThridGamePlatforms.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameList} SCThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameList message. - * @function verify - * @memberof gamehall.SCThridGameList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.GamePlatforms != null && message.hasOwnProperty("GamePlatforms")) { - if (!Array.isArray(message.GamePlatforms)) - return "GamePlatforms: array expected"; - for (var i = 0; i < message.GamePlatforms.length; ++i) { - var error = $root.gamehall.ThridGamePlatforms.verify(message.GamePlatforms[i]); - if (error) - return "GamePlatforms." + error; - } - } - return null; - }; - - /** - * Creates a SCThridGameList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameList} SCThridGameList - */ - SCThridGameList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameList) - return object; - var message = new $root.gamehall.SCThridGameList(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.GamePlatforms) { - if (!Array.isArray(object.GamePlatforms)) - throw TypeError(".gamehall.SCThridGameList.GamePlatforms: array expected"); - message.GamePlatforms = []; - for (var i = 0; i < object.GamePlatforms.length; ++i) { - if (typeof object.GamePlatforms[i] !== "object") - throw TypeError(".gamehall.SCThridGameList.GamePlatforms: object expected"); - message.GamePlatforms[i] = $root.gamehall.ThridGamePlatforms.fromObject(object.GamePlatforms[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridGameList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.SCThridGameList} message SCThridGameList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GamePlatforms = []; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.GamePlatforms && message.GamePlatforms.length) { - object.GamePlatforms = []; - for (var j = 0; j < message.GamePlatforms.length; ++j) - object.GamePlatforms[j] = $root.gamehall.ThridGamePlatforms.toObject(message.GamePlatforms[j], options); - } - return object; - }; - - /** - * Converts this SCThridGameList to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameList - * @instance - * @returns {Object.} JSON object - */ - SCThridGameList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameList - * @function getTypeUrl - * @memberof gamehall.SCThridGameList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameList"; - }; - - return SCThridGameList; - })(); - - gamehall.CSThridGameBalanceUpdate = (function() { - - /** - * Properties of a CSThridGameBalanceUpdate. - * @memberof gamehall - * @interface ICSThridGameBalanceUpdate - */ - - /** - * Constructs a new CSThridGameBalanceUpdate. - * @memberof gamehall - * @classdesc Represents a CSThridGameBalanceUpdate. - * @implements ICSThridGameBalanceUpdate - * @constructor - * @param {gamehall.ICSThridGameBalanceUpdate=} [properties] Properties to set - */ - function CSThridGameBalanceUpdate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSThridGameBalanceUpdate instance using the specified properties. - * @function create - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate=} [properties] Properties to set - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate instance - */ - CSThridGameBalanceUpdate.create = function create(properties) { - return new CSThridGameBalanceUpdate(properties); - }; - - /** - * Encodes the specified CSThridGameBalanceUpdate message. Does not implicitly {@link gamehall.CSThridGameBalanceUpdate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate} message CSThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameBalanceUpdate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSThridGameBalanceUpdate message, length delimited. Does not implicitly {@link gamehall.CSThridGameBalanceUpdate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate} message CSThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameBalanceUpdate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridGameBalanceUpdate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameBalanceUpdate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridGameBalanceUpdate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridGameBalanceUpdate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameBalanceUpdate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridGameBalanceUpdate message. - * @function verify - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridGameBalanceUpdate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSThridGameBalanceUpdate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - */ - CSThridGameBalanceUpdate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridGameBalanceUpdate) - return object; - return new $root.gamehall.CSThridGameBalanceUpdate(); - }; - - /** - * Creates a plain object from a CSThridGameBalanceUpdate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.CSThridGameBalanceUpdate} message CSThridGameBalanceUpdate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridGameBalanceUpdate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSThridGameBalanceUpdate to JSON. - * @function toJSON - * @memberof gamehall.CSThridGameBalanceUpdate - * @instance - * @returns {Object.} JSON object - */ - CSThridGameBalanceUpdate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridGameBalanceUpdate - * @function getTypeUrl - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridGameBalanceUpdate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridGameBalanceUpdate"; - }; - - return CSThridGameBalanceUpdate; - })(); - - gamehall.SCThridGameBalanceUpdate = (function() { - - /** - * Properties of a SCThridGameBalanceUpdate. - * @memberof gamehall - * @interface ISCThridGameBalanceUpdate - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameBalanceUpdate OpRetCode - * @property {number|Long|null} [Coin] SCThridGameBalanceUpdate Coin - */ - - /** - * Constructs a new SCThridGameBalanceUpdate. - * @memberof gamehall - * @classdesc Represents a SCThridGameBalanceUpdate. - * @implements ISCThridGameBalanceUpdate - * @constructor - * @param {gamehall.ISCThridGameBalanceUpdate=} [properties] Properties to set - */ - function SCThridGameBalanceUpdate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameBalanceUpdate OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - */ - SCThridGameBalanceUpdate.prototype.OpRetCode = 0; - - /** - * SCThridGameBalanceUpdate Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - */ - SCThridGameBalanceUpdate.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCThridGameBalanceUpdate instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate=} [properties] Properties to set - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate instance - */ - SCThridGameBalanceUpdate.create = function create(properties) { - return new SCThridGameBalanceUpdate(properties); - }; - - /** - * Encodes the specified SCThridGameBalanceUpdate message. Does not implicitly {@link gamehall.SCThridGameBalanceUpdate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate} message SCThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCThridGameBalanceUpdate message, length delimited. Does not implicitly {@link gamehall.SCThridGameBalanceUpdate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate} message SCThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameBalanceUpdate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameBalanceUpdate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameBalanceUpdate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameBalanceUpdate message. - * @function verify - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameBalanceUpdate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCThridGameBalanceUpdate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - */ - SCThridGameBalanceUpdate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameBalanceUpdate) - return object; - var message = new $root.gamehall.SCThridGameBalanceUpdate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCThridGameBalanceUpdate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.SCThridGameBalanceUpdate} message SCThridGameBalanceUpdate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameBalanceUpdate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCThridGameBalanceUpdate to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - * @returns {Object.} JSON object - */ - SCThridGameBalanceUpdate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameBalanceUpdate - * @function getTypeUrl - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameBalanceUpdate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameBalanceUpdate"; - }; - - return SCThridGameBalanceUpdate; - })(); - - gamehall.SCThridGameBalanceUpdateState = (function() { - - /** - * Properties of a SCThridGameBalanceUpdateState. - * @memberof gamehall - * @interface ISCThridGameBalanceUpdateState - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameBalanceUpdateState OpRetCode - */ - - /** - * Constructs a new SCThridGameBalanceUpdateState. - * @memberof gamehall - * @classdesc Represents a SCThridGameBalanceUpdateState. - * @implements ISCThridGameBalanceUpdateState - * @constructor - * @param {gamehall.ISCThridGameBalanceUpdateState=} [properties] Properties to set - */ - function SCThridGameBalanceUpdateState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameBalanceUpdateState OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @instance - */ - SCThridGameBalanceUpdateState.prototype.OpRetCode = 0; - - /** - * Creates a new SCThridGameBalanceUpdateState instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState=} [properties] Properties to set - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState instance - */ - SCThridGameBalanceUpdateState.create = function create(properties) { - return new SCThridGameBalanceUpdateState(properties); - }; - - /** - * Encodes the specified SCThridGameBalanceUpdateState message. Does not implicitly {@link gamehall.SCThridGameBalanceUpdateState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdateState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCThridGameBalanceUpdateState message, length delimited. Does not implicitly {@link gamehall.SCThridGameBalanceUpdateState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdateState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameBalanceUpdateState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdateState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameBalanceUpdateState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameBalanceUpdateState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdateState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameBalanceUpdateState message. - * @function verify - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameBalanceUpdateState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCThridGameBalanceUpdateState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - */ - SCThridGameBalanceUpdateState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameBalanceUpdateState) - return object; - var message = new $root.gamehall.SCThridGameBalanceUpdateState(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCThridGameBalanceUpdateState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.SCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameBalanceUpdateState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCThridGameBalanceUpdateState to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameBalanceUpdateState - * @instance - * @returns {Object.} JSON object - */ - SCThridGameBalanceUpdateState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameBalanceUpdateState - * @function getTypeUrl - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameBalanceUpdateState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameBalanceUpdateState"; - }; - - return SCThridGameBalanceUpdateState; - })(); - - gamehall.CSCreatePrivateRoom = (function() { - - /** - * Properties of a CSCreatePrivateRoom. - * @memberof gamehall - * @interface ICSCreatePrivateRoom - * @property {number|null} [GameFreeId] CSCreatePrivateRoom GameFreeId - * @property {Array.|null} [Params] CSCreatePrivateRoom Params - */ - - /** - * Constructs a new CSCreatePrivateRoom. - * @memberof gamehall - * @classdesc Represents a CSCreatePrivateRoom. - * @implements ICSCreatePrivateRoom - * @constructor - * @param {gamehall.ICSCreatePrivateRoom=} [properties] Properties to set - */ - function CSCreatePrivateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCreatePrivateRoom GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSCreatePrivateRoom - * @instance - */ - CSCreatePrivateRoom.prototype.GameFreeId = 0; - - /** - * CSCreatePrivateRoom Params. - * @member {Array.} Params - * @memberof gamehall.CSCreatePrivateRoom - * @instance - */ - CSCreatePrivateRoom.prototype.Params = $util.emptyArray; - - /** - * Creates a new CSCreatePrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom=} [properties] Properties to set - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom instance - */ - CSCreatePrivateRoom.create = function create(properties) { - return new CSCreatePrivateRoom(properties); - }; - - /** - * Encodes the specified CSCreatePrivateRoom message. Does not implicitly {@link gamehall.CSCreatePrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom} message CSCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreatePrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified CSCreatePrivateRoom message, length delimited. Does not implicitly {@link gamehall.CSCreatePrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom} message CSCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreatePrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCreatePrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreatePrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCreatePrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCreatePrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreatePrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCreatePrivateRoom message. - * @function verify - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCreatePrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - return null; - }; - - /** - * Creates a CSCreatePrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - */ - CSCreatePrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCreatePrivateRoom) - return object; - var message = new $root.gamehall.CSCreatePrivateRoom(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.CSCreatePrivateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a CSCreatePrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.CSCreatePrivateRoom} message CSCreatePrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCreatePrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - return object; - }; - - /** - * Converts this CSCreatePrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCreatePrivateRoom - * @instance - * @returns {Object.} JSON object - */ - CSCreatePrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCreatePrivateRoom - * @function getTypeUrl - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCreatePrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCreatePrivateRoom"; - }; - - return CSCreatePrivateRoom; - })(); - - gamehall.SCCreatePrivateRoom = (function() { - - /** - * Properties of a SCCreatePrivateRoom. - * @memberof gamehall - * @interface ISCCreatePrivateRoom - * @property {number|null} [GameFreeId] SCCreatePrivateRoom GameFreeId - * @property {Array.|null} [Params] SCCreatePrivateRoom Params - * @property {number|null} [RoomId] SCCreatePrivateRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCCreatePrivateRoom OpRetCode - */ - - /** - * Constructs a new SCCreatePrivateRoom. - * @memberof gamehall - * @classdesc Represents a SCCreatePrivateRoom. - * @implements ISCCreatePrivateRoom - * @constructor - * @param {gamehall.ISCCreatePrivateRoom=} [properties] Properties to set - */ - function SCCreatePrivateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCreatePrivateRoom GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.GameFreeId = 0; - - /** - * SCCreatePrivateRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.Params = $util.emptyArray; - - /** - * SCCreatePrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.RoomId = 0; - - /** - * SCCreatePrivateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.OpRetCode = 0; - - /** - * Creates a new SCCreatePrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom=} [properties] Properties to set - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom instance - */ - SCCreatePrivateRoom.create = function create(properties) { - return new SCCreatePrivateRoom(properties); - }; - - /** - * Encodes the specified SCCreatePrivateRoom message. Does not implicitly {@link gamehall.SCCreatePrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom} message SCCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreatePrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCCreatePrivateRoom message, length delimited. Does not implicitly {@link gamehall.SCCreatePrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom} message SCCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreatePrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCreatePrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreatePrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCreatePrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCreatePrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreatePrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCreatePrivateRoom message. - * @function verify - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCreatePrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCCreatePrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - */ - SCCreatePrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCreatePrivateRoom) - return object; - var message = new $root.gamehall.SCCreatePrivateRoom(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCCreatePrivateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCCreatePrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.SCCreatePrivateRoom} message SCCreatePrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCreatePrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCCreatePrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCreatePrivateRoom - * @instance - * @returns {Object.} JSON object - */ - SCCreatePrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCreatePrivateRoom - * @function getTypeUrl - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCreatePrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCreatePrivateRoom"; - }; - - return SCCreatePrivateRoom; - })(); - - gamehall.PrivateRoomInfo = (function() { - - /** - * Properties of a PrivateRoomInfo. - * @memberof gamehall - * @interface IPrivateRoomInfo - * @property {number|null} [GameFreeId] PrivateRoomInfo GameFreeId - * @property {number|null} [RoomId] PrivateRoomInfo RoomId - * @property {number|null} [CurrRound] PrivateRoomInfo CurrRound - * @property {number|null} [MaxRound] PrivateRoomInfo MaxRound - * @property {number|null} [CurrNum] PrivateRoomInfo CurrNum - * @property {number|null} [MaxPlayer] PrivateRoomInfo MaxPlayer - * @property {number|null} [CreateTs] PrivateRoomInfo CreateTs - */ - - /** - * Constructs a new PrivateRoomInfo. - * @memberof gamehall - * @classdesc Represents a PrivateRoomInfo. - * @implements IPrivateRoomInfo - * @constructor - * @param {gamehall.IPrivateRoomInfo=} [properties] Properties to set - */ - function PrivateRoomInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PrivateRoomInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.GameFreeId = 0; - - /** - * PrivateRoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.RoomId = 0; - - /** - * PrivateRoomInfo CurrRound. - * @member {number} CurrRound - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CurrRound = 0; - - /** - * PrivateRoomInfo MaxRound. - * @member {number} MaxRound - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.MaxRound = 0; - - /** - * PrivateRoomInfo CurrNum. - * @member {number} CurrNum - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CurrNum = 0; - - /** - * PrivateRoomInfo MaxPlayer. - * @member {number} MaxPlayer - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.MaxPlayer = 0; - - /** - * PrivateRoomInfo CreateTs. - * @member {number} CreateTs - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CreateTs = 0; - - /** - * Creates a new PrivateRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo=} [properties] Properties to set - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo instance - */ - PrivateRoomInfo.create = function create(properties) { - return new PrivateRoomInfo(properties); - }; - - /** - * Encodes the specified PrivateRoomInfo message. Does not implicitly {@link gamehall.PrivateRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo} message PrivateRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.CurrRound != null && Object.hasOwnProperty.call(message, "CurrRound")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CurrRound); - if (message.MaxRound != null && Object.hasOwnProperty.call(message, "MaxRound")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxRound); - if (message.CurrNum != null && Object.hasOwnProperty.call(message, "CurrNum")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CurrNum); - if (message.MaxPlayer != null && Object.hasOwnProperty.call(message, "MaxPlayer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxPlayer); - if (message.CreateTs != null && Object.hasOwnProperty.call(message, "CreateTs")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.CreateTs); - return writer; - }; - - /** - * Encodes the specified PrivateRoomInfo message, length delimited. Does not implicitly {@link gamehall.PrivateRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo} message PrivateRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PrivateRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PrivateRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.CurrRound = reader.int32(); - break; - } - case 4: { - message.MaxRound = reader.int32(); - break; - } - case 5: { - message.CurrNum = reader.int32(); - break; - } - case 6: { - message.MaxPlayer = reader.int32(); - break; - } - case 7: { - message.CreateTs = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PrivateRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PrivateRoomInfo message. - * @function verify - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PrivateRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.CurrRound != null && message.hasOwnProperty("CurrRound")) - if (!$util.isInteger(message.CurrRound)) - return "CurrRound: integer expected"; - if (message.MaxRound != null && message.hasOwnProperty("MaxRound")) - if (!$util.isInteger(message.MaxRound)) - return "MaxRound: integer expected"; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - if (!$util.isInteger(message.CurrNum)) - return "CurrNum: integer expected"; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - if (!$util.isInteger(message.MaxPlayer)) - return "MaxPlayer: integer expected"; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - if (!$util.isInteger(message.CreateTs)) - return "CreateTs: integer expected"; - return null; - }; - - /** - * Creates a PrivateRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - */ - PrivateRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PrivateRoomInfo) - return object; - var message = new $root.gamehall.PrivateRoomInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.CurrRound != null) - message.CurrRound = object.CurrRound | 0; - if (object.MaxRound != null) - message.MaxRound = object.MaxRound | 0; - if (object.CurrNum != null) - message.CurrNum = object.CurrNum | 0; - if (object.MaxPlayer != null) - message.MaxPlayer = object.MaxPlayer | 0; - if (object.CreateTs != null) - message.CreateTs = object.CreateTs | 0; - return message; - }; - - /** - * Creates a plain object from a PrivateRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.PrivateRoomInfo} message PrivateRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PrivateRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.CurrRound = 0; - object.MaxRound = 0; - object.CurrNum = 0; - object.MaxPlayer = 0; - object.CreateTs = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.CurrRound != null && message.hasOwnProperty("CurrRound")) - object.CurrRound = message.CurrRound; - if (message.MaxRound != null && message.hasOwnProperty("MaxRound")) - object.MaxRound = message.MaxRound; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - object.CurrNum = message.CurrNum; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - object.MaxPlayer = message.MaxPlayer; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - object.CreateTs = message.CreateTs; - return object; - }; - - /** - * Converts this PrivateRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.PrivateRoomInfo - * @instance - * @returns {Object.} JSON object - */ - PrivateRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PrivateRoomInfo - * @function getTypeUrl - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PrivateRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PrivateRoomInfo"; - }; - - return PrivateRoomInfo; - })(); - - gamehall.CSGetPrivateRoomList = (function() { - - /** - * Properties of a CSGetPrivateRoomList. - * @memberof gamehall - * @interface ICSGetPrivateRoomList - */ - - /** - * Constructs a new CSGetPrivateRoomList. - * @memberof gamehall - * @classdesc Represents a CSGetPrivateRoomList. - * @implements ICSGetPrivateRoomList - * @constructor - * @param {gamehall.ICSGetPrivateRoomList=} [properties] Properties to set - */ - function CSGetPrivateRoomList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSGetPrivateRoomList instance using the specified properties. - * @function create - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList=} [properties] Properties to set - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList instance - */ - CSGetPrivateRoomList.create = function create(properties) { - return new CSGetPrivateRoomList(properties); - }; - - /** - * Encodes the specified CSGetPrivateRoomList message. Does not implicitly {@link gamehall.CSGetPrivateRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList} message CSGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSGetPrivateRoomList message, length delimited. Does not implicitly {@link gamehall.CSGetPrivateRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList} message CSGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetPrivateRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetPrivateRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetPrivateRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetPrivateRoomList message. - * @function verify - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetPrivateRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSGetPrivateRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - */ - CSGetPrivateRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetPrivateRoomList) - return object; - return new $root.gamehall.CSGetPrivateRoomList(); - }; - - /** - * Creates a plain object from a CSGetPrivateRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.CSGetPrivateRoomList} message CSGetPrivateRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetPrivateRoomList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSGetPrivateRoomList to JSON. - * @function toJSON - * @memberof gamehall.CSGetPrivateRoomList - * @instance - * @returns {Object.} JSON object - */ - CSGetPrivateRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetPrivateRoomList - * @function getTypeUrl - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetPrivateRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetPrivateRoomList"; - }; - - return CSGetPrivateRoomList; - })(); - - gamehall.SCGetPrivateRoomList = (function() { - - /** - * Properties of a SCGetPrivateRoomList. - * @memberof gamehall - * @interface ISCGetPrivateRoomList - * @property {Array.|null} [Datas] SCGetPrivateRoomList Datas - */ - - /** - * Constructs a new SCGetPrivateRoomList. - * @memberof gamehall - * @classdesc Represents a SCGetPrivateRoomList. - * @implements ISCGetPrivateRoomList - * @constructor - * @param {gamehall.ISCGetPrivateRoomList=} [properties] Properties to set - */ - function SCGetPrivateRoomList(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetPrivateRoomList Datas. - * @member {Array.} Datas - * @memberof gamehall.SCGetPrivateRoomList - * @instance - */ - SCGetPrivateRoomList.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCGetPrivateRoomList instance using the specified properties. - * @function create - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList=} [properties] Properties to set - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList instance - */ - SCGetPrivateRoomList.create = function create(properties) { - return new SCGetPrivateRoomList(properties); - }; - - /** - * Encodes the specified SCGetPrivateRoomList message. Does not implicitly {@link gamehall.SCGetPrivateRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList} message SCGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PrivateRoomInfo.encode(message.Datas[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetPrivateRoomList message, length delimited. Does not implicitly {@link gamehall.SCGetPrivateRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList} message SCGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetPrivateRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetPrivateRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PrivateRoomInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetPrivateRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetPrivateRoomList message. - * @function verify - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetPrivateRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PrivateRoomInfo.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCGetPrivateRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - */ - SCGetPrivateRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetPrivateRoomList) - return object; - var message = new $root.gamehall.SCGetPrivateRoomList(); - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCGetPrivateRoomList.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCGetPrivateRoomList.Datas: object expected"); - message.Datas[i] = $root.gamehall.PrivateRoomInfo.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetPrivateRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.SCGetPrivateRoomList} message SCGetPrivateRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetPrivateRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PrivateRoomInfo.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCGetPrivateRoomList to JSON. - * @function toJSON - * @memberof gamehall.SCGetPrivateRoomList - * @instance - * @returns {Object.} JSON object - */ - SCGetPrivateRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetPrivateRoomList - * @function getTypeUrl - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetPrivateRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetPrivateRoomList"; - }; - - return SCGetPrivateRoomList; - })(); - - gamehall.CSGetPrivateRoomHistory = (function() { - - /** - * Properties of a CSGetPrivateRoomHistory. - * @memberof gamehall - * @interface ICSGetPrivateRoomHistory - * @property {number|null} [QueryTime] CSGetPrivateRoomHistory QueryTime - */ - - /** - * Constructs a new CSGetPrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a CSGetPrivateRoomHistory. - * @implements ICSGetPrivateRoomHistory - * @constructor - * @param {gamehall.ICSGetPrivateRoomHistory=} [properties] Properties to set - */ - function CSGetPrivateRoomHistory(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetPrivateRoomHistory QueryTime. - * @member {number} QueryTime - * @memberof gamehall.CSGetPrivateRoomHistory - * @instance - */ - CSGetPrivateRoomHistory.prototype.QueryTime = 0; - - /** - * Creates a new CSGetPrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory instance - */ - CSGetPrivateRoomHistory.create = function create(properties) { - return new CSGetPrivateRoomHistory(properties); - }; - - /** - * Encodes the specified CSGetPrivateRoomHistory message. Does not implicitly {@link gamehall.CSGetPrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory} message CSGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.QueryTime != null && Object.hasOwnProperty.call(message, "QueryTime")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.QueryTime); - return writer; - }; - - /** - * Encodes the specified CSGetPrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.CSGetPrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory} message CSGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetPrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetPrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.QueryTime = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetPrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetPrivateRoomHistory message. - * @function verify - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetPrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - if (!$util.isInteger(message.QueryTime)) - return "QueryTime: integer expected"; - return null; - }; - - /** - * Creates a CSGetPrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - */ - CSGetPrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetPrivateRoomHistory) - return object; - var message = new $root.gamehall.CSGetPrivateRoomHistory(); - if (object.QueryTime != null) - message.QueryTime = object.QueryTime | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetPrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.CSGetPrivateRoomHistory} message CSGetPrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetPrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.QueryTime = 0; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - object.QueryTime = message.QueryTime; - return object; - }; - - /** - * Converts this CSGetPrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.CSGetPrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - CSGetPrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetPrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetPrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetPrivateRoomHistory"; - }; - - return CSGetPrivateRoomHistory; - })(); - - gamehall.PrivateRoomHistory = (function() { - - /** - * Properties of a PrivateRoomHistory. - * @memberof gamehall - * @interface IPrivateRoomHistory - * @property {number|null} [GameFreeId] PrivateRoomHistory GameFreeId - * @property {number|null} [RoomId] PrivateRoomHistory RoomId - * @property {number|null} [CreateTime] PrivateRoomHistory CreateTime - * @property {number|null} [DestroyTime] PrivateRoomHistory DestroyTime - * @property {number|null} [CreateFee] PrivateRoomHistory CreateFee - */ - - /** - * Constructs a new PrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a PrivateRoomHistory. - * @implements IPrivateRoomHistory - * @constructor - * @param {gamehall.IPrivateRoomHistory=} [properties] Properties to set - */ - function PrivateRoomHistory(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PrivateRoomHistory GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.GameFreeId = 0; - - /** - * PrivateRoomHistory RoomId. - * @member {number} RoomId - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.RoomId = 0; - - /** - * PrivateRoomHistory CreateTime. - * @member {number} CreateTime - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.CreateTime = 0; - - /** - * PrivateRoomHistory DestroyTime. - * @member {number} DestroyTime - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.DestroyTime = 0; - - /** - * PrivateRoomHistory CreateFee. - * @member {number} CreateFee - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.CreateFee = 0; - - /** - * Creates a new PrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory instance - */ - PrivateRoomHistory.create = function create(properties) { - return new PrivateRoomHistory(properties); - }; - - /** - * Encodes the specified PrivateRoomHistory message. Does not implicitly {@link gamehall.PrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory} message PrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.CreateTime != null && Object.hasOwnProperty.call(message, "CreateTime")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CreateTime); - if (message.DestroyTime != null && Object.hasOwnProperty.call(message, "DestroyTime")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.DestroyTime); - if (message.CreateFee != null && Object.hasOwnProperty.call(message, "CreateFee")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CreateFee); - return writer; - }; - - /** - * Encodes the specified PrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.PrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory} message PrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.CreateTime = reader.int32(); - break; - } - case 4: { - message.DestroyTime = reader.int32(); - break; - } - case 5: { - message.CreateFee = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PrivateRoomHistory message. - * @function verify - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.CreateTime != null && message.hasOwnProperty("CreateTime")) - if (!$util.isInteger(message.CreateTime)) - return "CreateTime: integer expected"; - if (message.DestroyTime != null && message.hasOwnProperty("DestroyTime")) - if (!$util.isInteger(message.DestroyTime)) - return "DestroyTime: integer expected"; - if (message.CreateFee != null && message.hasOwnProperty("CreateFee")) - if (!$util.isInteger(message.CreateFee)) - return "CreateFee: integer expected"; - return null; - }; - - /** - * Creates a PrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - */ - PrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PrivateRoomHistory) - return object; - var message = new $root.gamehall.PrivateRoomHistory(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.CreateTime != null) - message.CreateTime = object.CreateTime | 0; - if (object.DestroyTime != null) - message.DestroyTime = object.DestroyTime | 0; - if (object.CreateFee != null) - message.CreateFee = object.CreateFee | 0; - return message; - }; - - /** - * Creates a plain object from a PrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.PrivateRoomHistory} message PrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.CreateTime = 0; - object.DestroyTime = 0; - object.CreateFee = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.CreateTime != null && message.hasOwnProperty("CreateTime")) - object.CreateTime = message.CreateTime; - if (message.DestroyTime != null && message.hasOwnProperty("DestroyTime")) - object.DestroyTime = message.DestroyTime; - if (message.CreateFee != null && message.hasOwnProperty("CreateFee")) - object.CreateFee = message.CreateFee; - return object; - }; - - /** - * Converts this PrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.PrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - PrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PrivateRoomHistory"; - }; - - return PrivateRoomHistory; - })(); - - gamehall.SCGetPrivateRoomHistory = (function() { - - /** - * Properties of a SCGetPrivateRoomHistory. - * @memberof gamehall - * @interface ISCGetPrivateRoomHistory - * @property {number|null} [QueryTime] SCGetPrivateRoomHistory QueryTime - * @property {Array.|null} [Datas] SCGetPrivateRoomHistory Datas - */ - - /** - * Constructs a new SCGetPrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a SCGetPrivateRoomHistory. - * @implements ISCGetPrivateRoomHistory - * @constructor - * @param {gamehall.ISCGetPrivateRoomHistory=} [properties] Properties to set - */ - function SCGetPrivateRoomHistory(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetPrivateRoomHistory QueryTime. - * @member {number} QueryTime - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - */ - SCGetPrivateRoomHistory.prototype.QueryTime = 0; - - /** - * SCGetPrivateRoomHistory Datas. - * @member {Array.} Datas - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - */ - SCGetPrivateRoomHistory.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCGetPrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory instance - */ - SCGetPrivateRoomHistory.create = function create(properties) { - return new SCGetPrivateRoomHistory(properties); - }; - - /** - * Encodes the specified SCGetPrivateRoomHistory message. Does not implicitly {@link gamehall.SCGetPrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory} message SCGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.QueryTime != null && Object.hasOwnProperty.call(message, "QueryTime")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.QueryTime); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PrivateRoomHistory.encode(message.Datas[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetPrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.SCGetPrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory} message SCGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetPrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetPrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.QueryTime = reader.int32(); - break; - } - case 2: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PrivateRoomHistory.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetPrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetPrivateRoomHistory message. - * @function verify - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetPrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - if (!$util.isInteger(message.QueryTime)) - return "QueryTime: integer expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PrivateRoomHistory.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCGetPrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - */ - SCGetPrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetPrivateRoomHistory) - return object; - var message = new $root.gamehall.SCGetPrivateRoomHistory(); - if (object.QueryTime != null) - message.QueryTime = object.QueryTime | 0; - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCGetPrivateRoomHistory.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCGetPrivateRoomHistory.Datas: object expected"); - message.Datas[i] = $root.gamehall.PrivateRoomHistory.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetPrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.SCGetPrivateRoomHistory} message SCGetPrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetPrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (options.defaults) - object.QueryTime = 0; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - object.QueryTime = message.QueryTime; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PrivateRoomHistory.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCGetPrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - SCGetPrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetPrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetPrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetPrivateRoomHistory"; - }; - - return SCGetPrivateRoomHistory; - })(); - - gamehall.CSDestroyPrivateRoom = (function() { - - /** - * Properties of a CSDestroyPrivateRoom. - * @memberof gamehall - * @interface ICSDestroyPrivateRoom - * @property {number|null} [RoomId] CSDestroyPrivateRoom RoomId - */ - - /** - * Constructs a new CSDestroyPrivateRoom. - * @memberof gamehall - * @classdesc Represents a CSDestroyPrivateRoom. - * @implements ICSDestroyPrivateRoom - * @constructor - * @param {gamehall.ICSDestroyPrivateRoom=} [properties] Properties to set - */ - function CSDestroyPrivateRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSDestroyPrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSDestroyPrivateRoom - * @instance - */ - CSDestroyPrivateRoom.prototype.RoomId = 0; - - /** - * Creates a new CSDestroyPrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom=} [properties] Properties to set - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom instance - */ - CSDestroyPrivateRoom.create = function create(properties) { - return new CSDestroyPrivateRoom(properties); - }; - - /** - * Encodes the specified CSDestroyPrivateRoom message. Does not implicitly {@link gamehall.CSDestroyPrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom} message CSDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyPrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSDestroyPrivateRoom message, length delimited. Does not implicitly {@link gamehall.CSDestroyPrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom} message CSDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyPrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSDestroyPrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyPrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSDestroyPrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSDestroyPrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyPrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSDestroyPrivateRoom message. - * @function verify - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSDestroyPrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSDestroyPrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - */ - CSDestroyPrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSDestroyPrivateRoom) - return object; - var message = new $root.gamehall.CSDestroyPrivateRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSDestroyPrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.CSDestroyPrivateRoom} message CSDestroyPrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSDestroyPrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.RoomId = 0; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSDestroyPrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSDestroyPrivateRoom - * @instance - * @returns {Object.} JSON object - */ - CSDestroyPrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSDestroyPrivateRoom - * @function getTypeUrl - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSDestroyPrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSDestroyPrivateRoom"; - }; - - return CSDestroyPrivateRoom; - })(); - - gamehall.SCDestroyPrivateRoom = (function() { - - /** - * Properties of a SCDestroyPrivateRoom. - * @memberof gamehall - * @interface ISCDestroyPrivateRoom - * @property {number|null} [RoomId] SCDestroyPrivateRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCDestroyPrivateRoom OpRetCode - * @property {number|null} [State] SCDestroyPrivateRoom State - */ - - /** - * Constructs a new SCDestroyPrivateRoom. - * @memberof gamehall - * @classdesc Represents a SCDestroyPrivateRoom. - * @implements ISCDestroyPrivateRoom - * @constructor - * @param {gamehall.ISCDestroyPrivateRoom=} [properties] Properties to set - */ - function SCDestroyPrivateRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCDestroyPrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.RoomId = 0; - - /** - * SCDestroyPrivateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.OpRetCode = 0; - - /** - * SCDestroyPrivateRoom State. - * @member {number} State - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.State = 0; - - /** - * Creates a new SCDestroyPrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom=} [properties] Properties to set - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom instance - */ - SCDestroyPrivateRoom.create = function create(properties) { - return new SCDestroyPrivateRoom(properties); - }; - - /** - * Encodes the specified SCDestroyPrivateRoom message. Does not implicitly {@link gamehall.SCDestroyPrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom} message SCDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyPrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.State != null && Object.hasOwnProperty.call(message, "State")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.State); - return writer; - }; - - /** - * Encodes the specified SCDestroyPrivateRoom message, length delimited. Does not implicitly {@link gamehall.SCDestroyPrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom} message SCDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyPrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCDestroyPrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyPrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCDestroyPrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.State = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCDestroyPrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyPrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCDestroyPrivateRoom message. - * @function verify - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCDestroyPrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.State != null && message.hasOwnProperty("State")) - if (!$util.isInteger(message.State)) - return "State: integer expected"; - return null; - }; - - /** - * Creates a SCDestroyPrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - */ - SCDestroyPrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCDestroyPrivateRoom) - return object; - var message = new $root.gamehall.SCDestroyPrivateRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.State != null) - message.State = object.State | 0; - return message; - }; - - /** - * Creates a plain object from a SCDestroyPrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.SCDestroyPrivateRoom} message SCDestroyPrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCDestroyPrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.State = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.State != null && message.hasOwnProperty("State")) - object.State = message.State; - return object; - }; - - /** - * Converts this SCDestroyPrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - * @returns {Object.} JSON object - */ - SCDestroyPrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCDestroyPrivateRoom - * @function getTypeUrl - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCDestroyPrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCDestroyPrivateRoom"; - }; - - return SCDestroyPrivateRoom; - })(); - - gamehall.CSQueryRoomInfo = (function() { - - /** - * Properties of a CSQueryRoomInfo. - * @memberof gamehall - * @interface ICSQueryRoomInfo - * @property {Array.|null} [GameIds] CSQueryRoomInfo GameIds - * @property {number|null} [GameSite] CSQueryRoomInfo GameSite - */ - - /** - * Constructs a new CSQueryRoomInfo. - * @memberof gamehall - * @classdesc Represents a CSQueryRoomInfo. - * @implements ICSQueryRoomInfo - * @constructor - * @param {gamehall.ICSQueryRoomInfo=} [properties] Properties to set - */ - function CSQueryRoomInfo(properties) { - this.GameIds = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSQueryRoomInfo GameIds. - * @member {Array.} GameIds - * @memberof gamehall.CSQueryRoomInfo - * @instance - */ - CSQueryRoomInfo.prototype.GameIds = $util.emptyArray; - - /** - * CSQueryRoomInfo GameSite. - * @member {number} GameSite - * @memberof gamehall.CSQueryRoomInfo - * @instance - */ - CSQueryRoomInfo.prototype.GameSite = 0; - - /** - * Creates a new CSQueryRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo=} [properties] Properties to set - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo instance - */ - CSQueryRoomInfo.create = function create(properties) { - return new CSQueryRoomInfo(properties); - }; - - /** - * Encodes the specified CSQueryRoomInfo message. Does not implicitly {@link gamehall.CSQueryRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo} message CSQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQueryRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameIds != null && message.GameIds.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameIds.length; ++i) - writer.int32(message.GameIds[i]); - writer.ldelim(); - } - if (message.GameSite != null && Object.hasOwnProperty.call(message, "GameSite")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameSite); - return writer; - }; - - /** - * Encodes the specified CSQueryRoomInfo message, length delimited. Does not implicitly {@link gamehall.CSQueryRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo} message CSQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQueryRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSQueryRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQueryRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSQueryRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameIds && message.GameIds.length)) - message.GameIds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameIds.push(reader.int32()); - } else - message.GameIds.push(reader.int32()); - break; - } - case 2: { - message.GameSite = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSQueryRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQueryRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSQueryRoomInfo message. - * @function verify - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSQueryRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameIds != null && message.hasOwnProperty("GameIds")) { - if (!Array.isArray(message.GameIds)) - return "GameIds: array expected"; - for (var i = 0; i < message.GameIds.length; ++i) - if (!$util.isInteger(message.GameIds[i])) - return "GameIds: integer[] expected"; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - if (!$util.isInteger(message.GameSite)) - return "GameSite: integer expected"; - return null; - }; - - /** - * Creates a CSQueryRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - */ - CSQueryRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSQueryRoomInfo) - return object; - var message = new $root.gamehall.CSQueryRoomInfo(); - if (object.GameIds) { - if (!Array.isArray(object.GameIds)) - throw TypeError(".gamehall.CSQueryRoomInfo.GameIds: array expected"); - message.GameIds = []; - for (var i = 0; i < object.GameIds.length; ++i) - message.GameIds[i] = object.GameIds[i] | 0; - } - if (object.GameSite != null) - message.GameSite = object.GameSite | 0; - return message; - }; - - /** - * Creates a plain object from a CSQueryRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.CSQueryRoomInfo} message CSQueryRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSQueryRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameIds = []; - if (options.defaults) - object.GameSite = 0; - if (message.GameIds && message.GameIds.length) { - object.GameIds = []; - for (var j = 0; j < message.GameIds.length; ++j) - object.GameIds[j] = message.GameIds[j]; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - object.GameSite = message.GameSite; - return object; - }; - - /** - * Converts this CSQueryRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.CSQueryRoomInfo - * @instance - * @returns {Object.} JSON object - */ - CSQueryRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSQueryRoomInfo - * @function getTypeUrl - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSQueryRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSQueryRoomInfo"; - }; - - return CSQueryRoomInfo; - })(); - - gamehall.QRoomInfo = (function() { - - /** - * Properties of a QRoomInfo. - * @memberof gamehall - * @interface IQRoomInfo - * @property {number|null} [GameFreeId] QRoomInfo GameFreeId - * @property {number|null} [GameId] QRoomInfo GameId - * @property {number|null} [RoomId] QRoomInfo RoomId - * @property {number|null} [BaseCoin] QRoomInfo BaseCoin - * @property {number|null} [LimitCoin] QRoomInfo LimitCoin - * @property {number|null} [CurrNum] QRoomInfo CurrNum - * @property {number|null} [MaxPlayer] QRoomInfo MaxPlayer - * @property {number|null} [Creator] QRoomInfo Creator - * @property {number|null} [CreateTs] QRoomInfo CreateTs - */ - - /** - * Constructs a new QRoomInfo. - * @memberof gamehall - * @classdesc Represents a QRoomInfo. - * @implements IQRoomInfo - * @constructor - * @param {gamehall.IQRoomInfo=} [properties] Properties to set - */ - function QRoomInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * QRoomInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.GameFreeId = 0; - - /** - * QRoomInfo GameId. - * @member {number} GameId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.GameId = 0; - - /** - * QRoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.RoomId = 0; - - /** - * QRoomInfo BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.BaseCoin = 0; - - /** - * QRoomInfo LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.LimitCoin = 0; - - /** - * QRoomInfo CurrNum. - * @member {number} CurrNum - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.CurrNum = 0; - - /** - * QRoomInfo MaxPlayer. - * @member {number} MaxPlayer - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.MaxPlayer = 0; - - /** - * QRoomInfo Creator. - * @member {number} Creator - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.Creator = 0; - - /** - * QRoomInfo CreateTs. - * @member {number} CreateTs - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.CreateTs = 0; - - /** - * Creates a new QRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo=} [properties] Properties to set - * @returns {gamehall.QRoomInfo} QRoomInfo instance - */ - QRoomInfo.create = function create(properties) { - return new QRoomInfo(properties); - }; - - /** - * Encodes the specified QRoomInfo message. Does not implicitly {@link gamehall.QRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo} message QRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - QRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseCoin); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.LimitCoin); - if (message.CurrNum != null && Object.hasOwnProperty.call(message, "CurrNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.CurrNum); - if (message.MaxPlayer != null && Object.hasOwnProperty.call(message, "MaxPlayer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MaxPlayer); - if (message.Creator != null && Object.hasOwnProperty.call(message, "Creator")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.Creator); - if (message.CreateTs != null && Object.hasOwnProperty.call(message, "CreateTs")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.CreateTs); - return writer; - }; - - /** - * Encodes the specified QRoomInfo message, length delimited. Does not implicitly {@link gamehall.QRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo} message QRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - QRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a QRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.QRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.QRoomInfo} QRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - QRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.QRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.BaseCoin = reader.int32(); - break; - } - case 5: { - message.LimitCoin = reader.int32(); - break; - } - case 6: { - message.CurrNum = reader.int32(); - break; - } - case 7: { - message.MaxPlayer = reader.int32(); - break; - } - case 8: { - message.Creator = reader.int32(); - break; - } - case 9: { - message.CreateTs = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a QRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.QRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.QRoomInfo} QRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - QRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a QRoomInfo message. - * @function verify - * @memberof gamehall.QRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - QRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - if (!$util.isInteger(message.CurrNum)) - return "CurrNum: integer expected"; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - if (!$util.isInteger(message.MaxPlayer)) - return "MaxPlayer: integer expected"; - if (message.Creator != null && message.hasOwnProperty("Creator")) - if (!$util.isInteger(message.Creator)) - return "Creator: integer expected"; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - if (!$util.isInteger(message.CreateTs)) - return "CreateTs: integer expected"; - return null; - }; - - /** - * Creates a QRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.QRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.QRoomInfo} QRoomInfo - */ - QRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.QRoomInfo) - return object; - var message = new $root.gamehall.QRoomInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.CurrNum != null) - message.CurrNum = object.CurrNum | 0; - if (object.MaxPlayer != null) - message.MaxPlayer = object.MaxPlayer | 0; - if (object.Creator != null) - message.Creator = object.Creator | 0; - if (object.CreateTs != null) - message.CreateTs = object.CreateTs | 0; - return message; - }; - - /** - * Creates a plain object from a QRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.QRoomInfo} message QRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - QRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.GameId = 0; - object.RoomId = 0; - object.BaseCoin = 0; - object.LimitCoin = 0; - object.CurrNum = 0; - object.MaxPlayer = 0; - object.Creator = 0; - object.CreateTs = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - object.CurrNum = message.CurrNum; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - object.MaxPlayer = message.MaxPlayer; - if (message.Creator != null && message.hasOwnProperty("Creator")) - object.Creator = message.Creator; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - object.CreateTs = message.CreateTs; - return object; - }; - - /** - * Converts this QRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.QRoomInfo - * @instance - * @returns {Object.} JSON object - */ - QRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for QRoomInfo - * @function getTypeUrl - * @memberof gamehall.QRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - QRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.QRoomInfo"; - }; - - return QRoomInfo; - })(); - - gamehall.SCQueryRoomInfo = (function() { - - /** - * Properties of a SCQueryRoomInfo. - * @memberof gamehall - * @interface ISCQueryRoomInfo - * @property {Array.|null} [GameIds] SCQueryRoomInfo GameIds - * @property {number|null} [GameSite] SCQueryRoomInfo GameSite - * @property {Array.|null} [RoomInfo] SCQueryRoomInfo RoomInfo - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCQueryRoomInfo OpRetCode - */ - - /** - * Constructs a new SCQueryRoomInfo. - * @memberof gamehall - * @classdesc Represents a SCQueryRoomInfo. - * @implements ISCQueryRoomInfo - * @constructor - * @param {gamehall.ISCQueryRoomInfo=} [properties] Properties to set - */ - function SCQueryRoomInfo(properties) { - this.GameIds = []; - this.RoomInfo = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCQueryRoomInfo GameIds. - * @member {Array.} GameIds - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.GameIds = $util.emptyArray; - - /** - * SCQueryRoomInfo GameSite. - * @member {number} GameSite - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.GameSite = 0; - - /** - * SCQueryRoomInfo RoomInfo. - * @member {Array.} RoomInfo - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.RoomInfo = $util.emptyArray; - - /** - * SCQueryRoomInfo OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.OpRetCode = 0; - - /** - * Creates a new SCQueryRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo=} [properties] Properties to set - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo instance - */ - SCQueryRoomInfo.create = function create(properties) { - return new SCQueryRoomInfo(properties); - }; - - /** - * Encodes the specified SCQueryRoomInfo message. Does not implicitly {@link gamehall.SCQueryRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo} message SCQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQueryRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameIds != null && message.GameIds.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameIds.length; ++i) - writer.int32(message.GameIds[i]); - writer.ldelim(); - } - if (message.GameSite != null && Object.hasOwnProperty.call(message, "GameSite")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameSite); - if (message.RoomInfo != null && message.RoomInfo.length) - for (var i = 0; i < message.RoomInfo.length; ++i) - $root.gamehall.QRoomInfo.encode(message.RoomInfo[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCQueryRoomInfo message, length delimited. Does not implicitly {@link gamehall.SCQueryRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo} message SCQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQueryRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCQueryRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQueryRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCQueryRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameIds && message.GameIds.length)) - message.GameIds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameIds.push(reader.int32()); - } else - message.GameIds.push(reader.int32()); - break; - } - case 2: { - message.GameSite = reader.int32(); - break; - } - case 3: { - if (!(message.RoomInfo && message.RoomInfo.length)) - message.RoomInfo = []; - message.RoomInfo.push($root.gamehall.QRoomInfo.decode(reader, reader.uint32())); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCQueryRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQueryRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCQueryRoomInfo message. - * @function verify - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCQueryRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameIds != null && message.hasOwnProperty("GameIds")) { - if (!Array.isArray(message.GameIds)) - return "GameIds: array expected"; - for (var i = 0; i < message.GameIds.length; ++i) - if (!$util.isInteger(message.GameIds[i])) - return "GameIds: integer[] expected"; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - if (!$util.isInteger(message.GameSite)) - return "GameSite: integer expected"; - if (message.RoomInfo != null && message.hasOwnProperty("RoomInfo")) { - if (!Array.isArray(message.RoomInfo)) - return "RoomInfo: array expected"; - for (var i = 0; i < message.RoomInfo.length; ++i) { - var error = $root.gamehall.QRoomInfo.verify(message.RoomInfo[i]); - if (error) - return "RoomInfo." + error; - } - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCQueryRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - */ - SCQueryRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCQueryRoomInfo) - return object; - var message = new $root.gamehall.SCQueryRoomInfo(); - if (object.GameIds) { - if (!Array.isArray(object.GameIds)) - throw TypeError(".gamehall.SCQueryRoomInfo.GameIds: array expected"); - message.GameIds = []; - for (var i = 0; i < object.GameIds.length; ++i) - message.GameIds[i] = object.GameIds[i] | 0; - } - if (object.GameSite != null) - message.GameSite = object.GameSite | 0; - if (object.RoomInfo) { - if (!Array.isArray(object.RoomInfo)) - throw TypeError(".gamehall.SCQueryRoomInfo.RoomInfo: array expected"); - message.RoomInfo = []; - for (var i = 0; i < object.RoomInfo.length; ++i) { - if (typeof object.RoomInfo[i] !== "object") - throw TypeError(".gamehall.SCQueryRoomInfo.RoomInfo: object expected"); - message.RoomInfo[i] = $root.gamehall.QRoomInfo.fromObject(object.RoomInfo[i]); - } - } - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCQueryRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.SCQueryRoomInfo} message SCQueryRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCQueryRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.GameIds = []; - object.RoomInfo = []; - } - if (options.defaults) { - object.GameSite = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameIds && message.GameIds.length) { - object.GameIds = []; - for (var j = 0; j < message.GameIds.length; ++j) - object.GameIds[j] = message.GameIds[j]; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - object.GameSite = message.GameSite; - if (message.RoomInfo && message.RoomInfo.length) { - object.RoomInfo = []; - for (var j = 0; j < message.RoomInfo.length; ++j) - object.RoomInfo[j] = $root.gamehall.QRoomInfo.toObject(message.RoomInfo[j], options); - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCQueryRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.SCQueryRoomInfo - * @instance - * @returns {Object.} JSON object - */ - SCQueryRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCQueryRoomInfo - * @function getTypeUrl - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCQueryRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCQueryRoomInfo"; - }; - - return SCQueryRoomInfo; - })(); - - gamehall.CSGameObserve = (function() { - - /** - * Properties of a CSGameObserve. - * @memberof gamehall - * @interface ICSGameObserve - * @property {number|null} [GameId] CSGameObserve GameId - * @property {boolean|null} [StartOrEnd] CSGameObserve StartOrEnd - */ - - /** - * Constructs a new CSGameObserve. - * @memberof gamehall - * @classdesc Represents a CSGameObserve. - * @implements ICSGameObserve - * @constructor - * @param {gamehall.ICSGameObserve=} [properties] Properties to set - */ - function CSGameObserve(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGameObserve GameId. - * @member {number} GameId - * @memberof gamehall.CSGameObserve - * @instance - */ - CSGameObserve.prototype.GameId = 0; - - /** - * CSGameObserve StartOrEnd. - * @member {boolean} StartOrEnd - * @memberof gamehall.CSGameObserve - * @instance - */ - CSGameObserve.prototype.StartOrEnd = false; - - /** - * Creates a new CSGameObserve instance using the specified properties. - * @function create - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve=} [properties] Properties to set - * @returns {gamehall.CSGameObserve} CSGameObserve instance - */ - CSGameObserve.create = function create(properties) { - return new CSGameObserve(properties); - }; - - /** - * Encodes the specified CSGameObserve message. Does not implicitly {@link gamehall.CSGameObserve.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve} message CSGameObserve message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGameObserve.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.StartOrEnd != null && Object.hasOwnProperty.call(message, "StartOrEnd")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.StartOrEnd); - return writer; - }; - - /** - * Encodes the specified CSGameObserve message, length delimited. Does not implicitly {@link gamehall.CSGameObserve.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve} message CSGameObserve message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGameObserve.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGameObserve message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGameObserve - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGameObserve} CSGameObserve - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGameObserve.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGameObserve(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.StartOrEnd = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGameObserve message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGameObserve - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGameObserve} CSGameObserve - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGameObserve.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGameObserve message. - * @function verify - * @memberof gamehall.CSGameObserve - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGameObserve.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.StartOrEnd != null && message.hasOwnProperty("StartOrEnd")) - if (typeof message.StartOrEnd !== "boolean") - return "StartOrEnd: boolean expected"; - return null; - }; - - /** - * Creates a CSGameObserve message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGameObserve - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGameObserve} CSGameObserve - */ - CSGameObserve.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGameObserve) - return object; - var message = new $root.gamehall.CSGameObserve(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.StartOrEnd != null) - message.StartOrEnd = Boolean(object.StartOrEnd); - return message; - }; - - /** - * Creates a plain object from a CSGameObserve message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.CSGameObserve} message CSGameObserve - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGameObserve.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.StartOrEnd = false; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.StartOrEnd != null && message.hasOwnProperty("StartOrEnd")) - object.StartOrEnd = message.StartOrEnd; - return object; - }; - - /** - * Converts this CSGameObserve to JSON. - * @function toJSON - * @memberof gamehall.CSGameObserve - * @instance - * @returns {Object.} JSON object - */ - CSGameObserve.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGameObserve - * @function getTypeUrl - * @memberof gamehall.CSGameObserve - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGameObserve.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGameObserve"; - }; - - return CSGameObserve; - })(); - - gamehall.GameSubRecord = (function() { - - /** - * Properties of a GameSubRecord. - * @memberof gamehall - * @interface IGameSubRecord - * @property {number|null} [GameFreeId] GameSubRecord GameFreeId - * @property {number|null} [LogCnt] GameSubRecord LogCnt - * @property {number|null} [NewLog] GameSubRecord NewLog - * @property {Array.|null} [TotleLog] GameSubRecord TotleLog - */ - - /** - * Constructs a new GameSubRecord. - * @memberof gamehall - * @classdesc Represents a GameSubRecord. - * @implements IGameSubRecord - * @constructor - * @param {gamehall.IGameSubRecord=} [properties] Properties to set - */ - function GameSubRecord(properties) { - this.TotleLog = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameSubRecord GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.GameFreeId = 0; - - /** - * GameSubRecord LogCnt. - * @member {number} LogCnt - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.LogCnt = 0; - - /** - * GameSubRecord NewLog. - * @member {number} NewLog - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.NewLog = 0; - - /** - * GameSubRecord TotleLog. - * @member {Array.} TotleLog - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.TotleLog = $util.emptyArray; - - /** - * Creates a new GameSubRecord instance using the specified properties. - * @function create - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord=} [properties] Properties to set - * @returns {gamehall.GameSubRecord} GameSubRecord instance - */ - GameSubRecord.create = function create(properties) { - return new GameSubRecord(properties); - }; - - /** - * Encodes the specified GameSubRecord message. Does not implicitly {@link gamehall.GameSubRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord} message GameSubRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameSubRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.LogCnt != null && Object.hasOwnProperty.call(message, "LogCnt")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LogCnt); - if (message.NewLog != null && Object.hasOwnProperty.call(message, "NewLog")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.NewLog); - if (message.TotleLog != null && message.TotleLog.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.TotleLog.length; ++i) - writer.int32(message.TotleLog[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified GameSubRecord message, length delimited. Does not implicitly {@link gamehall.GameSubRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord} message GameSubRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameSubRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameSubRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameSubRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameSubRecord} GameSubRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameSubRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameSubRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.LogCnt = reader.int32(); - break; - } - case 3: { - message.NewLog = reader.int32(); - break; - } - case 4: { - if (!(message.TotleLog && message.TotleLog.length)) - message.TotleLog = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.TotleLog.push(reader.int32()); - } else - message.TotleLog.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameSubRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameSubRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameSubRecord} GameSubRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameSubRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameSubRecord message. - * @function verify - * @memberof gamehall.GameSubRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameSubRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.LogCnt != null && message.hasOwnProperty("LogCnt")) - if (!$util.isInteger(message.LogCnt)) - return "LogCnt: integer expected"; - if (message.NewLog != null && message.hasOwnProperty("NewLog")) - if (!$util.isInteger(message.NewLog)) - return "NewLog: integer expected"; - if (message.TotleLog != null && message.hasOwnProperty("TotleLog")) { - if (!Array.isArray(message.TotleLog)) - return "TotleLog: array expected"; - for (var i = 0; i < message.TotleLog.length; ++i) - if (!$util.isInteger(message.TotleLog[i])) - return "TotleLog: integer[] expected"; - } - return null; - }; - - /** - * Creates a GameSubRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameSubRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameSubRecord} GameSubRecord - */ - GameSubRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameSubRecord) - return object; - var message = new $root.gamehall.GameSubRecord(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.LogCnt != null) - message.LogCnt = object.LogCnt | 0; - if (object.NewLog != null) - message.NewLog = object.NewLog | 0; - if (object.TotleLog) { - if (!Array.isArray(object.TotleLog)) - throw TypeError(".gamehall.GameSubRecord.TotleLog: array expected"); - message.TotleLog = []; - for (var i = 0; i < object.TotleLog.length; ++i) - message.TotleLog[i] = object.TotleLog[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a GameSubRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.GameSubRecord} message GameSubRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameSubRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.TotleLog = []; - if (options.defaults) { - object.GameFreeId = 0; - object.LogCnt = 0; - object.NewLog = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.LogCnt != null && message.hasOwnProperty("LogCnt")) - object.LogCnt = message.LogCnt; - if (message.NewLog != null && message.hasOwnProperty("NewLog")) - object.NewLog = message.NewLog; - if (message.TotleLog && message.TotleLog.length) { - object.TotleLog = []; - for (var j = 0; j < message.TotleLog.length; ++j) - object.TotleLog[j] = message.TotleLog[j]; - } - return object; - }; - - /** - * Converts this GameSubRecord to JSON. - * @function toJSON - * @memberof gamehall.GameSubRecord - * @instance - * @returns {Object.} JSON object - */ - GameSubRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameSubRecord - * @function getTypeUrl - * @memberof gamehall.GameSubRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameSubRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameSubRecord"; - }; - - return GameSubRecord; - })(); - - gamehall.SCGameSubList = (function() { - - /** - * Properties of a SCGameSubList. - * @memberof gamehall - * @interface ISCGameSubList - * @property {Array.|null} [List] SCGameSubList List - */ - - /** - * Constructs a new SCGameSubList. - * @memberof gamehall - * @classdesc Represents a SCGameSubList. - * @implements ISCGameSubList - * @constructor - * @param {gamehall.ISCGameSubList=} [properties] Properties to set - */ - function SCGameSubList(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGameSubList List. - * @member {Array.} List - * @memberof gamehall.SCGameSubList - * @instance - */ - SCGameSubList.prototype.List = $util.emptyArray; - - /** - * Creates a new SCGameSubList instance using the specified properties. - * @function create - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList=} [properties] Properties to set - * @returns {gamehall.SCGameSubList} SCGameSubList instance - */ - SCGameSubList.create = function create(properties) { - return new SCGameSubList(properties); - }; - - /** - * Encodes the specified SCGameSubList message. Does not implicitly {@link gamehall.SCGameSubList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList} message SCGameSubList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameSubList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.GameSubRecord.encode(message.List[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGameSubList message, length delimited. Does not implicitly {@link gamehall.SCGameSubList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList} message SCGameSubList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameSubList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGameSubList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGameSubList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGameSubList} SCGameSubList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameSubList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGameSubList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.GameSubRecord.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGameSubList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGameSubList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGameSubList} SCGameSubList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameSubList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGameSubList message. - * @function verify - * @memberof gamehall.SCGameSubList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGameSubList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.GameSubRecord.verify(message.List[i]); - if (error) - return "List." + error; - } - } - return null; - }; - - /** - * Creates a SCGameSubList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGameSubList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGameSubList} SCGameSubList - */ - SCGameSubList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGameSubList) - return object; - var message = new $root.gamehall.SCGameSubList(); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCGameSubList.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCGameSubList.List: object expected"); - message.List[i] = $root.gamehall.GameSubRecord.fromObject(object.List[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGameSubList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.SCGameSubList} message SCGameSubList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGameSubList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.GameSubRecord.toObject(message.List[j], options); - } - return object; - }; - - /** - * Converts this SCGameSubList to JSON. - * @function toJSON - * @memberof gamehall.SCGameSubList - * @instance - * @returns {Object.} JSON object - */ - SCGameSubList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGameSubList - * @function getTypeUrl - * @memberof gamehall.SCGameSubList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGameSubList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGameSubList"; - }; - - return SCGameSubList; - })(); - - gamehall.GameState = (function() { - - /** - * Properties of a GameState. - * @memberof gamehall - * @interface IGameState - * @property {number|null} [GameFreeId] GameState GameFreeId - * @property {number|Long|null} [Ts] GameState Ts - * @property {number|null} [Sec] GameState Sec - */ - - /** - * Constructs a new GameState. - * @memberof gamehall - * @classdesc Represents a GameState. - * @implements IGameState - * @constructor - * @param {gamehall.IGameState=} [properties] Properties to set - */ - function GameState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameState GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.GameFreeId = 0; - - /** - * GameState Ts. - * @member {number|Long} Ts - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameState Sec. - * @member {number} Sec - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.Sec = 0; - - /** - * Creates a new GameState instance using the specified properties. - * @function create - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState=} [properties] Properties to set - * @returns {gamehall.GameState} GameState instance - */ - GameState.create = function create(properties) { - return new GameState(properties); - }; - - /** - * Encodes the specified GameState message. Does not implicitly {@link gamehall.GameState.verify|verify} messages. - * @function encode - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState} message GameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Ts); - if (message.Sec != null && Object.hasOwnProperty.call(message, "Sec")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Sec); - return writer; - }; - - /** - * Encodes the specified GameState message, length delimited. Does not implicitly {@link gamehall.GameState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState} message GameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameState} GameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Ts = reader.int64(); - break; - } - case 3: { - message.Sec = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameState} GameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameState message. - * @function verify - * @memberof gamehall.GameState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.Sec != null && message.hasOwnProperty("Sec")) - if (!$util.isInteger(message.Sec)) - return "Sec: integer expected"; - return null; - }; - - /** - * Creates a GameState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameState} GameState - */ - GameState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameState) - return object; - var message = new $root.gamehall.GameState(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.Sec != null) - message.Sec = object.Sec | 0; - return message; - }; - - /** - * Creates a plain object from a GameState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameState - * @static - * @param {gamehall.GameState} message GameState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.Sec = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.Sec != null && message.hasOwnProperty("Sec")) - object.Sec = message.Sec; - return object; - }; - - /** - * Converts this GameState to JSON. - * @function toJSON - * @memberof gamehall.GameState - * @instance - * @returns {Object.} JSON object - */ - GameState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameState - * @function getTypeUrl - * @memberof gamehall.GameState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameState"; - }; - - return GameState; - })(); - - gamehall.SCGameState = (function() { - - /** - * Properties of a SCGameState. - * @memberof gamehall - * @interface ISCGameState - * @property {Array.|null} [List] SCGameState List - */ - - /** - * Constructs a new SCGameState. - * @memberof gamehall - * @classdesc Represents a SCGameState. - * @implements ISCGameState - * @constructor - * @param {gamehall.ISCGameState=} [properties] Properties to set - */ - function SCGameState(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGameState List. - * @member {Array.} List - * @memberof gamehall.SCGameState - * @instance - */ - SCGameState.prototype.List = $util.emptyArray; - - /** - * Creates a new SCGameState instance using the specified properties. - * @function create - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState=} [properties] Properties to set - * @returns {gamehall.SCGameState} SCGameState instance - */ - SCGameState.create = function create(properties) { - return new SCGameState(properties); - }; - - /** - * Encodes the specified SCGameState message. Does not implicitly {@link gamehall.SCGameState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState} message SCGameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.GameState.encode(message.List[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGameState message, length delimited. Does not implicitly {@link gamehall.SCGameState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState} message SCGameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGameState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGameState} SCGameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGameState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.GameState.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGameState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGameState} SCGameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGameState message. - * @function verify - * @memberof gamehall.SCGameState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGameState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.GameState.verify(message.List[i]); - if (error) - return "List." + error; - } - } - return null; - }; - - /** - * Creates a SCGameState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGameState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGameState} SCGameState - */ - SCGameState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGameState) - return object; - var message = new $root.gamehall.SCGameState(); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCGameState.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCGameState.List: object expected"); - message.List[i] = $root.gamehall.GameState.fromObject(object.List[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGameState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.SCGameState} message SCGameState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGameState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.GameState.toObject(message.List[j], options); - } - return object; - }; - - /** - * Converts this SCGameState to JSON. - * @function toJSON - * @memberof gamehall.SCGameState - * @instance - * @returns {Object.} JSON object - */ - SCGameState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGameState - * @function getTypeUrl - * @memberof gamehall.SCGameState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGameState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGameState"; - }; - - return SCGameState; - })(); - - gamehall.LotteryData = (function() { - - /** - * Properties of a LotteryData. - * @memberof gamehall - * @interface ILotteryData - * @property {number|null} [GameFreeId] LotteryData GameFreeId - * @property {number|Long|null} [Value] LotteryData Value - */ - - /** - * Constructs a new LotteryData. - * @memberof gamehall - * @classdesc Represents a LotteryData. - * @implements ILotteryData - * @constructor - * @param {gamehall.ILotteryData=} [properties] Properties to set - */ - function LotteryData(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * LotteryData GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.LotteryData - * @instance - */ - LotteryData.prototype.GameFreeId = 0; - - /** - * LotteryData Value. - * @member {number|Long} Value - * @memberof gamehall.LotteryData - * @instance - */ - LotteryData.prototype.Value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new LotteryData instance using the specified properties. - * @function create - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData=} [properties] Properties to set - * @returns {gamehall.LotteryData} LotteryData instance - */ - LotteryData.create = function create(properties) { - return new LotteryData(properties); - }; - - /** - * Encodes the specified LotteryData message. Does not implicitly {@link gamehall.LotteryData.verify|verify} messages. - * @function encode - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData} message LotteryData message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Value != null && Object.hasOwnProperty.call(message, "Value")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Value); - return writer; - }; - - /** - * Encodes the specified LotteryData message, length delimited. Does not implicitly {@link gamehall.LotteryData.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData} message LotteryData message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a LotteryData message from the specified reader or buffer. - * @function decode - * @memberof gamehall.LotteryData - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.LotteryData} LotteryData - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryData.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.LotteryData(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Value = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a LotteryData message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.LotteryData - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.LotteryData} LotteryData - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a LotteryData message. - * @function verify - * @memberof gamehall.LotteryData - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - LotteryData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Value != null && message.hasOwnProperty("Value")) - if (!$util.isInteger(message.Value) && !(message.Value && $util.isInteger(message.Value.low) && $util.isInteger(message.Value.high))) - return "Value: integer|Long expected"; - return null; - }; - - /** - * Creates a LotteryData message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.LotteryData - * @static - * @param {Object.} object Plain object - * @returns {gamehall.LotteryData} LotteryData - */ - LotteryData.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.LotteryData) - return object; - var message = new $root.gamehall.LotteryData(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Value != null) - if ($util.Long) - (message.Value = $util.Long.fromValue(object.Value)).unsigned = false; - else if (typeof object.Value === "string") - message.Value = parseInt(object.Value, 10); - else if (typeof object.Value === "number") - message.Value = object.Value; - else if (typeof object.Value === "object") - message.Value = new $util.LongBits(object.Value.low >>> 0, object.Value.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a LotteryData message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.LotteryData} message LotteryData - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - LotteryData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Value = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Value != null && message.hasOwnProperty("Value")) - if (typeof message.Value === "number") - object.Value = options.longs === String ? String(message.Value) : message.Value; - else - object.Value = options.longs === String ? $util.Long.prototype.toString.call(message.Value) : options.longs === Number ? new $util.LongBits(message.Value.low >>> 0, message.Value.high >>> 0).toNumber() : message.Value; - return object; - }; - - /** - * Converts this LotteryData to JSON. - * @function toJSON - * @memberof gamehall.LotteryData - * @instance - * @returns {Object.} JSON object - */ - LotteryData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for LotteryData - * @function getTypeUrl - * @memberof gamehall.LotteryData - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - LotteryData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.LotteryData"; - }; - - return LotteryData; - })(); - - gamehall.SCLotterySync = (function() { - - /** - * Properties of a SCLotterySync. - * @memberof gamehall - * @interface ISCLotterySync - * @property {Array.|null} [Datas] SCLotterySync Datas - */ - - /** - * Constructs a new SCLotterySync. - * @memberof gamehall - * @classdesc Represents a SCLotterySync. - * @implements ISCLotterySync - * @constructor - * @param {gamehall.ISCLotterySync=} [properties] Properties to set - */ - function SCLotterySync(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotterySync Datas. - * @member {Array.} Datas - * @memberof gamehall.SCLotterySync - * @instance - */ - SCLotterySync.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCLotterySync instance using the specified properties. - * @function create - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync=} [properties] Properties to set - * @returns {gamehall.SCLotterySync} SCLotterySync instance - */ - SCLotterySync.create = function create(properties) { - return new SCLotterySync(properties); - }; - - /** - * Encodes the specified SCLotterySync message. Does not implicitly {@link gamehall.SCLotterySync.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync} message SCLotterySync message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotterySync.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.LotteryData.encode(message.Datas[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCLotterySync message, length delimited. Does not implicitly {@link gamehall.SCLotterySync.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync} message SCLotterySync message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotterySync.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotterySync message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotterySync - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotterySync} SCLotterySync - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotterySync.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotterySync(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.LotteryData.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotterySync message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotterySync - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotterySync} SCLotterySync - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotterySync.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotterySync message. - * @function verify - * @memberof gamehall.SCLotterySync - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotterySync.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.LotteryData.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCLotterySync message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotterySync - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotterySync} SCLotterySync - */ - SCLotterySync.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotterySync) - return object; - var message = new $root.gamehall.SCLotterySync(); - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCLotterySync.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCLotterySync.Datas: object expected"); - message.Datas[i] = $root.gamehall.LotteryData.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCLotterySync message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.SCLotterySync} message SCLotterySync - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotterySync.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.LotteryData.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCLotterySync to JSON. - * @function toJSON - * @memberof gamehall.SCLotterySync - * @instance - * @returns {Object.} JSON object - */ - SCLotterySync.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotterySync - * @function getTypeUrl - * @memberof gamehall.SCLotterySync - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotterySync.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotterySync"; - }; - - return SCLotterySync; - })(); - - gamehall.CSLotteryLog = (function() { - - /** - * Properties of a CSLotteryLog. - * @memberof gamehall - * @interface ICSLotteryLog - * @property {number|null} [GameFreeId] CSLotteryLog GameFreeId - */ - - /** - * Constructs a new CSLotteryLog. - * @memberof gamehall - * @classdesc Represents a CSLotteryLog. - * @implements ICSLotteryLog - * @constructor - * @param {gamehall.ICSLotteryLog=} [properties] Properties to set - */ - function CSLotteryLog(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSLotteryLog GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSLotteryLog - * @instance - */ - CSLotteryLog.prototype.GameFreeId = 0; - - /** - * Creates a new CSLotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog=} [properties] Properties to set - * @returns {gamehall.CSLotteryLog} CSLotteryLog instance - */ - CSLotteryLog.create = function create(properties) { - return new CSLotteryLog(properties); - }; - - /** - * Encodes the specified CSLotteryLog message. Does not implicitly {@link gamehall.CSLotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog} message CSLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified CSLotteryLog message, length delimited. Does not implicitly {@link gamehall.CSLotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog} message CSLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLotteryLog} CSLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLotteryLog} CSLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLotteryLog message. - * @function verify - * @memberof gamehall.CSLotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a CSLotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLotteryLog} CSLotteryLog - */ - CSLotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLotteryLog) - return object; - var message = new $root.gamehall.CSLotteryLog(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a CSLotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.CSLotteryLog} message CSLotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this CSLotteryLog to JSON. - * @function toJSON - * @memberof gamehall.CSLotteryLog - * @instance - * @returns {Object.} JSON object - */ - CSLotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLotteryLog - * @function getTypeUrl - * @memberof gamehall.CSLotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLotteryLog"; - }; - - return CSLotteryLog; - })(); - - gamehall.LotteryLog = (function() { - - /** - * Properties of a LotteryLog. - * @memberof gamehall - * @interface ILotteryLog - * @property {number|null} [Time] LotteryLog Time - * @property {string|null} [NickName] LotteryLog NickName - * @property {Array.|null} [Card] LotteryLog Card - * @property {number|null} [Kind] LotteryLog Kind - * @property {number|null} [Coin] LotteryLog Coin - */ - - /** - * Constructs a new LotteryLog. - * @memberof gamehall - * @classdesc Represents a LotteryLog. - * @implements ILotteryLog - * @constructor - * @param {gamehall.ILotteryLog=} [properties] Properties to set - */ - function LotteryLog(properties) { - this.Card = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * LotteryLog Time. - * @member {number} Time - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Time = 0; - - /** - * LotteryLog NickName. - * @member {string} NickName - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.NickName = ""; - - /** - * LotteryLog Card. - * @member {Array.} Card - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Card = $util.emptyArray; - - /** - * LotteryLog Kind. - * @member {number} Kind - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Kind = 0; - - /** - * LotteryLog Coin. - * @member {number} Coin - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Coin = 0; - - /** - * Creates a new LotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog=} [properties] Properties to set - * @returns {gamehall.LotteryLog} LotteryLog instance - */ - LotteryLog.create = function create(properties) { - return new LotteryLog(properties); - }; - - /** - * Encodes the specified LotteryLog message. Does not implicitly {@link gamehall.LotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog} message LotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Time != null && Object.hasOwnProperty.call(message, "Time")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Time); - if (message.NickName != null && Object.hasOwnProperty.call(message, "NickName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.NickName); - if (message.Card != null && message.Card.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.Card.length; ++i) - writer.int32(message.Card[i]); - writer.ldelim(); - } - if (message.Kind != null && Object.hasOwnProperty.call(message, "Kind")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Kind); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Coin); - return writer; - }; - - /** - * Encodes the specified LotteryLog message, length delimited. Does not implicitly {@link gamehall.LotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog} message LotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a LotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.LotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.LotteryLog} LotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.LotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Time = reader.int32(); - break; - } - case 2: { - message.NickName = reader.string(); - break; - } - case 3: { - if (!(message.Card && message.Card.length)) - message.Card = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Card.push(reader.int32()); - } else - message.Card.push(reader.int32()); - break; - } - case 4: { - message.Kind = reader.int32(); - break; - } - case 5: { - message.Coin = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a LotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.LotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.LotteryLog} LotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a LotteryLog message. - * @function verify - * @memberof gamehall.LotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - LotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Time != null && message.hasOwnProperty("Time")) - if (!$util.isInteger(message.Time)) - return "Time: integer expected"; - if (message.NickName != null && message.hasOwnProperty("NickName")) - if (!$util.isString(message.NickName)) - return "NickName: string expected"; - if (message.Card != null && message.hasOwnProperty("Card")) { - if (!Array.isArray(message.Card)) - return "Card: array expected"; - for (var i = 0; i < message.Card.length; ++i) - if (!$util.isInteger(message.Card[i])) - return "Card: integer[] expected"; - } - if (message.Kind != null && message.hasOwnProperty("Kind")) - if (!$util.isInteger(message.Kind)) - return "Kind: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - return null; - }; - - /** - * Creates a LotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.LotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.LotteryLog} LotteryLog - */ - LotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.LotteryLog) - return object; - var message = new $root.gamehall.LotteryLog(); - if (object.Time != null) - message.Time = object.Time | 0; - if (object.NickName != null) - message.NickName = String(object.NickName); - if (object.Card) { - if (!Array.isArray(object.Card)) - throw TypeError(".gamehall.LotteryLog.Card: array expected"); - message.Card = []; - for (var i = 0; i < object.Card.length; ++i) - message.Card[i] = object.Card[i] | 0; - } - if (object.Kind != null) - message.Kind = object.Kind | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - return message; - }; - - /** - * Creates a plain object from a LotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.LotteryLog} message LotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - LotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Card = []; - if (options.defaults) { - object.Time = 0; - object.NickName = ""; - object.Kind = 0; - object.Coin = 0; - } - if (message.Time != null && message.hasOwnProperty("Time")) - object.Time = message.Time; - if (message.NickName != null && message.hasOwnProperty("NickName")) - object.NickName = message.NickName; - if (message.Card && message.Card.length) { - object.Card = []; - for (var j = 0; j < message.Card.length; ++j) - object.Card[j] = message.Card[j]; - } - if (message.Kind != null && message.hasOwnProperty("Kind")) - object.Kind = message.Kind; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - return object; - }; - - /** - * Converts this LotteryLog to JSON. - * @function toJSON - * @memberof gamehall.LotteryLog - * @instance - * @returns {Object.} JSON object - */ - LotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for LotteryLog - * @function getTypeUrl - * @memberof gamehall.LotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - LotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.LotteryLog"; - }; - - return LotteryLog; - })(); - - gamehall.SCLotteryLog = (function() { - - /** - * Properties of a SCLotteryLog. - * @memberof gamehall - * @interface ISCLotteryLog - * @property {number|null} [GameFreeId] SCLotteryLog GameFreeId - * @property {Array.|null} [Logs] SCLotteryLog Logs - */ - - /** - * Constructs a new SCLotteryLog. - * @memberof gamehall - * @classdesc Represents a SCLotteryLog. - * @implements ISCLotteryLog - * @constructor - * @param {gamehall.ISCLotteryLog=} [properties] Properties to set - */ - function SCLotteryLog(properties) { - this.Logs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotteryLog GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCLotteryLog - * @instance - */ - SCLotteryLog.prototype.GameFreeId = 0; - - /** - * SCLotteryLog Logs. - * @member {Array.} Logs - * @memberof gamehall.SCLotteryLog - * @instance - */ - SCLotteryLog.prototype.Logs = $util.emptyArray; - - /** - * Creates a new SCLotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog=} [properties] Properties to set - * @returns {gamehall.SCLotteryLog} SCLotteryLog instance - */ - SCLotteryLog.create = function create(properties) { - return new SCLotteryLog(properties); - }; - - /** - * Encodes the specified SCLotteryLog message. Does not implicitly {@link gamehall.SCLotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog} message SCLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Logs != null && message.Logs.length) - for (var i = 0; i < message.Logs.length; ++i) - $root.gamehall.LotteryLog.encode(message.Logs[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCLotteryLog message, length delimited. Does not implicitly {@link gamehall.SCLotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog} message SCLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotteryLog} SCLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Logs && message.Logs.length)) - message.Logs = []; - message.Logs.push($root.gamehall.LotteryLog.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotteryLog} SCLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotteryLog message. - * @function verify - * @memberof gamehall.SCLotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Logs != null && message.hasOwnProperty("Logs")) { - if (!Array.isArray(message.Logs)) - return "Logs: array expected"; - for (var i = 0; i < message.Logs.length; ++i) { - var error = $root.gamehall.LotteryLog.verify(message.Logs[i]); - if (error) - return "Logs." + error; - } - } - return null; - }; - - /** - * Creates a SCLotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotteryLog} SCLotteryLog - */ - SCLotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotteryLog) - return object; - var message = new $root.gamehall.SCLotteryLog(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Logs) { - if (!Array.isArray(object.Logs)) - throw TypeError(".gamehall.SCLotteryLog.Logs: array expected"); - message.Logs = []; - for (var i = 0; i < object.Logs.length; ++i) { - if (typeof object.Logs[i] !== "object") - throw TypeError(".gamehall.SCLotteryLog.Logs: object expected"); - message.Logs[i] = $root.gamehall.LotteryLog.fromObject(object.Logs[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCLotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.SCLotteryLog} message SCLotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Logs = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Logs && message.Logs.length) { - object.Logs = []; - for (var j = 0; j < message.Logs.length; ++j) - object.Logs[j] = $root.gamehall.LotteryLog.toObject(message.Logs[j], options); - } - return object; - }; - - /** - * Converts this SCLotteryLog to JSON. - * @function toJSON - * @memberof gamehall.SCLotteryLog - * @instance - * @returns {Object.} JSON object - */ - SCLotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotteryLog - * @function getTypeUrl - * @memberof gamehall.SCLotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotteryLog"; - }; - - return SCLotteryLog; - })(); - - gamehall.SCLotteryBill = (function() { - - /** - * Properties of a SCLotteryBill. - * @memberof gamehall - * @interface ISCLotteryBill - * @property {number|null} [GameFreeId] SCLotteryBill GameFreeId - * @property {number|null} [SnId] SCLotteryBill SnId - * @property {string|null} [Name] SCLotteryBill Name - * @property {number|null} [Kind] SCLotteryBill Kind - * @property {Array.|null} [Card] SCLotteryBill Card - * @property {number|Long|null} [Value] SCLotteryBill Value - */ - - /** - * Constructs a new SCLotteryBill. - * @memberof gamehall - * @classdesc Represents a SCLotteryBill. - * @implements ISCLotteryBill - * @constructor - * @param {gamehall.ISCLotteryBill=} [properties] Properties to set - */ - function SCLotteryBill(properties) { - this.Card = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotteryBill GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.GameFreeId = 0; - - /** - * SCLotteryBill SnId. - * @member {number} SnId - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.SnId = 0; - - /** - * SCLotteryBill Name. - * @member {string} Name - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Name = ""; - - /** - * SCLotteryBill Kind. - * @member {number} Kind - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Kind = 0; - - /** - * SCLotteryBill Card. - * @member {Array.} Card - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Card = $util.emptyArray; - - /** - * SCLotteryBill Value. - * @member {number|Long} Value - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCLotteryBill instance using the specified properties. - * @function create - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill=} [properties] Properties to set - * @returns {gamehall.SCLotteryBill} SCLotteryBill instance - */ - SCLotteryBill.create = function create(properties) { - return new SCLotteryBill(properties); - }; - - /** - * Encodes the specified SCLotteryBill message. Does not implicitly {@link gamehall.SCLotteryBill.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill} message SCLotteryBill message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryBill.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.SnId); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Name); - if (message.Kind != null && Object.hasOwnProperty.call(message, "Kind")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Kind); - if (message.Card != null && message.Card.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Card.length; ++i) - writer.int32(message.Card[i]); - writer.ldelim(); - } - if (message.Value != null && Object.hasOwnProperty.call(message, "Value")) - writer.uint32(/* id 6, wireType 0 =*/48).int64(message.Value); - return writer; - }; - - /** - * Encodes the specified SCLotteryBill message, length delimited. Does not implicitly {@link gamehall.SCLotteryBill.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill} message SCLotteryBill message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryBill.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotteryBill message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotteryBill - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotteryBill} SCLotteryBill - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryBill.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotteryBill(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.SnId = reader.int32(); - break; - } - case 3: { - message.Name = reader.string(); - break; - } - case 4: { - message.Kind = reader.int32(); - break; - } - case 5: { - if (!(message.Card && message.Card.length)) - message.Card = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Card.push(reader.int32()); - } else - message.Card.push(reader.int32()); - break; - } - case 6: { - message.Value = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotteryBill message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotteryBill - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotteryBill} SCLotteryBill - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryBill.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotteryBill message. - * @function verify - * @memberof gamehall.SCLotteryBill - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotteryBill.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Kind != null && message.hasOwnProperty("Kind")) - if (!$util.isInteger(message.Kind)) - return "Kind: integer expected"; - if (message.Card != null && message.hasOwnProperty("Card")) { - if (!Array.isArray(message.Card)) - return "Card: array expected"; - for (var i = 0; i < message.Card.length; ++i) - if (!$util.isInteger(message.Card[i])) - return "Card: integer[] expected"; - } - if (message.Value != null && message.hasOwnProperty("Value")) - if (!$util.isInteger(message.Value) && !(message.Value && $util.isInteger(message.Value.low) && $util.isInteger(message.Value.high))) - return "Value: integer|Long expected"; - return null; - }; - - /** - * Creates a SCLotteryBill message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotteryBill - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotteryBill} SCLotteryBill - */ - SCLotteryBill.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotteryBill) - return object; - var message = new $root.gamehall.SCLotteryBill(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Kind != null) - message.Kind = object.Kind | 0; - if (object.Card) { - if (!Array.isArray(object.Card)) - throw TypeError(".gamehall.SCLotteryBill.Card: array expected"); - message.Card = []; - for (var i = 0; i < object.Card.length; ++i) - message.Card[i] = object.Card[i] | 0; - } - if (object.Value != null) - if ($util.Long) - (message.Value = $util.Long.fromValue(object.Value)).unsigned = false; - else if (typeof object.Value === "string") - message.Value = parseInt(object.Value, 10); - else if (typeof object.Value === "number") - message.Value = object.Value; - else if (typeof object.Value === "object") - message.Value = new $util.LongBits(object.Value.low >>> 0, object.Value.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCLotteryBill message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.SCLotteryBill} message SCLotteryBill - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotteryBill.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Card = []; - if (options.defaults) { - object.GameFreeId = 0; - object.SnId = 0; - object.Name = ""; - object.Kind = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Value = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Kind != null && message.hasOwnProperty("Kind")) - object.Kind = message.Kind; - if (message.Card && message.Card.length) { - object.Card = []; - for (var j = 0; j < message.Card.length; ++j) - object.Card[j] = message.Card[j]; - } - if (message.Value != null && message.hasOwnProperty("Value")) - if (typeof message.Value === "number") - object.Value = options.longs === String ? String(message.Value) : message.Value; - else - object.Value = options.longs === String ? $util.Long.prototype.toString.call(message.Value) : options.longs === Number ? new $util.LongBits(message.Value.low >>> 0, message.Value.high >>> 0).toNumber() : message.Value; - return object; - }; - - /** - * Converts this SCLotteryBill to JSON. - * @function toJSON - * @memberof gamehall.SCLotteryBill - * @instance - * @returns {Object.} JSON object - */ - SCLotteryBill.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotteryBill - * @function getTypeUrl - * @memberof gamehall.SCLotteryBill - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotteryBill.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotteryBill"; - }; - - return SCLotteryBill; - })(); - - gamehall.GameConfig1 = (function() { - - /** - * Properties of a GameConfig1. - * @memberof gamehall - * @interface IGameConfig1 - * @property {number|null} [LogicId] GameConfig1 LogicId - * @property {number|null} [LimitCoin] GameConfig1 LimitCoin - * @property {number|null} [MaxCoinLimit] GameConfig1 MaxCoinLimit - * @property {number|null} [BaseScore] GameConfig1 BaseScore - * @property {Array.|null} [OtherIntParams] GameConfig1 OtherIntParams - * @property {number|null} [BetScore] GameConfig1 BetScore - * @property {Array.|null} [MaxBetCoin] GameConfig1 MaxBetCoin - * @property {number|null} [MatchMode] GameConfig1 MatchMode - * @property {number|Long|null} [LotteryCoin] GameConfig1 LotteryCoin - * @property {string|null} [LotteryCfg] GameConfig1 LotteryCfg - * @property {boolean|null} [Status] GameConfig1 Status - */ - - /** - * Constructs a new GameConfig1. - * @memberof gamehall - * @classdesc Represents a GameConfig1. - * @implements IGameConfig1 - * @constructor - * @param {gamehall.IGameConfig1=} [properties] Properties to set - */ - function GameConfig1(properties) { - this.OtherIntParams = []; - this.MaxBetCoin = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameConfig1 LogicId. - * @member {number} LogicId - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LogicId = 0; - - /** - * GameConfig1 LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LimitCoin = 0; - - /** - * GameConfig1 MaxCoinLimit. - * @member {number} MaxCoinLimit - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MaxCoinLimit = 0; - - /** - * GameConfig1 BaseScore. - * @member {number} BaseScore - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.BaseScore = 0; - - /** - * GameConfig1 OtherIntParams. - * @member {Array.} OtherIntParams - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.OtherIntParams = $util.emptyArray; - - /** - * GameConfig1 BetScore. - * @member {number} BetScore - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.BetScore = 0; - - /** - * GameConfig1 MaxBetCoin. - * @member {Array.} MaxBetCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MaxBetCoin = $util.emptyArray; - - /** - * GameConfig1 MatchMode. - * @member {number} MatchMode - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MatchMode = 0; - - /** - * GameConfig1 LotteryCoin. - * @member {number|Long} LotteryCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LotteryCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameConfig1 LotteryCfg. - * @member {string} LotteryCfg - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LotteryCfg = ""; - - /** - * GameConfig1 Status. - * @member {boolean} Status - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.Status = false; - - /** - * Creates a new GameConfig1 instance using the specified properties. - * @function create - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1=} [properties] Properties to set - * @returns {gamehall.GameConfig1} GameConfig1 instance - */ - GameConfig1.create = function create(properties) { - return new GameConfig1(properties); - }; - - /** - * Encodes the specified GameConfig1 message. Does not implicitly {@link gamehall.GameConfig1.verify|verify} messages. - * @function encode - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1} message GameConfig1 message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameConfig1.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.LogicId != null && Object.hasOwnProperty.call(message, "LogicId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.LogicId); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LimitCoin); - if (message.MaxCoinLimit != null && Object.hasOwnProperty.call(message, "MaxCoinLimit")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.MaxCoinLimit); - if (message.BaseScore != null && Object.hasOwnProperty.call(message, "BaseScore")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseScore); - if (message.OtherIntParams != null && message.OtherIntParams.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.OtherIntParams.length; ++i) - writer.int32(message.OtherIntParams[i]); - writer.ldelim(); - } - if (message.BetScore != null && Object.hasOwnProperty.call(message, "BetScore")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.BetScore); - if (message.MaxBetCoin != null && message.MaxBetCoin.length) { - writer.uint32(/* id 7, wireType 2 =*/58).fork(); - for (var i = 0; i < message.MaxBetCoin.length; ++i) - writer.int32(message.MaxBetCoin[i]); - writer.ldelim(); - } - if (message.MatchMode != null && Object.hasOwnProperty.call(message, "MatchMode")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.MatchMode); - if (message.LotteryCoin != null && Object.hasOwnProperty.call(message, "LotteryCoin")) - writer.uint32(/* id 9, wireType 0 =*/72).int64(message.LotteryCoin); - if (message.LotteryCfg != null && Object.hasOwnProperty.call(message, "LotteryCfg")) - writer.uint32(/* id 10, wireType 2 =*/82).string(message.LotteryCfg); - if (message.Status != null && Object.hasOwnProperty.call(message, "Status")) - writer.uint32(/* id 11, wireType 0 =*/88).bool(message.Status); - return writer; - }; - - /** - * Encodes the specified GameConfig1 message, length delimited. Does not implicitly {@link gamehall.GameConfig1.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1} message GameConfig1 message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameConfig1.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameConfig1 message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameConfig1 - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameConfig1} GameConfig1 - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameConfig1.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameConfig1(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.LogicId = reader.int32(); - break; - } - case 2: { - message.LimitCoin = reader.int32(); - break; - } - case 3: { - message.MaxCoinLimit = reader.int32(); - break; - } - case 4: { - message.BaseScore = reader.int32(); - break; - } - case 5: { - if (!(message.OtherIntParams && message.OtherIntParams.length)) - message.OtherIntParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherIntParams.push(reader.int32()); - } else - message.OtherIntParams.push(reader.int32()); - break; - } - case 6: { - message.BetScore = reader.int32(); - break; - } - case 7: { - if (!(message.MaxBetCoin && message.MaxBetCoin.length)) - message.MaxBetCoin = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.MaxBetCoin.push(reader.int32()); - } else - message.MaxBetCoin.push(reader.int32()); - break; - } - case 8: { - message.MatchMode = reader.int32(); - break; - } - case 9: { - message.LotteryCoin = reader.int64(); - break; - } - case 10: { - message.LotteryCfg = reader.string(); - break; - } - case 11: { - message.Status = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameConfig1 message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameConfig1 - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameConfig1} GameConfig1 - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameConfig1.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameConfig1 message. - * @function verify - * @memberof gamehall.GameConfig1 - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameConfig1.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.LogicId != null && message.hasOwnProperty("LogicId")) - if (!$util.isInteger(message.LogicId)) - return "LogicId: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - if (!$util.isInteger(message.MaxCoinLimit)) - return "MaxCoinLimit: integer expected"; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - if (!$util.isInteger(message.BaseScore)) - return "BaseScore: integer expected"; - if (message.OtherIntParams != null && message.hasOwnProperty("OtherIntParams")) { - if (!Array.isArray(message.OtherIntParams)) - return "OtherIntParams: array expected"; - for (var i = 0; i < message.OtherIntParams.length; ++i) - if (!$util.isInteger(message.OtherIntParams[i])) - return "OtherIntParams: integer[] expected"; - } - if (message.BetScore != null && message.hasOwnProperty("BetScore")) - if (!$util.isInteger(message.BetScore)) - return "BetScore: integer expected"; - if (message.MaxBetCoin != null && message.hasOwnProperty("MaxBetCoin")) { - if (!Array.isArray(message.MaxBetCoin)) - return "MaxBetCoin: array expected"; - for (var i = 0; i < message.MaxBetCoin.length; ++i) - if (!$util.isInteger(message.MaxBetCoin[i])) - return "MaxBetCoin: integer[] expected"; - } - if (message.MatchMode != null && message.hasOwnProperty("MatchMode")) - if (!$util.isInteger(message.MatchMode)) - return "MatchMode: integer expected"; - if (message.LotteryCoin != null && message.hasOwnProperty("LotteryCoin")) - if (!$util.isInteger(message.LotteryCoin) && !(message.LotteryCoin && $util.isInteger(message.LotteryCoin.low) && $util.isInteger(message.LotteryCoin.high))) - return "LotteryCoin: integer|Long expected"; - if (message.LotteryCfg != null && message.hasOwnProperty("LotteryCfg")) - if (!$util.isString(message.LotteryCfg)) - return "LotteryCfg: string expected"; - if (message.Status != null && message.hasOwnProperty("Status")) - if (typeof message.Status !== "boolean") - return "Status: boolean expected"; - return null; - }; - - /** - * Creates a GameConfig1 message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameConfig1 - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameConfig1} GameConfig1 - */ - GameConfig1.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameConfig1) - return object; - var message = new $root.gamehall.GameConfig1(); - if (object.LogicId != null) - message.LogicId = object.LogicId | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.MaxCoinLimit != null) - message.MaxCoinLimit = object.MaxCoinLimit | 0; - if (object.BaseScore != null) - message.BaseScore = object.BaseScore | 0; - if (object.OtherIntParams) { - if (!Array.isArray(object.OtherIntParams)) - throw TypeError(".gamehall.GameConfig1.OtherIntParams: array expected"); - message.OtherIntParams = []; - for (var i = 0; i < object.OtherIntParams.length; ++i) - message.OtherIntParams[i] = object.OtherIntParams[i] | 0; - } - if (object.BetScore != null) - message.BetScore = object.BetScore | 0; - if (object.MaxBetCoin) { - if (!Array.isArray(object.MaxBetCoin)) - throw TypeError(".gamehall.GameConfig1.MaxBetCoin: array expected"); - message.MaxBetCoin = []; - for (var i = 0; i < object.MaxBetCoin.length; ++i) - message.MaxBetCoin[i] = object.MaxBetCoin[i] | 0; - } - if (object.MatchMode != null) - message.MatchMode = object.MatchMode | 0; - if (object.LotteryCoin != null) - if ($util.Long) - (message.LotteryCoin = $util.Long.fromValue(object.LotteryCoin)).unsigned = false; - else if (typeof object.LotteryCoin === "string") - message.LotteryCoin = parseInt(object.LotteryCoin, 10); - else if (typeof object.LotteryCoin === "number") - message.LotteryCoin = object.LotteryCoin; - else if (typeof object.LotteryCoin === "object") - message.LotteryCoin = new $util.LongBits(object.LotteryCoin.low >>> 0, object.LotteryCoin.high >>> 0).toNumber(); - if (object.LotteryCfg != null) - message.LotteryCfg = String(object.LotteryCfg); - if (object.Status != null) - message.Status = Boolean(object.Status); - return message; - }; - - /** - * Creates a plain object from a GameConfig1 message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.GameConfig1} message GameConfig1 - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameConfig1.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.OtherIntParams = []; - object.MaxBetCoin = []; - } - if (options.defaults) { - object.LogicId = 0; - object.LimitCoin = 0; - object.MaxCoinLimit = 0; - object.BaseScore = 0; - object.BetScore = 0; - object.MatchMode = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LotteryCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LotteryCoin = options.longs === String ? "0" : 0; - object.LotteryCfg = ""; - object.Status = false; - } - if (message.LogicId != null && message.hasOwnProperty("LogicId")) - object.LogicId = message.LogicId; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - object.MaxCoinLimit = message.MaxCoinLimit; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - object.BaseScore = message.BaseScore; - if (message.OtherIntParams && message.OtherIntParams.length) { - object.OtherIntParams = []; - for (var j = 0; j < message.OtherIntParams.length; ++j) - object.OtherIntParams[j] = message.OtherIntParams[j]; - } - if (message.BetScore != null && message.hasOwnProperty("BetScore")) - object.BetScore = message.BetScore; - if (message.MaxBetCoin && message.MaxBetCoin.length) { - object.MaxBetCoin = []; - for (var j = 0; j < message.MaxBetCoin.length; ++j) - object.MaxBetCoin[j] = message.MaxBetCoin[j]; - } - if (message.MatchMode != null && message.hasOwnProperty("MatchMode")) - object.MatchMode = message.MatchMode; - if (message.LotteryCoin != null && message.hasOwnProperty("LotteryCoin")) - if (typeof message.LotteryCoin === "number") - object.LotteryCoin = options.longs === String ? String(message.LotteryCoin) : message.LotteryCoin; - else - object.LotteryCoin = options.longs === String ? $util.Long.prototype.toString.call(message.LotteryCoin) : options.longs === Number ? new $util.LongBits(message.LotteryCoin.low >>> 0, message.LotteryCoin.high >>> 0).toNumber() : message.LotteryCoin; - if (message.LotteryCfg != null && message.hasOwnProperty("LotteryCfg")) - object.LotteryCfg = message.LotteryCfg; - if (message.Status != null && message.hasOwnProperty("Status")) - object.Status = message.Status; - return object; - }; - - /** - * Converts this GameConfig1 to JSON. - * @function toJSON - * @memberof gamehall.GameConfig1 - * @instance - * @returns {Object.} JSON object - */ - GameConfig1.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameConfig1 - * @function getTypeUrl - * @memberof gamehall.GameConfig1 - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameConfig1.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameConfig1"; - }; - - return GameConfig1; - })(); - - gamehall.CSGetGameConfig = (function() { - - /** - * Properties of a CSGetGameConfig. - * @memberof gamehall - * @interface ICSGetGameConfig - * @property {string|null} [Platform] CSGetGameConfig Platform - * @property {string|null} [Channel] CSGetGameConfig Channel - * @property {number|null} [GameId] CSGetGameConfig GameId - */ - - /** - * Constructs a new CSGetGameConfig. - * @memberof gamehall - * @classdesc Represents a CSGetGameConfig. - * @implements ICSGetGameConfig - * @constructor - * @param {gamehall.ICSGetGameConfig=} [properties] Properties to set - */ - function CSGetGameConfig(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetGameConfig Platform. - * @member {string} Platform - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.Platform = ""; - - /** - * CSGetGameConfig Channel. - * @member {string} Channel - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.Channel = ""; - - /** - * CSGetGameConfig GameId. - * @member {number} GameId - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.GameId = 0; - - /** - * Creates a new CSGetGameConfig instance using the specified properties. - * @function create - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig=} [properties] Properties to set - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig instance - */ - CSGetGameConfig.create = function create(properties) { - return new CSGetGameConfig(properties); - }; - - /** - * Encodes the specified CSGetGameConfig message. Does not implicitly {@link gamehall.CSGetGameConfig.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig} message CSGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameConfig.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Platform); - if (message.Channel != null && Object.hasOwnProperty.call(message, "Channel")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Channel); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSGetGameConfig message, length delimited. Does not implicitly {@link gamehall.CSGetGameConfig.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig} message CSGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameConfig.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetGameConfig message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameConfig.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetGameConfig(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Platform = reader.string(); - break; - } - case 2: { - message.Channel = reader.string(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetGameConfig message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameConfig.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetGameConfig message. - * @function verify - * @memberof gamehall.CSGetGameConfig - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetGameConfig.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.Channel != null && message.hasOwnProperty("Channel")) - if (!$util.isString(message.Channel)) - return "Channel: string expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSGetGameConfig message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetGameConfig - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - */ - CSGetGameConfig.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetGameConfig) - return object; - var message = new $root.gamehall.CSGetGameConfig(); - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.Channel != null) - message.Channel = String(object.Channel); - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetGameConfig message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.CSGetGameConfig} message CSGetGameConfig - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetGameConfig.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Platform = ""; - object.Channel = ""; - object.GameId = 0; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.Channel != null && message.hasOwnProperty("Channel")) - object.Channel = message.Channel; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSGetGameConfig to JSON. - * @function toJSON - * @memberof gamehall.CSGetGameConfig - * @instance - * @returns {Object.} JSON object - */ - CSGetGameConfig.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetGameConfig - * @function getTypeUrl - * @memberof gamehall.CSGetGameConfig - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetGameConfig.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetGameConfig"; - }; - - return CSGetGameConfig; - })(); - - gamehall.SCGetGameConfig = (function() { - - /** - * Properties of a SCGetGameConfig. - * @memberof gamehall - * @interface ISCGetGameConfig - * @property {Array.|null} [GameCfg] SCGetGameConfig GameCfg - * @property {number|null} [GameId] SCGetGameConfig GameId - */ - - /** - * Constructs a new SCGetGameConfig. - * @memberof gamehall - * @classdesc Represents a SCGetGameConfig. - * @implements ISCGetGameConfig - * @constructor - * @param {gamehall.ISCGetGameConfig=} [properties] Properties to set - */ - function SCGetGameConfig(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetGameConfig GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCGetGameConfig - * @instance - */ - SCGetGameConfig.prototype.GameCfg = $util.emptyArray; - - /** - * SCGetGameConfig GameId. - * @member {number} GameId - * @memberof gamehall.SCGetGameConfig - * @instance - */ - SCGetGameConfig.prototype.GameId = 0; - - /** - * Creates a new SCGetGameConfig instance using the specified properties. - * @function create - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig=} [properties] Properties to set - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig instance - */ - SCGetGameConfig.create = function create(properties) { - return new SCGetGameConfig(properties); - }; - - /** - * Encodes the specified SCGetGameConfig message. Does not implicitly {@link gamehall.SCGetGameConfig.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig} message SCGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameConfig.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) - for (var i = 0; i < message.GameCfg.length; ++i) - $root.gamehall.GameConfig1.encode(message.GameCfg[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCGetGameConfig message, length delimited. Does not implicitly {@link gamehall.SCGetGameConfig.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig} message SCGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameConfig.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetGameConfig message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameConfig.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetGameConfig(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - message.GameCfg.push($root.gamehall.GameConfig1.decode(reader, reader.uint32())); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetGameConfig message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameConfig.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetGameConfig message. - * @function verify - * @memberof gamehall.SCGetGameConfig - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetGameConfig.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) { - var error = $root.gamehall.GameConfig1.verify(message.GameCfg[i]); - if (error) - return "GameCfg." + error; - } - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCGetGameConfig message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetGameConfig - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - */ - SCGetGameConfig.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetGameConfig) - return object; - var message = new $root.gamehall.SCGetGameConfig(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCGetGameConfig.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) { - if (typeof object.GameCfg[i] !== "object") - throw TypeError(".gamehall.SCGetGameConfig.GameCfg: object expected"); - message.GameCfg[i] = $root.gamehall.GameConfig1.fromObject(object.GameCfg[i]); - } - } - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCGetGameConfig message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.SCGetGameConfig} message SCGetGameConfig - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetGameConfig.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (options.defaults) - object.GameId = 0; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = $root.gamehall.GameConfig1.toObject(message.GameCfg[j], options); - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCGetGameConfig to JSON. - * @function toJSON - * @memberof gamehall.SCGetGameConfig - * @instance - * @returns {Object.} JSON object - */ - SCGetGameConfig.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetGameConfig - * @function getTypeUrl - * @memberof gamehall.SCGetGameConfig - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetGameConfig.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetGameConfig"; - }; - - return SCGetGameConfig; - })(); - - gamehall.SCChangeGameStatus = (function() { - - /** - * Properties of a SCChangeGameStatus. - * @memberof gamehall - * @interface ISCChangeGameStatus - * @property {Array.|null} [GameCfg] SCChangeGameStatus GameCfg - */ - - /** - * Constructs a new SCChangeGameStatus. - * @memberof gamehall - * @classdesc Represents a SCChangeGameStatus. - * @implements ISCChangeGameStatus - * @constructor - * @param {gamehall.ISCChangeGameStatus=} [properties] Properties to set - */ - function SCChangeGameStatus(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCChangeGameStatus GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCChangeGameStatus - * @instance - */ - SCChangeGameStatus.prototype.GameCfg = $util.emptyArray; - - /** - * Creates a new SCChangeGameStatus instance using the specified properties. - * @function create - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus=} [properties] Properties to set - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus instance - */ - SCChangeGameStatus.create = function create(properties) { - return new SCChangeGameStatus(properties); - }; - - /** - * Encodes the specified SCChangeGameStatus message. Does not implicitly {@link gamehall.SCChangeGameStatus.verify|verify} messages. - * @function encode - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus} message SCChangeGameStatus message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeGameStatus.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) - for (var i = 0; i < message.GameCfg.length; ++i) - $root.gamehall.GameConfig1.encode(message.GameCfg[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCChangeGameStatus message, length delimited. Does not implicitly {@link gamehall.SCChangeGameStatus.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus} message SCChangeGameStatus message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeGameStatus.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCChangeGameStatus message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeGameStatus.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCChangeGameStatus(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - message.GameCfg.push($root.gamehall.GameConfig1.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCChangeGameStatus message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeGameStatus.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCChangeGameStatus message. - * @function verify - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCChangeGameStatus.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) { - var error = $root.gamehall.GameConfig1.verify(message.GameCfg[i]); - if (error) - return "GameCfg." + error; - } - } - return null; - }; - - /** - * Creates a SCChangeGameStatus message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - */ - SCChangeGameStatus.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCChangeGameStatus) - return object; - var message = new $root.gamehall.SCChangeGameStatus(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCChangeGameStatus.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) { - if (typeof object.GameCfg[i] !== "object") - throw TypeError(".gamehall.SCChangeGameStatus.GameCfg: object expected"); - message.GameCfg[i] = $root.gamehall.GameConfig1.fromObject(object.GameCfg[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCChangeGameStatus message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.SCChangeGameStatus} message SCChangeGameStatus - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCChangeGameStatus.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = $root.gamehall.GameConfig1.toObject(message.GameCfg[j], options); - } - return object; - }; - - /** - * Converts this SCChangeGameStatus to JSON. - * @function toJSON - * @memberof gamehall.SCChangeGameStatus - * @instance - * @returns {Object.} JSON object - */ - SCChangeGameStatus.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCChangeGameStatus - * @function getTypeUrl - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCChangeGameStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCChangeGameStatus"; - }; - - return SCChangeGameStatus; - })(); - - gamehall.SCChangeEntrySwitch = (function() { - - /** - * Properties of a SCChangeEntrySwitch. - * @memberof gamehall - * @interface ISCChangeEntrySwitch - * @property {Array.|null} [GameCfg] SCChangeEntrySwitch GameCfg - */ - - /** - * Constructs a new SCChangeEntrySwitch. - * @memberof gamehall - * @classdesc Represents a SCChangeEntrySwitch. - * @implements ISCChangeEntrySwitch - * @constructor - * @param {gamehall.ISCChangeEntrySwitch=} [properties] Properties to set - */ - function SCChangeEntrySwitch(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCChangeEntrySwitch GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCChangeEntrySwitch - * @instance - */ - SCChangeEntrySwitch.prototype.GameCfg = $util.emptyArray; - - /** - * Creates a new SCChangeEntrySwitch instance using the specified properties. - * @function create - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch=} [properties] Properties to set - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch instance - */ - SCChangeEntrySwitch.create = function create(properties) { - return new SCChangeEntrySwitch(properties); - }; - - /** - * Encodes the specified SCChangeEntrySwitch message. Does not implicitly {@link gamehall.SCChangeEntrySwitch.verify|verify} messages. - * @function encode - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch} message SCChangeEntrySwitch message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeEntrySwitch.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameCfg.length; ++i) - writer.int32(message.GameCfg[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCChangeEntrySwitch message, length delimited. Does not implicitly {@link gamehall.SCChangeEntrySwitch.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch} message SCChangeEntrySwitch message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeEntrySwitch.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCChangeEntrySwitch message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeEntrySwitch.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCChangeEntrySwitch(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameCfg.push(reader.int32()); - } else - message.GameCfg.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCChangeEntrySwitch message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeEntrySwitch.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCChangeEntrySwitch message. - * @function verify - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCChangeEntrySwitch.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) - if (!$util.isInteger(message.GameCfg[i])) - return "GameCfg: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCChangeEntrySwitch message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - */ - SCChangeEntrySwitch.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCChangeEntrySwitch) - return object; - var message = new $root.gamehall.SCChangeEntrySwitch(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCChangeEntrySwitch.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) - message.GameCfg[i] = object.GameCfg[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCChangeEntrySwitch message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.SCChangeEntrySwitch} message SCChangeEntrySwitch - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCChangeEntrySwitch.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = message.GameCfg[j]; - } - return object; - }; - - /** - * Converts this SCChangeEntrySwitch to JSON. - * @function toJSON - * @memberof gamehall.SCChangeEntrySwitch - * @instance - * @returns {Object.} JSON object - */ - SCChangeEntrySwitch.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCChangeEntrySwitch - * @function getTypeUrl - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCChangeEntrySwitch.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCChangeEntrySwitch"; - }; - - return SCChangeEntrySwitch; - })(); - - gamehall.CSEnterGame = (function() { - - /** - * Properties of a CSEnterGame. - * @memberof gamehall - * @interface ICSEnterGame - * @property {number|null} [Id] CSEnterGame Id - * @property {Array.|null} [OpParams] CSEnterGame OpParams - * @property {string|null} [Platform] CSEnterGame Platform - * @property {number|null} [ApkVer] CSEnterGame ApkVer - * @property {number|null} [ResVer] CSEnterGame ResVer - */ - - /** - * Constructs a new CSEnterGame. - * @memberof gamehall - * @classdesc Represents a CSEnterGame. - * @implements ICSEnterGame - * @constructor - * @param {gamehall.ICSEnterGame=} [properties] Properties to set - */ - function CSEnterGame(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterGame Id. - * @member {number} Id - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.Id = 0; - - /** - * CSEnterGame OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.OpParams = $util.emptyArray; - - /** - * CSEnterGame Platform. - * @member {string} Platform - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.Platform = ""; - - /** - * CSEnterGame ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.ApkVer = 0; - - /** - * CSEnterGame ResVer. - * @member {number} ResVer - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.ResVer = 0; - - /** - * Creates a new CSEnterGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame=} [properties] Properties to set - * @returns {gamehall.CSEnterGame} CSEnterGame instance - */ - CSEnterGame.create = function create(properties) { - return new CSEnterGame(properties); - }; - - /** - * Encodes the specified CSEnterGame message. Does not implicitly {@link gamehall.CSEnterGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame} message CSEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Platform); - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.ResVer); - return writer; - }; - - /** - * Encodes the specified CSEnterGame message, length delimited. Does not implicitly {@link gamehall.CSEnterGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame} message CSEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterGame} CSEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 3: { - message.Platform = reader.string(); - break; - } - case 4: { - message.ApkVer = reader.int32(); - break; - } - case 5: { - message.ResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterGame} CSEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterGame message. - * @function verify - * @memberof gamehall.CSEnterGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - return null; - }; - - /** - * Creates a CSEnterGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterGame} CSEnterGame - */ - CSEnterGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterGame) - return object; - var message = new $root.gamehall.CSEnterGame(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSEnterGame.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.CSEnterGame} message CSEnterGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.Platform = ""; - object.ApkVer = 0; - object.ResVer = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - return object; - }; - - /** - * Converts this CSEnterGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterGame - * @function getTypeUrl - * @memberof gamehall.CSEnterGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterGame"; - }; - - return CSEnterGame; - })(); - - gamehall.SCEnterGame = (function() { - - /** - * Properties of a SCEnterGame. - * @memberof gamehall - * @interface ISCEnterGame - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCEnterGame OpCode - * @property {number|null} [Id] SCEnterGame Id - * @property {Array.|null} [OpParams] SCEnterGame OpParams - * @property {number|null} [MinApkVer] SCEnterGame MinApkVer - * @property {number|null} [LatestApkVer] SCEnterGame LatestApkVer - * @property {number|null} [MinResVer] SCEnterGame MinResVer - * @property {number|null} [LatestResVer] SCEnterGame LatestResVer - */ - - /** - * Constructs a new SCEnterGame. - * @memberof gamehall - * @classdesc Represents a SCEnterGame. - * @implements ISCEnterGame - * @constructor - * @param {gamehall.ISCEnterGame=} [properties] Properties to set - */ - function SCEnterGame(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterGame OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.OpCode = 0; - - /** - * SCEnterGame Id. - * @member {number} Id - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.Id = 0; - - /** - * SCEnterGame OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.OpParams = $util.emptyArray; - - /** - * SCEnterGame MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.MinApkVer = 0; - - /** - * SCEnterGame LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.LatestApkVer = 0; - - /** - * SCEnterGame MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.MinResVer = 0; - - /** - * SCEnterGame LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.LatestResVer = 0; - - /** - * Creates a new SCEnterGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame=} [properties] Properties to set - * @returns {gamehall.SCEnterGame} SCEnterGame instance - */ - SCEnterGame.create = function create(properties) { - return new SCEnterGame(properties); - }; - - /** - * Encodes the specified SCEnterGame message. Does not implicitly {@link gamehall.SCEnterGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame} message SCEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.LatestResVer); - return writer; - }; - - /** - * Encodes the specified SCEnterGame message, length delimited. Does not implicitly {@link gamehall.SCEnterGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame} message SCEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterGame} SCEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.MinApkVer = reader.int32(); - break; - } - case 5: { - message.LatestApkVer = reader.int32(); - break; - } - case 6: { - message.MinResVer = reader.int32(); - break; - } - case 7: { - message.LatestResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterGame} SCEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterGame message. - * @function verify - * @memberof gamehall.SCEnterGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - return null; - }; - - /** - * Creates a SCEnterGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterGame} SCEnterGame - */ - SCEnterGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterGame) - return object; - var message = new $root.gamehall.SCEnterGame(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCEnterGame.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.SCEnterGame} message SCEnterGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Id = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - return object; - }; - - /** - * Converts this SCEnterGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterGame - * @function getTypeUrl - * @memberof gamehall.SCEnterGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterGame"; - }; - - return SCEnterGame; - })(); - - gamehall.CSQuitGame = (function() { - - /** - * Properties of a CSQuitGame. - * @memberof gamehall - * @interface ICSQuitGame - * @property {number|null} [Id] CSQuitGame Id - * @property {boolean|null} [IsAudience] CSQuitGame IsAudience - */ - - /** - * Constructs a new CSQuitGame. - * @memberof gamehall - * @classdesc Represents a CSQuitGame. - * @implements ICSQuitGame - * @constructor - * @param {gamehall.ICSQuitGame=} [properties] Properties to set - */ - function CSQuitGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSQuitGame Id. - * @member {number} Id - * @memberof gamehall.CSQuitGame - * @instance - */ - CSQuitGame.prototype.Id = 0; - - /** - * CSQuitGame IsAudience. - * @member {boolean} IsAudience - * @memberof gamehall.CSQuitGame - * @instance - */ - CSQuitGame.prototype.IsAudience = false; - - /** - * Creates a new CSQuitGame instance using the specified properties. - * @function create - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame=} [properties] Properties to set - * @returns {gamehall.CSQuitGame} CSQuitGame instance - */ - CSQuitGame.create = function create(properties) { - return new CSQuitGame(properties); - }; - - /** - * Encodes the specified CSQuitGame message. Does not implicitly {@link gamehall.CSQuitGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame} message CSQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQuitGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.IsAudience != null && Object.hasOwnProperty.call(message, "IsAudience")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsAudience); - return writer; - }; - - /** - * Encodes the specified CSQuitGame message, length delimited. Does not implicitly {@link gamehall.CSQuitGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame} message CSQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQuitGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSQuitGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSQuitGame} CSQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQuitGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSQuitGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.IsAudience = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSQuitGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSQuitGame} CSQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQuitGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSQuitGame message. - * @function verify - * @memberof gamehall.CSQuitGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSQuitGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.IsAudience != null && message.hasOwnProperty("IsAudience")) - if (typeof message.IsAudience !== "boolean") - return "IsAudience: boolean expected"; - return null; - }; - - /** - * Creates a CSQuitGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSQuitGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSQuitGame} CSQuitGame - */ - CSQuitGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSQuitGame) - return object; - var message = new $root.gamehall.CSQuitGame(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.IsAudience != null) - message.IsAudience = Boolean(object.IsAudience); - return message; - }; - - /** - * Creates a plain object from a CSQuitGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.CSQuitGame} message CSQuitGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSQuitGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.IsAudience = false; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.IsAudience != null && message.hasOwnProperty("IsAudience")) - object.IsAudience = message.IsAudience; - return object; - }; - - /** - * Converts this CSQuitGame to JSON. - * @function toJSON - * @memberof gamehall.CSQuitGame - * @instance - * @returns {Object.} JSON object - */ - CSQuitGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSQuitGame - * @function getTypeUrl - * @memberof gamehall.CSQuitGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSQuitGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSQuitGame"; - }; - - return CSQuitGame; - })(); - - gamehall.SCQuitGame = (function() { - - /** - * Properties of a SCQuitGame. - * @memberof gamehall - * @interface ISCQuitGame - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCQuitGame OpCode - * @property {number|null} [Id] SCQuitGame Id - * @property {number|null} [Reason] SCQuitGame Reason - */ - - /** - * Constructs a new SCQuitGame. - * @memberof gamehall - * @classdesc Represents a SCQuitGame. - * @implements ISCQuitGame - * @constructor - * @param {gamehall.ISCQuitGame=} [properties] Properties to set - */ - function SCQuitGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCQuitGame OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.OpCode = 0; - - /** - * SCQuitGame Id. - * @member {number} Id - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.Id = 0; - - /** - * SCQuitGame Reason. - * @member {number} Reason - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.Reason = 0; - - /** - * Creates a new SCQuitGame instance using the specified properties. - * @function create - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame=} [properties] Properties to set - * @returns {gamehall.SCQuitGame} SCQuitGame instance - */ - SCQuitGame.create = function create(properties) { - return new SCQuitGame(properties); - }; - - /** - * Encodes the specified SCQuitGame message. Does not implicitly {@link gamehall.SCQuitGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame} message SCQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQuitGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.Reason != null && Object.hasOwnProperty.call(message, "Reason")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Reason); - return writer; - }; - - /** - * Encodes the specified SCQuitGame message, length delimited. Does not implicitly {@link gamehall.SCQuitGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame} message SCQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQuitGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCQuitGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCQuitGame} SCQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQuitGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCQuitGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.Reason = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCQuitGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCQuitGame} SCQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQuitGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCQuitGame message. - * @function verify - * @memberof gamehall.SCQuitGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCQuitGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Reason != null && message.hasOwnProperty("Reason")) - if (!$util.isInteger(message.Reason)) - return "Reason: integer expected"; - return null; - }; - - /** - * Creates a SCQuitGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCQuitGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCQuitGame} SCQuitGame - */ - SCQuitGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCQuitGame) - return object; - var message = new $root.gamehall.SCQuitGame(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Reason != null) - message.Reason = object.Reason | 0; - return message; - }; - - /** - * Creates a plain object from a SCQuitGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.SCQuitGame} message SCQuitGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCQuitGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Id = 0; - object.Reason = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Reason != null && message.hasOwnProperty("Reason")) - object.Reason = message.Reason; - return object; - }; - - /** - * Converts this SCQuitGame to JSON. - * @function toJSON - * @memberof gamehall.SCQuitGame - * @instance - * @returns {Object.} JSON object - */ - SCQuitGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCQuitGame - * @function getTypeUrl - * @memberof gamehall.SCQuitGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCQuitGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCQuitGame"; - }; - - return SCQuitGame; - })(); - - gamehall.CSUploadLoc = (function() { - - /** - * Properties of a CSUploadLoc. - * @memberof gamehall - * @interface ICSUploadLoc - * @property {number|null} [Longitude] CSUploadLoc Longitude - * @property {number|null} [Latitude] CSUploadLoc Latitude - * @property {string|null} [City] CSUploadLoc City - */ - - /** - * Constructs a new CSUploadLoc. - * @memberof gamehall - * @classdesc Represents a CSUploadLoc. - * @implements ICSUploadLoc - * @constructor - * @param {gamehall.ICSUploadLoc=} [properties] Properties to set - */ - function CSUploadLoc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSUploadLoc Longitude. - * @member {number} Longitude - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.Longitude = 0; - - /** - * CSUploadLoc Latitude. - * @member {number} Latitude - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.Latitude = 0; - - /** - * CSUploadLoc City. - * @member {string} City - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.City = ""; - - /** - * Creates a new CSUploadLoc instance using the specified properties. - * @function create - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc=} [properties] Properties to set - * @returns {gamehall.CSUploadLoc} CSUploadLoc instance - */ - CSUploadLoc.create = function create(properties) { - return new CSUploadLoc(properties); - }; - - /** - * Encodes the specified CSUploadLoc message. Does not implicitly {@link gamehall.CSUploadLoc.verify|verify} messages. - * @function encode - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc} message CSUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSUploadLoc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Longitude != null && Object.hasOwnProperty.call(message, "Longitude")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Longitude); - if (message.Latitude != null && Object.hasOwnProperty.call(message, "Latitude")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Latitude); - if (message.City != null && Object.hasOwnProperty.call(message, "City")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.City); - return writer; - }; - - /** - * Encodes the specified CSUploadLoc message, length delimited. Does not implicitly {@link gamehall.CSUploadLoc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc} message CSUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSUploadLoc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSUploadLoc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSUploadLoc} CSUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSUploadLoc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSUploadLoc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Longitude = reader.int32(); - break; - } - case 2: { - message.Latitude = reader.int32(); - break; - } - case 3: { - message.City = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSUploadLoc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSUploadLoc} CSUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSUploadLoc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSUploadLoc message. - * @function verify - * @memberof gamehall.CSUploadLoc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSUploadLoc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - if (!$util.isInteger(message.Longitude)) - return "Longitude: integer expected"; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - if (!$util.isInteger(message.Latitude)) - return "Latitude: integer expected"; - if (message.City != null && message.hasOwnProperty("City")) - if (!$util.isString(message.City)) - return "City: string expected"; - return null; - }; - - /** - * Creates a CSUploadLoc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSUploadLoc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSUploadLoc} CSUploadLoc - */ - CSUploadLoc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSUploadLoc) - return object; - var message = new $root.gamehall.CSUploadLoc(); - if (object.Longitude != null) - message.Longitude = object.Longitude | 0; - if (object.Latitude != null) - message.Latitude = object.Latitude | 0; - if (object.City != null) - message.City = String(object.City); - return message; - }; - - /** - * Creates a plain object from a CSUploadLoc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.CSUploadLoc} message CSUploadLoc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSUploadLoc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Longitude = 0; - object.Latitude = 0; - object.City = ""; - } - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - object.Longitude = message.Longitude; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - object.Latitude = message.Latitude; - if (message.City != null && message.hasOwnProperty("City")) - object.City = message.City; - return object; - }; - - /** - * Converts this CSUploadLoc to JSON. - * @function toJSON - * @memberof gamehall.CSUploadLoc - * @instance - * @returns {Object.} JSON object - */ - CSUploadLoc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSUploadLoc - * @function getTypeUrl - * @memberof gamehall.CSUploadLoc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSUploadLoc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSUploadLoc"; - }; - - return CSUploadLoc; - })(); - - gamehall.SCUploadLoc = (function() { - - /** - * Properties of a SCUploadLoc. - * @memberof gamehall - * @interface ISCUploadLoc - * @property {number|null} [Pos] SCUploadLoc Pos - * @property {number|null} [Longitude] SCUploadLoc Longitude - * @property {number|null} [Latitude] SCUploadLoc Latitude - * @property {string|null} [City] SCUploadLoc City - */ - - /** - * Constructs a new SCUploadLoc. - * @memberof gamehall - * @classdesc Represents a SCUploadLoc. - * @implements ISCUploadLoc - * @constructor - * @param {gamehall.ISCUploadLoc=} [properties] Properties to set - */ - function SCUploadLoc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCUploadLoc Pos. - * @member {number} Pos - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Pos = 0; - - /** - * SCUploadLoc Longitude. - * @member {number} Longitude - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Longitude = 0; - - /** - * SCUploadLoc Latitude. - * @member {number} Latitude - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Latitude = 0; - - /** - * SCUploadLoc City. - * @member {string} City - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.City = ""; - - /** - * Creates a new SCUploadLoc instance using the specified properties. - * @function create - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc=} [properties] Properties to set - * @returns {gamehall.SCUploadLoc} SCUploadLoc instance - */ - SCUploadLoc.create = function create(properties) { - return new SCUploadLoc(properties); - }; - - /** - * Encodes the specified SCUploadLoc message. Does not implicitly {@link gamehall.SCUploadLoc.verify|verify} messages. - * @function encode - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc} message SCUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCUploadLoc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Pos); - if (message.Longitude != null && Object.hasOwnProperty.call(message, "Longitude")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Longitude); - if (message.Latitude != null && Object.hasOwnProperty.call(message, "Latitude")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Latitude); - if (message.City != null && Object.hasOwnProperty.call(message, "City")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.City); - return writer; - }; - - /** - * Encodes the specified SCUploadLoc message, length delimited. Does not implicitly {@link gamehall.SCUploadLoc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc} message SCUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCUploadLoc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCUploadLoc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCUploadLoc} SCUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCUploadLoc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCUploadLoc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Pos = reader.int32(); - break; - } - case 2: { - message.Longitude = reader.int32(); - break; - } - case 3: { - message.Latitude = reader.int32(); - break; - } - case 4: { - message.City = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCUploadLoc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCUploadLoc} SCUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCUploadLoc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCUploadLoc message. - * @function verify - * @memberof gamehall.SCUploadLoc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCUploadLoc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - if (!$util.isInteger(message.Longitude)) - return "Longitude: integer expected"; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - if (!$util.isInteger(message.Latitude)) - return "Latitude: integer expected"; - if (message.City != null && message.hasOwnProperty("City")) - if (!$util.isString(message.City)) - return "City: string expected"; - return null; - }; - - /** - * Creates a SCUploadLoc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCUploadLoc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCUploadLoc} SCUploadLoc - */ - SCUploadLoc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCUploadLoc) - return object; - var message = new $root.gamehall.SCUploadLoc(); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Longitude != null) - message.Longitude = object.Longitude | 0; - if (object.Latitude != null) - message.Latitude = object.Latitude | 0; - if (object.City != null) - message.City = String(object.City); - return message; - }; - - /** - * Creates a plain object from a SCUploadLoc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.SCUploadLoc} message SCUploadLoc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCUploadLoc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Pos = 0; - object.Longitude = 0; - object.Latitude = 0; - object.City = ""; - } - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - object.Longitude = message.Longitude; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - object.Latitude = message.Latitude; - if (message.City != null && message.hasOwnProperty("City")) - object.City = message.City; - return object; - }; - - /** - * Converts this SCUploadLoc to JSON. - * @function toJSON - * @memberof gamehall.SCUploadLoc - * @instance - * @returns {Object.} JSON object - */ - SCUploadLoc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCUploadLoc - * @function getTypeUrl - * @memberof gamehall.SCUploadLoc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCUploadLoc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCUploadLoc"; - }; - - return SCUploadLoc; - })(); - - gamehall.CSAudienceSit = (function() { - - /** - * Properties of a CSAudienceSit. - * @memberof gamehall - * @interface ICSAudienceSit - * @property {number|null} [RoomId] CSAudienceSit RoomId - */ - - /** - * Constructs a new CSAudienceSit. - * @memberof gamehall - * @classdesc Represents a CSAudienceSit. - * @implements ICSAudienceSit - * @constructor - * @param {gamehall.ICSAudienceSit=} [properties] Properties to set - */ - function CSAudienceSit(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSAudienceSit RoomId. - * @member {number} RoomId - * @memberof gamehall.CSAudienceSit - * @instance - */ - CSAudienceSit.prototype.RoomId = 0; - - /** - * Creates a new CSAudienceSit instance using the specified properties. - * @function create - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit=} [properties] Properties to set - * @returns {gamehall.CSAudienceSit} CSAudienceSit instance - */ - CSAudienceSit.create = function create(properties) { - return new CSAudienceSit(properties); - }; - - /** - * Encodes the specified CSAudienceSit message. Does not implicitly {@link gamehall.CSAudienceSit.verify|verify} messages. - * @function encode - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit} message CSAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSAudienceSit.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSAudienceSit message, length delimited. Does not implicitly {@link gamehall.CSAudienceSit.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit} message CSAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSAudienceSit.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSAudienceSit message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSAudienceSit} CSAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSAudienceSit.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSAudienceSit(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSAudienceSit message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSAudienceSit} CSAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSAudienceSit.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSAudienceSit message. - * @function verify - * @memberof gamehall.CSAudienceSit - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSAudienceSit.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSAudienceSit message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSAudienceSit - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSAudienceSit} CSAudienceSit - */ - CSAudienceSit.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSAudienceSit) - return object; - var message = new $root.gamehall.CSAudienceSit(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSAudienceSit message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.CSAudienceSit} message CSAudienceSit - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSAudienceSit.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.RoomId = 0; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSAudienceSit to JSON. - * @function toJSON - * @memberof gamehall.CSAudienceSit - * @instance - * @returns {Object.} JSON object - */ - CSAudienceSit.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSAudienceSit - * @function getTypeUrl - * @memberof gamehall.CSAudienceSit - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSAudienceSit.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSAudienceSit"; - }; - - return CSAudienceSit; - })(); - - gamehall.SCAudienceSit = (function() { - - /** - * Properties of a SCAudienceSit. - * @memberof gamehall - * @interface ISCAudienceSit - * @property {number|null} [RoomId] SCAudienceSit RoomId - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCAudienceSit OpCode - */ - - /** - * Constructs a new SCAudienceSit. - * @memberof gamehall - * @classdesc Represents a SCAudienceSit. - * @implements ISCAudienceSit - * @constructor - * @param {gamehall.ISCAudienceSit=} [properties] Properties to set - */ - function SCAudienceSit(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCAudienceSit RoomId. - * @member {number} RoomId - * @memberof gamehall.SCAudienceSit - * @instance - */ - SCAudienceSit.prototype.RoomId = 0; - - /** - * SCAudienceSit OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCAudienceSit - * @instance - */ - SCAudienceSit.prototype.OpCode = 0; - - /** - * Creates a new SCAudienceSit instance using the specified properties. - * @function create - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit=} [properties] Properties to set - * @returns {gamehall.SCAudienceSit} SCAudienceSit instance - */ - SCAudienceSit.create = function create(properties) { - return new SCAudienceSit(properties); - }; - - /** - * Encodes the specified SCAudienceSit message. Does not implicitly {@link gamehall.SCAudienceSit.verify|verify} messages. - * @function encode - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit} message SCAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCAudienceSit.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpCode); - return writer; - }; - - /** - * Encodes the specified SCAudienceSit message, length delimited. Does not implicitly {@link gamehall.SCAudienceSit.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit} message SCAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCAudienceSit.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCAudienceSit message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCAudienceSit} SCAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCAudienceSit.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCAudienceSit(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCAudienceSit message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCAudienceSit} SCAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCAudienceSit.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCAudienceSit message. - * @function verify - * @memberof gamehall.SCAudienceSit - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCAudienceSit.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCAudienceSit message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCAudienceSit - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCAudienceSit} SCAudienceSit - */ - SCAudienceSit.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCAudienceSit) - return object; - var message = new $root.gamehall.SCAudienceSit(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCAudienceSit message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.SCAudienceSit} message SCAudienceSit - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCAudienceSit.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - return object; - }; - - /** - * Converts this SCAudienceSit to JSON. - * @function toJSON - * @memberof gamehall.SCAudienceSit - * @instance - * @returns {Object.} JSON object - */ - SCAudienceSit.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCAudienceSit - * @function getTypeUrl - * @memberof gamehall.SCAudienceSit - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCAudienceSit.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCAudienceSit"; - }; - - return SCAudienceSit; - })(); - - gamehall.CSRecordAndNotice = (function() { - - /** - * Properties of a CSRecordAndNotice. - * @memberof gamehall - * @interface ICSRecordAndNotice - * @property {number|null} [PageNo] CSRecordAndNotice PageNo - * @property {number|null} [PageSize] CSRecordAndNotice PageSize - * @property {number|null} [Opt] CSRecordAndNotice Opt - * @property {number|Long|null} [StartTime] CSRecordAndNotice StartTime - */ - - /** - * Constructs a new CSRecordAndNotice. - * @memberof gamehall - * @classdesc Represents a CSRecordAndNotice. - * @implements ICSRecordAndNotice - * @constructor - * @param {gamehall.ICSRecordAndNotice=} [properties] Properties to set - */ - function CSRecordAndNotice(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSRecordAndNotice PageNo. - * @member {number} PageNo - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.PageNo = 0; - - /** - * CSRecordAndNotice PageSize. - * @member {number} PageSize - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.PageSize = 0; - - /** - * CSRecordAndNotice Opt. - * @member {number} Opt - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.Opt = 0; - - /** - * CSRecordAndNotice StartTime. - * @member {number|Long} StartTime - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.StartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSRecordAndNotice instance using the specified properties. - * @function create - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice=} [properties] Properties to set - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice instance - */ - CSRecordAndNotice.create = function create(properties) { - return new CSRecordAndNotice(properties); - }; - - /** - * Encodes the specified CSRecordAndNotice message. Does not implicitly {@link gamehall.CSRecordAndNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice} message CSRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRecordAndNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageSize); - if (message.Opt != null && Object.hasOwnProperty.call(message, "Opt")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Opt); - if (message.StartTime != null && Object.hasOwnProperty.call(message, "StartTime")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.StartTime); - return writer; - }; - - /** - * Encodes the specified CSRecordAndNotice message, length delimited. Does not implicitly {@link gamehall.CSRecordAndNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice} message CSRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRecordAndNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSRecordAndNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRecordAndNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSRecordAndNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.PageNo = reader.int32(); - break; - } - case 2: { - message.PageSize = reader.int32(); - break; - } - case 3: { - message.Opt = reader.int32(); - break; - } - case 4: { - message.StartTime = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSRecordAndNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRecordAndNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSRecordAndNotice message. - * @function verify - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSRecordAndNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.Opt != null && message.hasOwnProperty("Opt")) - if (!$util.isInteger(message.Opt)) - return "Opt: integer expected"; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (!$util.isInteger(message.StartTime) && !(message.StartTime && $util.isInteger(message.StartTime.low) && $util.isInteger(message.StartTime.high))) - return "StartTime: integer|Long expected"; - return null; - }; - - /** - * Creates a CSRecordAndNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - */ - CSRecordAndNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSRecordAndNotice) - return object; - var message = new $root.gamehall.CSRecordAndNotice(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.Opt != null) - message.Opt = object.Opt | 0; - if (object.StartTime != null) - if ($util.Long) - (message.StartTime = $util.Long.fromValue(object.StartTime)).unsigned = false; - else if (typeof object.StartTime === "string") - message.StartTime = parseInt(object.StartTime, 10); - else if (typeof object.StartTime === "number") - message.StartTime = object.StartTime; - else if (typeof object.StartTime === "object") - message.StartTime = new $util.LongBits(object.StartTime.low >>> 0, object.StartTime.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSRecordAndNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.CSRecordAndNotice} message CSRecordAndNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSRecordAndNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.Opt = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.StartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.StartTime = options.longs === String ? "0" : 0; - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.Opt != null && message.hasOwnProperty("Opt")) - object.Opt = message.Opt; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (typeof message.StartTime === "number") - object.StartTime = options.longs === String ? String(message.StartTime) : message.StartTime; - else - object.StartTime = options.longs === String ? $util.Long.prototype.toString.call(message.StartTime) : options.longs === Number ? new $util.LongBits(message.StartTime.low >>> 0, message.StartTime.high >>> 0).toNumber() : message.StartTime; - return object; - }; - - /** - * Converts this CSRecordAndNotice to JSON. - * @function toJSON - * @memberof gamehall.CSRecordAndNotice - * @instance - * @returns {Object.} JSON object - */ - CSRecordAndNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSRecordAndNotice - * @function getTypeUrl - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSRecordAndNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSRecordAndNotice"; - }; - - return CSRecordAndNotice; - })(); - - gamehall.CommonNotice = (function() { - - /** - * Properties of a CommonNotice. - * @memberof gamehall - * @interface ICommonNotice - * @property {number|null} [Sort] CommonNotice Sort - * @property {string|null} [Title] CommonNotice Title - * @property {string|null} [Content] CommonNotice Content - * @property {string|null} [TypeName] CommonNotice TypeName - * @property {number|null} [Type] CommonNotice Type - * @property {number|null} [StartTime] CommonNotice StartTime - * @property {number|null} [EndTime] CommonNotice EndTime - * @property {string|null} [Platform] CommonNotice Platform - */ - - /** - * Constructs a new CommonNotice. - * @memberof gamehall - * @classdesc Represents a CommonNotice. - * @implements ICommonNotice - * @constructor - * @param {gamehall.ICommonNotice=} [properties] Properties to set - */ - function CommonNotice(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CommonNotice Sort. - * @member {number} Sort - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Sort = 0; - - /** - * CommonNotice Title. - * @member {string} Title - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Title = ""; - - /** - * CommonNotice Content. - * @member {string} Content - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Content = ""; - - /** - * CommonNotice TypeName. - * @member {string} TypeName - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.TypeName = ""; - - /** - * CommonNotice Type. - * @member {number} Type - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Type = 0; - - /** - * CommonNotice StartTime. - * @member {number} StartTime - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.StartTime = 0; - - /** - * CommonNotice EndTime. - * @member {number} EndTime - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.EndTime = 0; - - /** - * CommonNotice Platform. - * @member {string} Platform - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Platform = ""; - - /** - * Creates a new CommonNotice instance using the specified properties. - * @function create - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice=} [properties] Properties to set - * @returns {gamehall.CommonNotice} CommonNotice instance - */ - CommonNotice.create = function create(properties) { - return new CommonNotice(properties); - }; - - /** - * Encodes the specified CommonNotice message. Does not implicitly {@link gamehall.CommonNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice} message CommonNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CommonNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Sort != null && Object.hasOwnProperty.call(message, "Sort")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Sort); - if (message.Title != null && Object.hasOwnProperty.call(message, "Title")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Title); - if (message.Content != null && Object.hasOwnProperty.call(message, "Content")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Content); - if (message.TypeName != null && Object.hasOwnProperty.call(message, "TypeName")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.TypeName); - if (message.Type != null && Object.hasOwnProperty.call(message, "Type")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Type); - if (message.StartTime != null && Object.hasOwnProperty.call(message, "StartTime")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.StartTime); - if (message.EndTime != null && Object.hasOwnProperty.call(message, "EndTime")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.EndTime); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.Platform); - return writer; - }; - - /** - * Encodes the specified CommonNotice message, length delimited. Does not implicitly {@link gamehall.CommonNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice} message CommonNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CommonNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CommonNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CommonNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CommonNotice} CommonNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CommonNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CommonNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Sort = reader.int32(); - break; - } - case 2: { - message.Title = reader.string(); - break; - } - case 3: { - message.Content = reader.string(); - break; - } - case 4: { - message.TypeName = reader.string(); - break; - } - case 5: { - message.Type = reader.int32(); - break; - } - case 6: { - message.StartTime = reader.int32(); - break; - } - case 7: { - message.EndTime = reader.int32(); - break; - } - case 8: { - message.Platform = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CommonNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CommonNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CommonNotice} CommonNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CommonNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CommonNotice message. - * @function verify - * @memberof gamehall.CommonNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CommonNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Sort != null && message.hasOwnProperty("Sort")) - if (!$util.isInteger(message.Sort)) - return "Sort: integer expected"; - if (message.Title != null && message.hasOwnProperty("Title")) - if (!$util.isString(message.Title)) - return "Title: string expected"; - if (message.Content != null && message.hasOwnProperty("Content")) - if (!$util.isString(message.Content)) - return "Content: string expected"; - if (message.TypeName != null && message.hasOwnProperty("TypeName")) - if (!$util.isString(message.TypeName)) - return "TypeName: string expected"; - if (message.Type != null && message.hasOwnProperty("Type")) - if (!$util.isInteger(message.Type)) - return "Type: integer expected"; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (!$util.isInteger(message.StartTime)) - return "StartTime: integer expected"; - if (message.EndTime != null && message.hasOwnProperty("EndTime")) - if (!$util.isInteger(message.EndTime)) - return "EndTime: integer expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - return null; - }; - - /** - * Creates a CommonNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CommonNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CommonNotice} CommonNotice - */ - CommonNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CommonNotice) - return object; - var message = new $root.gamehall.CommonNotice(); - if (object.Sort != null) - message.Sort = object.Sort | 0; - if (object.Title != null) - message.Title = String(object.Title); - if (object.Content != null) - message.Content = String(object.Content); - if (object.TypeName != null) - message.TypeName = String(object.TypeName); - if (object.Type != null) - message.Type = object.Type | 0; - if (object.StartTime != null) - message.StartTime = object.StartTime | 0; - if (object.EndTime != null) - message.EndTime = object.EndTime | 0; - if (object.Platform != null) - message.Platform = String(object.Platform); - return message; - }; - - /** - * Creates a plain object from a CommonNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.CommonNotice} message CommonNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CommonNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Sort = 0; - object.Title = ""; - object.Content = ""; - object.TypeName = ""; - object.Type = 0; - object.StartTime = 0; - object.EndTime = 0; - object.Platform = ""; - } - if (message.Sort != null && message.hasOwnProperty("Sort")) - object.Sort = message.Sort; - if (message.Title != null && message.hasOwnProperty("Title")) - object.Title = message.Title; - if (message.Content != null && message.hasOwnProperty("Content")) - object.Content = message.Content; - if (message.TypeName != null && message.hasOwnProperty("TypeName")) - object.TypeName = message.TypeName; - if (message.Type != null && message.hasOwnProperty("Type")) - object.Type = message.Type; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - object.StartTime = message.StartTime; - if (message.EndTime != null && message.hasOwnProperty("EndTime")) - object.EndTime = message.EndTime; - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - return object; - }; - - /** - * Converts this CommonNotice to JSON. - * @function toJSON - * @memberof gamehall.CommonNotice - * @instance - * @returns {Object.} JSON object - */ - CommonNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CommonNotice - * @function getTypeUrl - * @memberof gamehall.CommonNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CommonNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CommonNotice"; - }; - - return CommonNotice; - })(); - - gamehall.PlayerRecord = (function() { - - /** - * Properties of a PlayerRecord. - * @memberof gamehall - * @interface IPlayerRecord - * @property {number|null} [GameFreeid] PlayerRecord GameFreeid - * @property {string|null} [GameDetailedLogId] PlayerRecord GameDetailedLogId - * @property {number|Long|null} [TotalIn] PlayerRecord TotalIn - * @property {number|Long|null} [TotalOut] PlayerRecord TotalOut - * @property {number|null} [Ts] PlayerRecord Ts - * @property {number|null} [MatchType] PlayerRecord MatchType - */ - - /** - * Constructs a new PlayerRecord. - * @memberof gamehall - * @classdesc Represents a PlayerRecord. - * @implements IPlayerRecord - * @constructor - * @param {gamehall.IPlayerRecord=} [properties] Properties to set - */ - function PlayerRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerRecord GameFreeid. - * @member {number} GameFreeid - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.GameFreeid = 0; - - /** - * PlayerRecord GameDetailedLogId. - * @member {string} GameDetailedLogId - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.GameDetailedLogId = ""; - - /** - * PlayerRecord TotalIn. - * @member {number|Long} TotalIn - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.TotalIn = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerRecord TotalOut. - * @member {number|Long} TotalOut - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.TotalOut = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerRecord Ts. - * @member {number} Ts - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.Ts = 0; - - /** - * PlayerRecord MatchType. - * @member {number} MatchType - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.MatchType = 0; - - /** - * Creates a new PlayerRecord instance using the specified properties. - * @function create - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord=} [properties] Properties to set - * @returns {gamehall.PlayerRecord} PlayerRecord instance - */ - PlayerRecord.create = function create(properties) { - return new PlayerRecord(properties); - }; - - /** - * Encodes the specified PlayerRecord message. Does not implicitly {@link gamehall.PlayerRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord} message PlayerRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeid != null && Object.hasOwnProperty.call(message, "GameFreeid")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeid); - if (message.GameDetailedLogId != null && Object.hasOwnProperty.call(message, "GameDetailedLogId")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameDetailedLogId); - if (message.TotalIn != null && Object.hasOwnProperty.call(message, "TotalIn")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalIn); - if (message.TotalOut != null && Object.hasOwnProperty.call(message, "TotalOut")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalOut); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Ts); - if (message.MatchType != null && Object.hasOwnProperty.call(message, "MatchType")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MatchType); - return writer; - }; - - /** - * Encodes the specified PlayerRecord message, length delimited. Does not implicitly {@link gamehall.PlayerRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord} message PlayerRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerRecord} PlayerRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeid = reader.int32(); - break; - } - case 2: { - message.GameDetailedLogId = reader.string(); - break; - } - case 3: { - message.TotalIn = reader.int64(); - break; - } - case 4: { - message.TotalOut = reader.int64(); - break; - } - case 5: { - message.Ts = reader.int32(); - break; - } - case 6: { - message.MatchType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerRecord} PlayerRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerRecord message. - * @function verify - * @memberof gamehall.PlayerRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeid != null && message.hasOwnProperty("GameFreeid")) - if (!$util.isInteger(message.GameFreeid)) - return "GameFreeid: integer expected"; - if (message.GameDetailedLogId != null && message.hasOwnProperty("GameDetailedLogId")) - if (!$util.isString(message.GameDetailedLogId)) - return "GameDetailedLogId: string expected"; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (!$util.isInteger(message.TotalIn) && !(message.TotalIn && $util.isInteger(message.TotalIn.low) && $util.isInteger(message.TotalIn.high))) - return "TotalIn: integer|Long expected"; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (!$util.isInteger(message.TotalOut) && !(message.TotalOut && $util.isInteger(message.TotalOut.low) && $util.isInteger(message.TotalOut.high))) - return "TotalOut: integer|Long expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts)) - return "Ts: integer expected"; - if (message.MatchType != null && message.hasOwnProperty("MatchType")) - if (!$util.isInteger(message.MatchType)) - return "MatchType: integer expected"; - return null; - }; - - /** - * Creates a PlayerRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerRecord} PlayerRecord - */ - PlayerRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerRecord) - return object; - var message = new $root.gamehall.PlayerRecord(); - if (object.GameFreeid != null) - message.GameFreeid = object.GameFreeid | 0; - if (object.GameDetailedLogId != null) - message.GameDetailedLogId = String(object.GameDetailedLogId); - if (object.TotalIn != null) - if ($util.Long) - (message.TotalIn = $util.Long.fromValue(object.TotalIn)).unsigned = false; - else if (typeof object.TotalIn === "string") - message.TotalIn = parseInt(object.TotalIn, 10); - else if (typeof object.TotalIn === "number") - message.TotalIn = object.TotalIn; - else if (typeof object.TotalIn === "object") - message.TotalIn = new $util.LongBits(object.TotalIn.low >>> 0, object.TotalIn.high >>> 0).toNumber(); - if (object.TotalOut != null) - if ($util.Long) - (message.TotalOut = $util.Long.fromValue(object.TotalOut)).unsigned = false; - else if (typeof object.TotalOut === "string") - message.TotalOut = parseInt(object.TotalOut, 10); - else if (typeof object.TotalOut === "number") - message.TotalOut = object.TotalOut; - else if (typeof object.TotalOut === "object") - message.TotalOut = new $util.LongBits(object.TotalOut.low >>> 0, object.TotalOut.high >>> 0).toNumber(); - if (object.Ts != null) - message.Ts = object.Ts | 0; - if (object.MatchType != null) - message.MatchType = object.MatchType | 0; - return message; - }; - - /** - * Creates a plain object from a PlayerRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.PlayerRecord} message PlayerRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeid = 0; - object.GameDetailedLogId = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalIn = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalIn = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalOut = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalOut = options.longs === String ? "0" : 0; - object.Ts = 0; - object.MatchType = 0; - } - if (message.GameFreeid != null && message.hasOwnProperty("GameFreeid")) - object.GameFreeid = message.GameFreeid; - if (message.GameDetailedLogId != null && message.hasOwnProperty("GameDetailedLogId")) - object.GameDetailedLogId = message.GameDetailedLogId; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (typeof message.TotalIn === "number") - object.TotalIn = options.longs === String ? String(message.TotalIn) : message.TotalIn; - else - object.TotalIn = options.longs === String ? $util.Long.prototype.toString.call(message.TotalIn) : options.longs === Number ? new $util.LongBits(message.TotalIn.low >>> 0, message.TotalIn.high >>> 0).toNumber() : message.TotalIn; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (typeof message.TotalOut === "number") - object.TotalOut = options.longs === String ? String(message.TotalOut) : message.TotalOut; - else - object.TotalOut = options.longs === String ? $util.Long.prototype.toString.call(message.TotalOut) : options.longs === Number ? new $util.LongBits(message.TotalOut.low >>> 0, message.TotalOut.high >>> 0).toNumber() : message.TotalOut; - if (message.Ts != null && message.hasOwnProperty("Ts")) - object.Ts = message.Ts; - if (message.MatchType != null && message.hasOwnProperty("MatchType")) - object.MatchType = message.MatchType; - return object; - }; - - /** - * Converts this PlayerRecord to JSON. - * @function toJSON - * @memberof gamehall.PlayerRecord - * @instance - * @returns {Object.} JSON object - */ - PlayerRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerRecord - * @function getTypeUrl - * @memberof gamehall.PlayerRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerRecord"; - }; - - return PlayerRecord; - })(); - - gamehall.SCRecordAndNotice = (function() { - - /** - * Properties of a SCRecordAndNotice. - * @memberof gamehall - * @interface ISCRecordAndNotice - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCRecordAndNotice OpCode - * @property {Array.|null} [List] SCRecordAndNotice List - * @property {Array.|null} [Glist] SCRecordAndNotice Glist - * @property {Array.|null} [GlistTs] SCRecordAndNotice GlistTs - */ - - /** - * Constructs a new SCRecordAndNotice. - * @memberof gamehall - * @classdesc Represents a SCRecordAndNotice. - * @implements ISCRecordAndNotice - * @constructor - * @param {gamehall.ISCRecordAndNotice=} [properties] Properties to set - */ - function SCRecordAndNotice(properties) { - this.List = []; - this.Glist = []; - this.GlistTs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRecordAndNotice OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.OpCode = 0; - - /** - * SCRecordAndNotice List. - * @member {Array.} List - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.List = $util.emptyArray; - - /** - * SCRecordAndNotice Glist. - * @member {Array.} Glist - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.Glist = $util.emptyArray; - - /** - * SCRecordAndNotice GlistTs. - * @member {Array.} GlistTs - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.GlistTs = $util.emptyArray; - - /** - * Creates a new SCRecordAndNotice instance using the specified properties. - * @function create - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice=} [properties] Properties to set - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice instance - */ - SCRecordAndNotice.create = function create(properties) { - return new SCRecordAndNotice(properties); - }; - - /** - * Encodes the specified SCRecordAndNotice message. Does not implicitly {@link gamehall.SCRecordAndNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice} message SCRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRecordAndNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.CommonNotice.encode(message.List[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.Glist != null && message.Glist.length) - for (var i = 0; i < message.Glist.length; ++i) - $root.gamehall.PlayerRecord.encode(message.Glist[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.GlistTs != null && message.GlistTs.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.GlistTs.length; ++i) - writer.int64(message.GlistTs[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCRecordAndNotice message, length delimited. Does not implicitly {@link gamehall.SCRecordAndNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice} message SCRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRecordAndNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRecordAndNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRecordAndNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRecordAndNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.CommonNotice.decode(reader, reader.uint32())); - break; - } - case 3: { - if (!(message.Glist && message.Glist.length)) - message.Glist = []; - message.Glist.push($root.gamehall.PlayerRecord.decode(reader, reader.uint32())); - break; - } - case 4: { - if (!(message.GlistTs && message.GlistTs.length)) - message.GlistTs = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GlistTs.push(reader.int64()); - } else - message.GlistTs.push(reader.int64()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRecordAndNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRecordAndNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRecordAndNotice message. - * @function verify - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRecordAndNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.CommonNotice.verify(message.List[i]); - if (error) - return "List." + error; - } - } - if (message.Glist != null && message.hasOwnProperty("Glist")) { - if (!Array.isArray(message.Glist)) - return "Glist: array expected"; - for (var i = 0; i < message.Glist.length; ++i) { - var error = $root.gamehall.PlayerRecord.verify(message.Glist[i]); - if (error) - return "Glist." + error; - } - } - if (message.GlistTs != null && message.hasOwnProperty("GlistTs")) { - if (!Array.isArray(message.GlistTs)) - return "GlistTs: array expected"; - for (var i = 0; i < message.GlistTs.length; ++i) - if (!$util.isInteger(message.GlistTs[i]) && !(message.GlistTs[i] && $util.isInteger(message.GlistTs[i].low) && $util.isInteger(message.GlistTs[i].high))) - return "GlistTs: integer|Long[] expected"; - } - return null; - }; - - /** - * Creates a SCRecordAndNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - */ - SCRecordAndNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRecordAndNotice) - return object; - var message = new $root.gamehall.SCRecordAndNotice(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCRecordAndNotice.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCRecordAndNotice.List: object expected"); - message.List[i] = $root.gamehall.CommonNotice.fromObject(object.List[i]); - } - } - if (object.Glist) { - if (!Array.isArray(object.Glist)) - throw TypeError(".gamehall.SCRecordAndNotice.Glist: array expected"); - message.Glist = []; - for (var i = 0; i < object.Glist.length; ++i) { - if (typeof object.Glist[i] !== "object") - throw TypeError(".gamehall.SCRecordAndNotice.Glist: object expected"); - message.Glist[i] = $root.gamehall.PlayerRecord.fromObject(object.Glist[i]); - } - } - if (object.GlistTs) { - if (!Array.isArray(object.GlistTs)) - throw TypeError(".gamehall.SCRecordAndNotice.GlistTs: array expected"); - message.GlistTs = []; - for (var i = 0; i < object.GlistTs.length; ++i) - if ($util.Long) - (message.GlistTs[i] = $util.Long.fromValue(object.GlistTs[i])).unsigned = false; - else if (typeof object.GlistTs[i] === "string") - message.GlistTs[i] = parseInt(object.GlistTs[i], 10); - else if (typeof object.GlistTs[i] === "number") - message.GlistTs[i] = object.GlistTs[i]; - else if (typeof object.GlistTs[i] === "object") - message.GlistTs[i] = new $util.LongBits(object.GlistTs[i].low >>> 0, object.GlistTs[i].high >>> 0).toNumber(); - } - return message; - }; - - /** - * Creates a plain object from a SCRecordAndNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.SCRecordAndNotice} message SCRecordAndNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRecordAndNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.List = []; - object.Glist = []; - object.GlistTs = []; - } - if (options.defaults) - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.CommonNotice.toObject(message.List[j], options); - } - if (message.Glist && message.Glist.length) { - object.Glist = []; - for (var j = 0; j < message.Glist.length; ++j) - object.Glist[j] = $root.gamehall.PlayerRecord.toObject(message.Glist[j], options); - } - if (message.GlistTs && message.GlistTs.length) { - object.GlistTs = []; - for (var j = 0; j < message.GlistTs.length; ++j) - if (typeof message.GlistTs[j] === "number") - object.GlistTs[j] = options.longs === String ? String(message.GlistTs[j]) : message.GlistTs[j]; - else - object.GlistTs[j] = options.longs === String ? $util.Long.prototype.toString.call(message.GlistTs[j]) : options.longs === Number ? new $util.LongBits(message.GlistTs[j].low >>> 0, message.GlistTs[j].high >>> 0).toNumber() : message.GlistTs[j]; - } - return object; - }; - - /** - * Converts this SCRecordAndNotice to JSON. - * @function toJSON - * @memberof gamehall.SCRecordAndNotice - * @instance - * @returns {Object.} JSON object - */ - SCRecordAndNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRecordAndNotice - * @function getTypeUrl - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRecordAndNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRecordAndNotice"; - }; - - return SCRecordAndNotice; - })(); - - /** - * OpResultCode_Hall enum. - * @name gamehall.OpResultCode_Hall - * @enum {number} - * @property {number} OPRC_Sucess_Hall=0 OPRC_Sucess_Hall value - * @property {number} OPRC_Error_Hall=1 OPRC_Error_Hall value - * @property {number} OPRC_OnlineReward_Info_FindPlatform_Fail_Hall=10008 OPRC_OnlineReward_Info_FindPlatform_Fail_Hall value - */ - gamehall.OpResultCode_Hall = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Hall"] = 0; - values[valuesById[1] = "OPRC_Error_Hall"] = 1; - values[valuesById[10008] = "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall"] = 10008; - return values; - })(); - - /** - * 大厅协议 2340-2379 - * @name gamehall.HallPacketID - * @enum {number} - * @property {number} PACKET_Hall_ZERO=0 PACKET_Hall_ZERO value - * @property {number} PACKET_CS_REBATE_LIST=2340 PACKET_CS_REBATE_LIST value - * @property {number} PACKET_SC_REBATE_LIST=2341 PACKET_SC_REBATE_LIST value - * @property {number} PACKET_CS_REBATE_RECEIVE=2342 PACKET_CS_REBATE_RECEIVE value - * @property {number} PACKET_SC_REBATE_RECEIVE=2343 PACKET_SC_REBATE_RECEIVE value - * @property {number} PACKET_SC_HALL_REDCTRL=2344 PACKET_SC_HALL_REDCTRL value - * @property {number} PACKET_CS_NEWPLAYERINFO=2345 新个人中心 - * @property {number} PACKET_SC_NEWPLAYERINFO=2346 PACKET_SC_NEWPLAYERINFO value - * @property {number} PACKET_CS_CODETYPERECORD=2347 PACKET_CS_CODETYPERECORD value - * @property {number} PACKET_SC_CODETYPERECORD=2348 PACKET_SC_CODETYPERECORD value - * @property {number} PACKET_CS_BETCOINRECORD=2349 PACKET_CS_BETCOINRECORD value - * @property {number} PACKET_SC_BETCOINRECORD=2350 PACKET_SC_BETCOINRECORD value - * @property {number} PACKET_CS_COINDETAILED=2351 PACKET_CS_COINDETAILED value - * @property {number} PACKET_SC_COINDETAILEDTOTAL=2352 PACKET_SC_COINDETAILEDTOTAL value - * @property {number} PACKET_SC_COINTOTAL=2353 PACKET_SC_COINTOTAL value - * @property {number} PACKET_CS_REPORTFORM=2354 PACKET_CS_REPORTFORM value - * @property {number} PACKET_SC_REPORTFORM=2355 PACKET_SC_REPORTFORM value - * @property {number} PACKET_CS_HISTORYRECORD=2356 PACKET_CS_HISTORYRECORD value - * @property {number} PACKET_SC_HISTORYRECORD=2357 PACKET_SC_HISTORYRECORD value - * @property {number} PACKET_CS_RECEIVECODECOIN=2358 PACKET_CS_RECEIVECODECOIN value - * @property {number} PACKET_SC_RECEIVECODECOIN=2359 PACKET_SC_RECEIVECODECOIN value - * @property {number} PACKET_SC_REBATETOTALINFO=2360 PACKET_SC_REBATETOTALINFO value - * @property {number} PACKET_CS_GETISCANREBATE=2362 PACKET_CS_GETISCANREBATE value - * @property {number} PACKET_SC_GETISCANREBATE=2363 PACKET_SC_GETISCANREBATE value - * @property {number} PACKET_CS_GETRANKINFO=2364 PACKET_CS_GETRANKINFO value - * @property {number} PACKET_SC_GETRANKINFO=2365 PACKET_SC_GETRANKINFO value - * @property {number} PACKET_SC_SHOWRED=2366 PACKET_SC_SHOWRED value - */ - gamehall.HallPacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_Hall_ZERO"] = 0; - values[valuesById[2340] = "PACKET_CS_REBATE_LIST"] = 2340; - values[valuesById[2341] = "PACKET_SC_REBATE_LIST"] = 2341; - values[valuesById[2342] = "PACKET_CS_REBATE_RECEIVE"] = 2342; - values[valuesById[2343] = "PACKET_SC_REBATE_RECEIVE"] = 2343; - values[valuesById[2344] = "PACKET_SC_HALL_REDCTRL"] = 2344; - values[valuesById[2345] = "PACKET_CS_NEWPLAYERINFO"] = 2345; - values[valuesById[2346] = "PACKET_SC_NEWPLAYERINFO"] = 2346; - values[valuesById[2347] = "PACKET_CS_CODETYPERECORD"] = 2347; - values[valuesById[2348] = "PACKET_SC_CODETYPERECORD"] = 2348; - values[valuesById[2349] = "PACKET_CS_BETCOINRECORD"] = 2349; - values[valuesById[2350] = "PACKET_SC_BETCOINRECORD"] = 2350; - values[valuesById[2351] = "PACKET_CS_COINDETAILED"] = 2351; - values[valuesById[2352] = "PACKET_SC_COINDETAILEDTOTAL"] = 2352; - values[valuesById[2353] = "PACKET_SC_COINTOTAL"] = 2353; - values[valuesById[2354] = "PACKET_CS_REPORTFORM"] = 2354; - values[valuesById[2355] = "PACKET_SC_REPORTFORM"] = 2355; - values[valuesById[2356] = "PACKET_CS_HISTORYRECORD"] = 2356; - values[valuesById[2357] = "PACKET_SC_HISTORYRECORD"] = 2357; - values[valuesById[2358] = "PACKET_CS_RECEIVECODECOIN"] = 2358; - values[valuesById[2359] = "PACKET_SC_RECEIVECODECOIN"] = 2359; - values[valuesById[2360] = "PACKET_SC_REBATETOTALINFO"] = 2360; - values[valuesById[2362] = "PACKET_CS_GETISCANREBATE"] = 2362; - values[valuesById[2363] = "PACKET_SC_GETISCANREBATE"] = 2363; - values[valuesById[2364] = "PACKET_CS_GETRANKINFO"] = 2364; - values[valuesById[2365] = "PACKET_SC_GETRANKINFO"] = 2365; - values[valuesById[2366] = "PACKET_SC_SHOWRED"] = 2366; - return values; - })(); - - gamehall.RebateInfo = (function() { - - /** - * Properties of a RebateInfo. - * @memberof gamehall - * @interface IRebateInfo - * @property {string|null} [Platform] RebateInfo Platform - * @property {number|Long|null} [validBetTotal] RebateInfo validBetTotal - */ - - /** - * Constructs a new RebateInfo. - * @memberof gamehall - * @classdesc rebatetask - * @implements IRebateInfo - * @constructor - * @param {gamehall.IRebateInfo=} [properties] Properties to set - */ - function RebateInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RebateInfo Platform. - * @member {string} Platform - * @memberof gamehall.RebateInfo - * @instance - */ - RebateInfo.prototype.Platform = ""; - - /** - * RebateInfo validBetTotal. - * @member {number|Long} validBetTotal - * @memberof gamehall.RebateInfo - * @instance - */ - RebateInfo.prototype.validBetTotal = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new RebateInfo instance using the specified properties. - * @function create - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo=} [properties] Properties to set - * @returns {gamehall.RebateInfo} RebateInfo instance - */ - RebateInfo.create = function create(properties) { - return new RebateInfo(properties); - }; - - /** - * Encodes the specified RebateInfo message. Does not implicitly {@link gamehall.RebateInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo} message RebateInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RebateInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Platform); - if (message.validBetTotal != null && Object.hasOwnProperty.call(message, "validBetTotal")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.validBetTotal); - return writer; - }; - - /** - * Encodes the specified RebateInfo message, length delimited. Does not implicitly {@link gamehall.RebateInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo} message RebateInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RebateInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RebateInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RebateInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RebateInfo} RebateInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RebateInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RebateInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Platform = reader.string(); - break; - } - case 2: { - message.validBetTotal = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RebateInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RebateInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RebateInfo} RebateInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RebateInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RebateInfo message. - * @function verify - * @memberof gamehall.RebateInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RebateInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.validBetTotal != null && message.hasOwnProperty("validBetTotal")) - if (!$util.isInteger(message.validBetTotal) && !(message.validBetTotal && $util.isInteger(message.validBetTotal.low) && $util.isInteger(message.validBetTotal.high))) - return "validBetTotal: integer|Long expected"; - return null; - }; - - /** - * Creates a RebateInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RebateInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RebateInfo} RebateInfo - */ - RebateInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RebateInfo) - return object; - var message = new $root.gamehall.RebateInfo(); - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.validBetTotal != null) - if ($util.Long) - (message.validBetTotal = $util.Long.fromValue(object.validBetTotal)).unsigned = false; - else if (typeof object.validBetTotal === "string") - message.validBetTotal = parseInt(object.validBetTotal, 10); - else if (typeof object.validBetTotal === "number") - message.validBetTotal = object.validBetTotal; - else if (typeof object.validBetTotal === "object") - message.validBetTotal = new $util.LongBits(object.validBetTotal.low >>> 0, object.validBetTotal.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a RebateInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.RebateInfo} message RebateInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RebateInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Platform = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.validBetTotal = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.validBetTotal = options.longs === String ? "0" : 0; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.validBetTotal != null && message.hasOwnProperty("validBetTotal")) - if (typeof message.validBetTotal === "number") - object.validBetTotal = options.longs === String ? String(message.validBetTotal) : message.validBetTotal; - else - object.validBetTotal = options.longs === String ? $util.Long.prototype.toString.call(message.validBetTotal) : options.longs === Number ? new $util.LongBits(message.validBetTotal.low >>> 0, message.validBetTotal.high >>> 0).toNumber() : message.validBetTotal; - return object; - }; - - /** - * Converts this RebateInfo to JSON. - * @function toJSON - * @memberof gamehall.RebateInfo - * @instance - * @returns {Object.} JSON object - */ - RebateInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RebateInfo - * @function getTypeUrl - * @memberof gamehall.RebateInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RebateInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RebateInfo"; - }; - - return RebateInfo; - })(); - - gamehall.CSRebateList = (function() { - - /** - * Properties of a CSRebateList. - * @memberof gamehall - * @interface ICSRebateList - */ - - /** - * Constructs a new CSRebateList. - * @memberof gamehall - * @classdesc Represents a CSRebateList. - * @implements ICSRebateList - * @constructor - * @param {gamehall.ICSRebateList=} [properties] Properties to set - */ - function CSRebateList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSRebateList instance using the specified properties. - * @function create - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList=} [properties] Properties to set - * @returns {gamehall.CSRebateList} CSRebateList instance - */ - CSRebateList.create = function create(properties) { - return new CSRebateList(properties); - }; - - /** - * Encodes the specified CSRebateList message. Does not implicitly {@link gamehall.CSRebateList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList} message CSRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRebateList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSRebateList message, length delimited. Does not implicitly {@link gamehall.CSRebateList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList} message CSRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRebateList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSRebateList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSRebateList} CSRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRebateList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSRebateList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSRebateList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSRebateList} CSRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRebateList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSRebateList message. - * @function verify - * @memberof gamehall.CSRebateList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSRebateList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSRebateList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSRebateList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSRebateList} CSRebateList - */ - CSRebateList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSRebateList) - return object; - return new $root.gamehall.CSRebateList(); - }; - - /** - * Creates a plain object from a CSRebateList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.CSRebateList} message CSRebateList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSRebateList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSRebateList to JSON. - * @function toJSON - * @memberof gamehall.CSRebateList - * @instance - * @returns {Object.} JSON object - */ - CSRebateList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSRebateList - * @function getTypeUrl - * @memberof gamehall.CSRebateList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSRebateList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSRebateList"; - }; - - return CSRebateList; - })(); - - gamehall.SCRebateList = (function() { - - /** - * Properties of a SCRebateList. - * @memberof gamehall - * @interface ISCRebateList - * @property {Array.|null} [RebateList] SCRebateList RebateList - * @property {number|Long|null} [RebateTotalCoin] SCRebateList RebateTotalCoin - */ - - /** - * Constructs a new SCRebateList. - * @memberof gamehall - * @classdesc Represents a SCRebateList. - * @implements ISCRebateList - * @constructor - * @param {gamehall.ISCRebateList=} [properties] Properties to set - */ - function SCRebateList(properties) { - this.RebateList = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRebateList RebateList. - * @member {Array.} RebateList - * @memberof gamehall.SCRebateList - * @instance - */ - SCRebateList.prototype.RebateList = $util.emptyArray; - - /** - * SCRebateList RebateTotalCoin. - * @member {number|Long} RebateTotalCoin - * @memberof gamehall.SCRebateList - * @instance - */ - SCRebateList.prototype.RebateTotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCRebateList instance using the specified properties. - * @function create - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList=} [properties] Properties to set - * @returns {gamehall.SCRebateList} SCRebateList instance - */ - SCRebateList.create = function create(properties) { - return new SCRebateList(properties); - }; - - /** - * Encodes the specified SCRebateList message. Does not implicitly {@link gamehall.SCRebateList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList} message SCRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RebateList != null && message.RebateList.length) - for (var i = 0; i < message.RebateList.length; ++i) - $root.gamehall.RebateInfo.encode(message.RebateList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.RebateTotalCoin != null && Object.hasOwnProperty.call(message, "RebateTotalCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.RebateTotalCoin); - return writer; - }; - - /** - * Encodes the specified SCRebateList message, length delimited. Does not implicitly {@link gamehall.SCRebateList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList} message SCRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRebateList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRebateList} SCRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRebateList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.RebateList && message.RebateList.length)) - message.RebateList = []; - message.RebateList.push($root.gamehall.RebateInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - message.RebateTotalCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRebateList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRebateList} SCRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRebateList message. - * @function verify - * @memberof gamehall.SCRebateList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRebateList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RebateList != null && message.hasOwnProperty("RebateList")) { - if (!Array.isArray(message.RebateList)) - return "RebateList: array expected"; - for (var i = 0; i < message.RebateList.length; ++i) { - var error = $root.gamehall.RebateInfo.verify(message.RebateList[i]); - if (error) - return "RebateList." + error; - } - } - if (message.RebateTotalCoin != null && message.hasOwnProperty("RebateTotalCoin")) - if (!$util.isInteger(message.RebateTotalCoin) && !(message.RebateTotalCoin && $util.isInteger(message.RebateTotalCoin.low) && $util.isInteger(message.RebateTotalCoin.high))) - return "RebateTotalCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCRebateList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRebateList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRebateList} SCRebateList - */ - SCRebateList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRebateList) - return object; - var message = new $root.gamehall.SCRebateList(); - if (object.RebateList) { - if (!Array.isArray(object.RebateList)) - throw TypeError(".gamehall.SCRebateList.RebateList: array expected"); - message.RebateList = []; - for (var i = 0; i < object.RebateList.length; ++i) { - if (typeof object.RebateList[i] !== "object") - throw TypeError(".gamehall.SCRebateList.RebateList: object expected"); - message.RebateList[i] = $root.gamehall.RebateInfo.fromObject(object.RebateList[i]); - } - } - if (object.RebateTotalCoin != null) - if ($util.Long) - (message.RebateTotalCoin = $util.Long.fromValue(object.RebateTotalCoin)).unsigned = false; - else if (typeof object.RebateTotalCoin === "string") - message.RebateTotalCoin = parseInt(object.RebateTotalCoin, 10); - else if (typeof object.RebateTotalCoin === "number") - message.RebateTotalCoin = object.RebateTotalCoin; - else if (typeof object.RebateTotalCoin === "object") - message.RebateTotalCoin = new $util.LongBits(object.RebateTotalCoin.low >>> 0, object.RebateTotalCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCRebateList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.SCRebateList} message SCRebateList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRebateList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.RebateList = []; - if (options.defaults) - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RebateTotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RebateTotalCoin = options.longs === String ? "0" : 0; - if (message.RebateList && message.RebateList.length) { - object.RebateList = []; - for (var j = 0; j < message.RebateList.length; ++j) - object.RebateList[j] = $root.gamehall.RebateInfo.toObject(message.RebateList[j], options); - } - if (message.RebateTotalCoin != null && message.hasOwnProperty("RebateTotalCoin")) - if (typeof message.RebateTotalCoin === "number") - object.RebateTotalCoin = options.longs === String ? String(message.RebateTotalCoin) : message.RebateTotalCoin; - else - object.RebateTotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RebateTotalCoin) : options.longs === Number ? new $util.LongBits(message.RebateTotalCoin.low >>> 0, message.RebateTotalCoin.high >>> 0).toNumber() : message.RebateTotalCoin; - return object; - }; - - /** - * Converts this SCRebateList to JSON. - * @function toJSON - * @memberof gamehall.SCRebateList - * @instance - * @returns {Object.} JSON object - */ - SCRebateList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRebateList - * @function getTypeUrl - * @memberof gamehall.SCRebateList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRebateList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRebateList"; - }; - - return SCRebateList; - })(); - - gamehall.CSReceiveRebate = (function() { - - /** - * Properties of a CSReceiveRebate. - * @memberof gamehall - * @interface ICSReceiveRebate - */ - - /** - * Constructs a new CSReceiveRebate. - * @memberof gamehall - * @classdesc Represents a CSReceiveRebate. - * @implements ICSReceiveRebate - * @constructor - * @param {gamehall.ICSReceiveRebate=} [properties] Properties to set - */ - function CSReceiveRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSReceiveRebate instance using the specified properties. - * @function create - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate=} [properties] Properties to set - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate instance - */ - CSReceiveRebate.create = function create(properties) { - return new CSReceiveRebate(properties); - }; - - /** - * Encodes the specified CSReceiveRebate message. Does not implicitly {@link gamehall.CSReceiveRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate} message CSReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSReceiveRebate message, length delimited. Does not implicitly {@link gamehall.CSReceiveRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate} message CSReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReceiveRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReceiveRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReceiveRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReceiveRebate message. - * @function verify - * @memberof gamehall.CSReceiveRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReceiveRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSReceiveRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReceiveRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - */ - CSReceiveRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReceiveRebate) - return object; - return new $root.gamehall.CSReceiveRebate(); - }; - - /** - * Creates a plain object from a CSReceiveRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.CSReceiveRebate} message CSReceiveRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReceiveRebate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSReceiveRebate to JSON. - * @function toJSON - * @memberof gamehall.CSReceiveRebate - * @instance - * @returns {Object.} JSON object - */ - CSReceiveRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReceiveRebate - * @function getTypeUrl - * @memberof gamehall.CSReceiveRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReceiveRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReceiveRebate"; - }; - - return CSReceiveRebate; - })(); - - gamehall.SCReceiveRebate = (function() { - - /** - * Properties of a SCReceiveRebate. - * @memberof gamehall - * @interface ISCReceiveRebate - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCReceiveRebate OpRetCode - * @property {number|Long|null} [Coin] SCReceiveRebate Coin - */ - - /** - * Constructs a new SCReceiveRebate. - * @memberof gamehall - * @classdesc Represents a SCReceiveRebate. - * @implements ISCReceiveRebate - * @constructor - * @param {gamehall.ISCReceiveRebate=} [properties] Properties to set - */ - function SCReceiveRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReceiveRebate OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCReceiveRebate - * @instance - */ - SCReceiveRebate.prototype.OpRetCode = 0; - - /** - * SCReceiveRebate Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCReceiveRebate - * @instance - */ - SCReceiveRebate.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReceiveRebate instance using the specified properties. - * @function create - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate=} [properties] Properties to set - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate instance - */ - SCReceiveRebate.create = function create(properties) { - return new SCReceiveRebate(properties); - }; - - /** - * Encodes the specified SCReceiveRebate message. Does not implicitly {@link gamehall.SCReceiveRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate} message SCReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCReceiveRebate message, length delimited. Does not implicitly {@link gamehall.SCReceiveRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate} message SCReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReceiveRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReceiveRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReceiveRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReceiveRebate message. - * @function verify - * @memberof gamehall.SCReceiveRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReceiveRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReceiveRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReceiveRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - */ - SCReceiveRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReceiveRebate) - return object; - var message = new $root.gamehall.SCReceiveRebate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReceiveRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.SCReceiveRebate} message SCReceiveRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReceiveRebate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCReceiveRebate to JSON. - * @function toJSON - * @memberof gamehall.SCReceiveRebate - * @instance - * @returns {Object.} JSON object - */ - SCReceiveRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReceiveRebate - * @function getTypeUrl - * @memberof gamehall.SCReceiveRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReceiveRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReceiveRebate"; - }; - - return SCReceiveRebate; - })(); - - gamehall.SCRedCtrl = (function() { - - /** - * Properties of a SCRedCtrl. - * @memberof gamehall - * @interface ISCRedCtrl - * @property {number|Long|null} [OpCode] SCRedCtrl OpCode - * @property {boolean|null} [IsFShow] SCRedCtrl IsFShow - */ - - /** - * Constructs a new SCRedCtrl. - * @memberof gamehall - * @classdesc Represents a SCRedCtrl. - * @implements ISCRedCtrl - * @constructor - * @param {gamehall.ISCRedCtrl=} [properties] Properties to set - */ - function SCRedCtrl(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRedCtrl OpCode. - * @member {number|Long} OpCode - * @memberof gamehall.SCRedCtrl - * @instance - */ - SCRedCtrl.prototype.OpCode = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRedCtrl IsFShow. - * @member {boolean} IsFShow - * @memberof gamehall.SCRedCtrl - * @instance - */ - SCRedCtrl.prototype.IsFShow = false; - - /** - * Creates a new SCRedCtrl instance using the specified properties. - * @function create - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl=} [properties] Properties to set - * @returns {gamehall.SCRedCtrl} SCRedCtrl instance - */ - SCRedCtrl.create = function create(properties) { - return new SCRedCtrl(properties); - }; - - /** - * Encodes the specified SCRedCtrl message. Does not implicitly {@link gamehall.SCRedCtrl.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl} message SCRedCtrl message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRedCtrl.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.OpCode); - if (message.IsFShow != null && Object.hasOwnProperty.call(message, "IsFShow")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsFShow); - return writer; - }; - - /** - * Encodes the specified SCRedCtrl message, length delimited. Does not implicitly {@link gamehall.SCRedCtrl.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl} message SCRedCtrl message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRedCtrl.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRedCtrl message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRedCtrl - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRedCtrl} SCRedCtrl - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRedCtrl.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRedCtrl(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int64(); - break; - } - case 2: { - message.IsFShow = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRedCtrl message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRedCtrl - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRedCtrl} SCRedCtrl - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRedCtrl.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRedCtrl message. - * @function verify - * @memberof gamehall.SCRedCtrl - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRedCtrl.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - if (!$util.isInteger(message.OpCode) && !(message.OpCode && $util.isInteger(message.OpCode.low) && $util.isInteger(message.OpCode.high))) - return "OpCode: integer|Long expected"; - if (message.IsFShow != null && message.hasOwnProperty("IsFShow")) - if (typeof message.IsFShow !== "boolean") - return "IsFShow: boolean expected"; - return null; - }; - - /** - * Creates a SCRedCtrl message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRedCtrl - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRedCtrl} SCRedCtrl - */ - SCRedCtrl.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRedCtrl) - return object; - var message = new $root.gamehall.SCRedCtrl(); - if (object.OpCode != null) - if ($util.Long) - (message.OpCode = $util.Long.fromValue(object.OpCode)).unsigned = false; - else if (typeof object.OpCode === "string") - message.OpCode = parseInt(object.OpCode, 10); - else if (typeof object.OpCode === "number") - message.OpCode = object.OpCode; - else if (typeof object.OpCode === "object") - message.OpCode = new $util.LongBits(object.OpCode.low >>> 0, object.OpCode.high >>> 0).toNumber(); - if (object.IsFShow != null) - message.IsFShow = Boolean(object.IsFShow); - return message; - }; - - /** - * Creates a plain object from a SCRedCtrl message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.SCRedCtrl} message SCRedCtrl - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRedCtrl.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.OpCode = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.OpCode = options.longs === String ? "0" : 0; - object.IsFShow = false; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - if (typeof message.OpCode === "number") - object.OpCode = options.longs === String ? String(message.OpCode) : message.OpCode; - else - object.OpCode = options.longs === String ? $util.Long.prototype.toString.call(message.OpCode) : options.longs === Number ? new $util.LongBits(message.OpCode.low >>> 0, message.OpCode.high >>> 0).toNumber() : message.OpCode; - if (message.IsFShow != null && message.hasOwnProperty("IsFShow")) - object.IsFShow = message.IsFShow; - return object; - }; - - /** - * Converts this SCRedCtrl to JSON. - * @function toJSON - * @memberof gamehall.SCRedCtrl - * @instance - * @returns {Object.} JSON object - */ - SCRedCtrl.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRedCtrl - * @function getTypeUrl - * @memberof gamehall.SCRedCtrl - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRedCtrl.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRedCtrl"; - }; - - return SCRedCtrl; - })(); - - gamehall.CSGetIsCanRebate = (function() { - - /** - * Properties of a CSGetIsCanRebate. - * @memberof gamehall - * @interface ICSGetIsCanRebate - */ - - /** - * Constructs a new CSGetIsCanRebate. - * @memberof gamehall - * @classdesc Represents a CSGetIsCanRebate. - * @implements ICSGetIsCanRebate - * @constructor - * @param {gamehall.ICSGetIsCanRebate=} [properties] Properties to set - */ - function CSGetIsCanRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSGetIsCanRebate instance using the specified properties. - * @function create - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate=} [properties] Properties to set - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate instance - */ - CSGetIsCanRebate.create = function create(properties) { - return new CSGetIsCanRebate(properties); - }; - - /** - * Encodes the specified CSGetIsCanRebate message. Does not implicitly {@link gamehall.CSGetIsCanRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate} message CSGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetIsCanRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSGetIsCanRebate message, length delimited. Does not implicitly {@link gamehall.CSGetIsCanRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate} message CSGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetIsCanRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetIsCanRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetIsCanRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetIsCanRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetIsCanRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetIsCanRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetIsCanRebate message. - * @function verify - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetIsCanRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSGetIsCanRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - */ - CSGetIsCanRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetIsCanRebate) - return object; - return new $root.gamehall.CSGetIsCanRebate(); - }; - - /** - * Creates a plain object from a CSGetIsCanRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.CSGetIsCanRebate} message CSGetIsCanRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetIsCanRebate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSGetIsCanRebate to JSON. - * @function toJSON - * @memberof gamehall.CSGetIsCanRebate - * @instance - * @returns {Object.} JSON object - */ - CSGetIsCanRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetIsCanRebate - * @function getTypeUrl - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetIsCanRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetIsCanRebate"; - }; - - return CSGetIsCanRebate; - })(); - - gamehall.SCGetIsCanRebate = (function() { - - /** - * Properties of a SCGetIsCanRebate. - * @memberof gamehall - * @interface ISCGetIsCanRebate - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCGetIsCanRebate OpRetCode - * @property {number|Long|null} [IsCan] SCGetIsCanRebate IsCan - * @property {string|null} [Url] SCGetIsCanRebate Url - * @property {string|null} [WX] SCGetIsCanRebate WX - */ - - /** - * Constructs a new SCGetIsCanRebate. - * @memberof gamehall - * @classdesc Represents a SCGetIsCanRebate. - * @implements ISCGetIsCanRebate - * @constructor - * @param {gamehall.ISCGetIsCanRebate=} [properties] Properties to set - */ - function SCGetIsCanRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetIsCanRebate OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.OpRetCode = 0; - - /** - * SCGetIsCanRebate IsCan. - * @member {number|Long} IsCan - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.IsCan = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCGetIsCanRebate Url. - * @member {string} Url - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.Url = ""; - - /** - * SCGetIsCanRebate WX. - * @member {string} WX - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.WX = ""; - - /** - * Creates a new SCGetIsCanRebate instance using the specified properties. - * @function create - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate=} [properties] Properties to set - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate instance - */ - SCGetIsCanRebate.create = function create(properties) { - return new SCGetIsCanRebate(properties); - }; - - /** - * Encodes the specified SCGetIsCanRebate message. Does not implicitly {@link gamehall.SCGetIsCanRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate} message SCGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetIsCanRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.IsCan != null && Object.hasOwnProperty.call(message, "IsCan")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.IsCan); - if (message.Url != null && Object.hasOwnProperty.call(message, "Url")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Url); - if (message.WX != null && Object.hasOwnProperty.call(message, "WX")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.WX); - return writer; - }; - - /** - * Encodes the specified SCGetIsCanRebate message, length delimited. Does not implicitly {@link gamehall.SCGetIsCanRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate} message SCGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetIsCanRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetIsCanRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetIsCanRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetIsCanRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.IsCan = reader.int64(); - break; - } - case 3: { - message.Url = reader.string(); - break; - } - case 4: { - message.WX = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetIsCanRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetIsCanRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetIsCanRebate message. - * @function verify - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetIsCanRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.IsCan != null && message.hasOwnProperty("IsCan")) - if (!$util.isInteger(message.IsCan) && !(message.IsCan && $util.isInteger(message.IsCan.low) && $util.isInteger(message.IsCan.high))) - return "IsCan: integer|Long expected"; - if (message.Url != null && message.hasOwnProperty("Url")) - if (!$util.isString(message.Url)) - return "Url: string expected"; - if (message.WX != null && message.hasOwnProperty("WX")) - if (!$util.isString(message.WX)) - return "WX: string expected"; - return null; - }; - - /** - * Creates a SCGetIsCanRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - */ - SCGetIsCanRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetIsCanRebate) - return object; - var message = new $root.gamehall.SCGetIsCanRebate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.IsCan != null) - if ($util.Long) - (message.IsCan = $util.Long.fromValue(object.IsCan)).unsigned = false; - else if (typeof object.IsCan === "string") - message.IsCan = parseInt(object.IsCan, 10); - else if (typeof object.IsCan === "number") - message.IsCan = object.IsCan; - else if (typeof object.IsCan === "object") - message.IsCan = new $util.LongBits(object.IsCan.low >>> 0, object.IsCan.high >>> 0).toNumber(); - if (object.Url != null) - message.Url = String(object.Url); - if (object.WX != null) - message.WX = String(object.WX); - return message; - }; - - /** - * Creates a plain object from a SCGetIsCanRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.SCGetIsCanRebate} message SCGetIsCanRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetIsCanRebate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.IsCan = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.IsCan = options.longs === String ? "0" : 0; - object.Url = ""; - object.WX = ""; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.IsCan != null && message.hasOwnProperty("IsCan")) - if (typeof message.IsCan === "number") - object.IsCan = options.longs === String ? String(message.IsCan) : message.IsCan; - else - object.IsCan = options.longs === String ? $util.Long.prototype.toString.call(message.IsCan) : options.longs === Number ? new $util.LongBits(message.IsCan.low >>> 0, message.IsCan.high >>> 0).toNumber() : message.IsCan; - if (message.Url != null && message.hasOwnProperty("Url")) - object.Url = message.Url; - if (message.WX != null && message.hasOwnProperty("WX")) - object.WX = message.WX; - return object; - }; - - /** - * Converts this SCGetIsCanRebate to JSON. - * @function toJSON - * @memberof gamehall.SCGetIsCanRebate - * @instance - * @returns {Object.} JSON object - */ - SCGetIsCanRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetIsCanRebate - * @function getTypeUrl - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetIsCanRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetIsCanRebate"; - }; - - return SCGetIsCanRebate; - })(); - - gamehall.HallGameType = (function() { - - /** - * Properties of a HallGameType. - * @memberof gamehall - * @interface IHallGameType - * @property {number|null} [GameId] HallGameType GameId - * @property {number|null} [GameMode] HallGameType GameMode - */ - - /** - * Constructs a new HallGameType. - * @memberof gamehall - * @classdesc 个人信息////////////////////////////////////////////////////////////// - * @implements IHallGameType - * @constructor - * @param {gamehall.IHallGameType=} [properties] Properties to set - */ - function HallGameType(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallGameType GameId. - * @member {number} GameId - * @memberof gamehall.HallGameType - * @instance - */ - HallGameType.prototype.GameId = 0; - - /** - * HallGameType GameMode. - * @member {number} GameMode - * @memberof gamehall.HallGameType - * @instance - */ - HallGameType.prototype.GameMode = 0; - - /** - * Creates a new HallGameType instance using the specified properties. - * @function create - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType=} [properties] Properties to set - * @returns {gamehall.HallGameType} HallGameType instance - */ - HallGameType.create = function create(properties) { - return new HallGameType(properties); - }; - - /** - * Encodes the specified HallGameType message. Does not implicitly {@link gamehall.HallGameType.verify|verify} messages. - * @function encode - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType} message HallGameType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallGameType.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameMode); - return writer; - }; - - /** - * Encodes the specified HallGameType message, length delimited. Does not implicitly {@link gamehall.HallGameType.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType} message HallGameType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallGameType.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallGameType message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallGameType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallGameType} HallGameType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallGameType.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallGameType(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameMode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallGameType message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallGameType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallGameType} HallGameType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallGameType.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallGameType message. - * @function verify - * @memberof gamehall.HallGameType - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallGameType.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - return null; - }; - - /** - * Creates a HallGameType message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallGameType - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallGameType} HallGameType - */ - HallGameType.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallGameType) - return object; - var message = new $root.gamehall.HallGameType(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - return message; - }; - - /** - * Creates a plain object from a HallGameType message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.HallGameType} message HallGameType - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallGameType.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameMode = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - return object; - }; - - /** - * Converts this HallGameType to JSON. - * @function toJSON - * @memberof gamehall.HallGameType - * @instance - * @returns {Object.} JSON object - */ - HallGameType.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallGameType - * @function getTypeUrl - * @memberof gamehall.HallGameType - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallGameType.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallGameType"; - }; - - return HallGameType; - })(); - - /** - * HallOperaCode enum. - * @name gamehall.HallOperaCode - * @enum {number} - * @property {number} HallOperaZero=0 HallOperaZero value - * @property {number} HallChessGame=1 HallChessGame value - * @property {number} HallElectronicGame=2 HallElectronicGame value - * @property {number} HallFishingGame=3 HallFishingGame value - * @property {number} HallLiveVideo=4 HallLiveVideo value - * @property {number} HallLotteryGame=5 HallLotteryGame value - * @property {number} HallSportsGame=6 HallSportsGame value - * @property {number} HallPrivateRoom=7 HallPrivateRoom value - * @property {number} HallClubRoom=8 HallClubRoom value - * @property {number} HallThirdPlt=101 HallThirdPlt value - */ - gamehall.HallOperaCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "HallOperaZero"] = 0; - values[valuesById[1] = "HallChessGame"] = 1; - values[valuesById[2] = "HallElectronicGame"] = 2; - values[valuesById[3] = "HallFishingGame"] = 3; - values[valuesById[4] = "HallLiveVideo"] = 4; - values[valuesById[5] = "HallLotteryGame"] = 5; - values[valuesById[6] = "HallSportsGame"] = 6; - values[valuesById[7] = "HallPrivateRoom"] = 7; - values[valuesById[8] = "HallClubRoom"] = 8; - values[valuesById[101] = "HallThirdPlt"] = 101; - return values; - })(); - - gamehall.CSNewPlayerInfo = (function() { - - /** - * Properties of a CSNewPlayerInfo. - * @memberof gamehall - * @interface ICSNewPlayerInfo - */ - - /** - * Constructs a new CSNewPlayerInfo. - * @memberof gamehall - * @classdesc Represents a CSNewPlayerInfo. - * @implements ICSNewPlayerInfo - * @constructor - * @param {gamehall.ICSNewPlayerInfo=} [properties] Properties to set - */ - function CSNewPlayerInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSNewPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo=} [properties] Properties to set - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo instance - */ - CSNewPlayerInfo.create = function create(properties) { - return new CSNewPlayerInfo(properties); - }; - - /** - * Encodes the specified CSNewPlayerInfo message. Does not implicitly {@link gamehall.CSNewPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo} message CSNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSNewPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSNewPlayerInfo message, length delimited. Does not implicitly {@link gamehall.CSNewPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo} message CSNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSNewPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSNewPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSNewPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSNewPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSNewPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSNewPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSNewPlayerInfo message. - * @function verify - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSNewPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSNewPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - */ - CSNewPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSNewPlayerInfo) - return object; - return new $root.gamehall.CSNewPlayerInfo(); - }; - - /** - * Creates a plain object from a CSNewPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.CSNewPlayerInfo} message CSNewPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSNewPlayerInfo.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSNewPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.CSNewPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - CSNewPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSNewPlayerInfo - * @function getTypeUrl - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSNewPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSNewPlayerInfo"; - }; - - return CSNewPlayerInfo; - })(); - - gamehall.SCNewPlayerInfo = (function() { - - /** - * Properties of a SCNewPlayerInfo. - * @memberof gamehall - * @interface ISCNewPlayerInfo - * @property {number|null} [GameTotalNum] SCNewPlayerInfo GameTotalNum - * @property {string|null} [GameMostPartake] SCNewPlayerInfo GameMostPartake - * @property {string|null} [GameMostProfit] SCNewPlayerInfo GameMostProfit - * @property {number|null} [GameMostProfitNum] SCNewPlayerInfo GameMostProfitNum - * @property {number|null} [CreateRoomNum] SCNewPlayerInfo CreateRoomNum - * @property {string|null} [CreateRoomMost] SCNewPlayerInfo CreateRoomMost - * @property {number|null} [CreateClubNum] SCNewPlayerInfo CreateClubNum - * @property {string|null} [CreateClubRoomMost] SCNewPlayerInfo CreateClubRoomMost - * @property {number|null} [TeamNum] SCNewPlayerInfo TeamNum - * @property {number|null} [AchievementTotal] SCNewPlayerInfo AchievementTotal - * @property {number|null} [RewardTotal] SCNewPlayerInfo RewardTotal - * @property {number|Long|null} [TotalCoin] SCNewPlayerInfo TotalCoin - * @property {number|Long|null} [LastGetCoinTime] SCNewPlayerInfo LastGetCoinTime - * @property {number|Long|null} [Coin] SCNewPlayerInfo Coin - * @property {number|null} [CodeType] SCNewPlayerInfo CodeType - * @property {Array.|null} [ClassType] SCNewPlayerInfo ClassType - */ - - /** - * Constructs a new SCNewPlayerInfo. - * @memberof gamehall - * @classdesc Represents a SCNewPlayerInfo. - * @implements ISCNewPlayerInfo - * @constructor - * @param {gamehall.ISCNewPlayerInfo=} [properties] Properties to set - */ - function SCNewPlayerInfo(properties) { - this.ClassType = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCNewPlayerInfo GameTotalNum. - * @member {number} GameTotalNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameTotalNum = 0; - - /** - * SCNewPlayerInfo GameMostPartake. - * @member {string} GameMostPartake - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostPartake = ""; - - /** - * SCNewPlayerInfo GameMostProfit. - * @member {string} GameMostProfit - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostProfit = ""; - - /** - * SCNewPlayerInfo GameMostProfitNum. - * @member {number} GameMostProfitNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostProfitNum = 0; - - /** - * SCNewPlayerInfo CreateRoomNum. - * @member {number} CreateRoomNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateRoomNum = 0; - - /** - * SCNewPlayerInfo CreateRoomMost. - * @member {string} CreateRoomMost - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateRoomMost = ""; - - /** - * SCNewPlayerInfo CreateClubNum. - * @member {number} CreateClubNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateClubNum = 0; - - /** - * SCNewPlayerInfo CreateClubRoomMost. - * @member {string} CreateClubRoomMost - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateClubRoomMost = ""; - - /** - * SCNewPlayerInfo TeamNum. - * @member {number} TeamNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.TeamNum = 0; - - /** - * SCNewPlayerInfo AchievementTotal. - * @member {number} AchievementTotal - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.AchievementTotal = 0; - - /** - * SCNewPlayerInfo RewardTotal. - * @member {number} RewardTotal - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.RewardTotal = 0; - - /** - * SCNewPlayerInfo TotalCoin. - * @member {number|Long} TotalCoin - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.TotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo LastGetCoinTime. - * @member {number|Long} LastGetCoinTime - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.LastGetCoinTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo CodeType. - * @member {number} CodeType - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CodeType = 0; - - /** - * SCNewPlayerInfo ClassType. - * @member {Array.} ClassType - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.ClassType = $util.emptyArray; - - /** - * Creates a new SCNewPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo=} [properties] Properties to set - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo instance - */ - SCNewPlayerInfo.create = function create(properties) { - return new SCNewPlayerInfo(properties); - }; - - /** - * Encodes the specified SCNewPlayerInfo message. Does not implicitly {@link gamehall.SCNewPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo} message SCNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCNewPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameTotalNum != null && Object.hasOwnProperty.call(message, "GameTotalNum")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameTotalNum); - if (message.GameMostPartake != null && Object.hasOwnProperty.call(message, "GameMostPartake")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameMostPartake); - if (message.GameMostProfit != null && Object.hasOwnProperty.call(message, "GameMostProfit")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.GameMostProfit); - if (message.GameMostProfitNum != null && Object.hasOwnProperty.call(message, "GameMostProfitNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.GameMostProfitNum); - if (message.CreateRoomNum != null && Object.hasOwnProperty.call(message, "CreateRoomNum")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CreateRoomNum); - if (message.CreateRoomMost != null && Object.hasOwnProperty.call(message, "CreateRoomMost")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.CreateRoomMost); - if (message.CreateClubNum != null && Object.hasOwnProperty.call(message, "CreateClubNum")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.CreateClubNum); - if (message.CreateClubRoomMost != null && Object.hasOwnProperty.call(message, "CreateClubRoomMost")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.CreateClubRoomMost); - if (message.TeamNum != null && Object.hasOwnProperty.call(message, "TeamNum")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.TeamNum); - if (message.AchievementTotal != null && Object.hasOwnProperty.call(message, "AchievementTotal")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.AchievementTotal); - if (message.RewardTotal != null && Object.hasOwnProperty.call(message, "RewardTotal")) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.RewardTotal); - if (message.TotalCoin != null && Object.hasOwnProperty.call(message, "TotalCoin")) - writer.uint32(/* id 12, wireType 0 =*/96).int64(message.TotalCoin); - if (message.LastGetCoinTime != null && Object.hasOwnProperty.call(message, "LastGetCoinTime")) - writer.uint32(/* id 13, wireType 0 =*/104).int64(message.LastGetCoinTime); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 14, wireType 0 =*/112).int64(message.Coin); - if (message.CodeType != null && Object.hasOwnProperty.call(message, "CodeType")) - writer.uint32(/* id 15, wireType 0 =*/120).int32(message.CodeType); - if (message.ClassType != null && message.ClassType.length) { - writer.uint32(/* id 16, wireType 2 =*/130).fork(); - for (var i = 0; i < message.ClassType.length; ++i) - writer.int32(message.ClassType[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCNewPlayerInfo message, length delimited. Does not implicitly {@link gamehall.SCNewPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo} message SCNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCNewPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCNewPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCNewPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCNewPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameTotalNum = reader.int32(); - break; - } - case 2: { - message.GameMostPartake = reader.string(); - break; - } - case 3: { - message.GameMostProfit = reader.string(); - break; - } - case 4: { - message.GameMostProfitNum = reader.int32(); - break; - } - case 5: { - message.CreateRoomNum = reader.int32(); - break; - } - case 6: { - message.CreateRoomMost = reader.string(); - break; - } - case 7: { - message.CreateClubNum = reader.int32(); - break; - } - case 8: { - message.CreateClubRoomMost = reader.string(); - break; - } - case 9: { - message.TeamNum = reader.int32(); - break; - } - case 10: { - message.AchievementTotal = reader.int32(); - break; - } - case 11: { - message.RewardTotal = reader.int32(); - break; - } - case 12: { - message.TotalCoin = reader.int64(); - break; - } - case 13: { - message.LastGetCoinTime = reader.int64(); - break; - } - case 14: { - message.Coin = reader.int64(); - break; - } - case 15: { - message.CodeType = reader.int32(); - break; - } - case 16: { - if (!(message.ClassType && message.ClassType.length)) - message.ClassType = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.ClassType.push(reader.int32()); - } else - message.ClassType.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCNewPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCNewPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCNewPlayerInfo message. - * @function verify - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCNewPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameTotalNum != null && message.hasOwnProperty("GameTotalNum")) - if (!$util.isInteger(message.GameTotalNum)) - return "GameTotalNum: integer expected"; - if (message.GameMostPartake != null && message.hasOwnProperty("GameMostPartake")) - if (!$util.isString(message.GameMostPartake)) - return "GameMostPartake: string expected"; - if (message.GameMostProfit != null && message.hasOwnProperty("GameMostProfit")) - if (!$util.isString(message.GameMostProfit)) - return "GameMostProfit: string expected"; - if (message.GameMostProfitNum != null && message.hasOwnProperty("GameMostProfitNum")) - if (!$util.isInteger(message.GameMostProfitNum)) - return "GameMostProfitNum: integer expected"; - if (message.CreateRoomNum != null && message.hasOwnProperty("CreateRoomNum")) - if (!$util.isInteger(message.CreateRoomNum)) - return "CreateRoomNum: integer expected"; - if (message.CreateRoomMost != null && message.hasOwnProperty("CreateRoomMost")) - if (!$util.isString(message.CreateRoomMost)) - return "CreateRoomMost: string expected"; - if (message.CreateClubNum != null && message.hasOwnProperty("CreateClubNum")) - if (!$util.isInteger(message.CreateClubNum)) - return "CreateClubNum: integer expected"; - if (message.CreateClubRoomMost != null && message.hasOwnProperty("CreateClubRoomMost")) - if (!$util.isString(message.CreateClubRoomMost)) - return "CreateClubRoomMost: string expected"; - if (message.TeamNum != null && message.hasOwnProperty("TeamNum")) - if (!$util.isInteger(message.TeamNum)) - return "TeamNum: integer expected"; - if (message.AchievementTotal != null && message.hasOwnProperty("AchievementTotal")) - if (!$util.isInteger(message.AchievementTotal)) - return "AchievementTotal: integer expected"; - if (message.RewardTotal != null && message.hasOwnProperty("RewardTotal")) - if (!$util.isInteger(message.RewardTotal)) - return "RewardTotal: integer expected"; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (!$util.isInteger(message.TotalCoin) && !(message.TotalCoin && $util.isInteger(message.TotalCoin.low) && $util.isInteger(message.TotalCoin.high))) - return "TotalCoin: integer|Long expected"; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (!$util.isInteger(message.LastGetCoinTime) && !(message.LastGetCoinTime && $util.isInteger(message.LastGetCoinTime.low) && $util.isInteger(message.LastGetCoinTime.high))) - return "LastGetCoinTime: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - if (!$util.isInteger(message.CodeType)) - return "CodeType: integer expected"; - if (message.ClassType != null && message.hasOwnProperty("ClassType")) { - if (!Array.isArray(message.ClassType)) - return "ClassType: array expected"; - for (var i = 0; i < message.ClassType.length; ++i) - if (!$util.isInteger(message.ClassType[i])) - return "ClassType: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCNewPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - */ - SCNewPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCNewPlayerInfo) - return object; - var message = new $root.gamehall.SCNewPlayerInfo(); - if (object.GameTotalNum != null) - message.GameTotalNum = object.GameTotalNum | 0; - if (object.GameMostPartake != null) - message.GameMostPartake = String(object.GameMostPartake); - if (object.GameMostProfit != null) - message.GameMostProfit = String(object.GameMostProfit); - if (object.GameMostProfitNum != null) - message.GameMostProfitNum = object.GameMostProfitNum | 0; - if (object.CreateRoomNum != null) - message.CreateRoomNum = object.CreateRoomNum | 0; - if (object.CreateRoomMost != null) - message.CreateRoomMost = String(object.CreateRoomMost); - if (object.CreateClubNum != null) - message.CreateClubNum = object.CreateClubNum | 0; - if (object.CreateClubRoomMost != null) - message.CreateClubRoomMost = String(object.CreateClubRoomMost); - if (object.TeamNum != null) - message.TeamNum = object.TeamNum | 0; - if (object.AchievementTotal != null) - message.AchievementTotal = object.AchievementTotal | 0; - if (object.RewardTotal != null) - message.RewardTotal = object.RewardTotal | 0; - if (object.TotalCoin != null) - if ($util.Long) - (message.TotalCoin = $util.Long.fromValue(object.TotalCoin)).unsigned = false; - else if (typeof object.TotalCoin === "string") - message.TotalCoin = parseInt(object.TotalCoin, 10); - else if (typeof object.TotalCoin === "number") - message.TotalCoin = object.TotalCoin; - else if (typeof object.TotalCoin === "object") - message.TotalCoin = new $util.LongBits(object.TotalCoin.low >>> 0, object.TotalCoin.high >>> 0).toNumber(); - if (object.LastGetCoinTime != null) - if ($util.Long) - (message.LastGetCoinTime = $util.Long.fromValue(object.LastGetCoinTime)).unsigned = false; - else if (typeof object.LastGetCoinTime === "string") - message.LastGetCoinTime = parseInt(object.LastGetCoinTime, 10); - else if (typeof object.LastGetCoinTime === "number") - message.LastGetCoinTime = object.LastGetCoinTime; - else if (typeof object.LastGetCoinTime === "object") - message.LastGetCoinTime = new $util.LongBits(object.LastGetCoinTime.low >>> 0, object.LastGetCoinTime.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.CodeType != null) - message.CodeType = object.CodeType | 0; - if (object.ClassType) { - if (!Array.isArray(object.ClassType)) - throw TypeError(".gamehall.SCNewPlayerInfo.ClassType: array expected"); - message.ClassType = []; - for (var i = 0; i < object.ClassType.length; ++i) - message.ClassType[i] = object.ClassType[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCNewPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.SCNewPlayerInfo} message SCNewPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCNewPlayerInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.ClassType = []; - if (options.defaults) { - object.GameTotalNum = 0; - object.GameMostPartake = ""; - object.GameMostProfit = ""; - object.GameMostProfitNum = 0; - object.CreateRoomNum = 0; - object.CreateRoomMost = ""; - object.CreateClubNum = 0; - object.CreateClubRoomMost = ""; - object.TeamNum = 0; - object.AchievementTotal = 0; - object.RewardTotal = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LastGetCoinTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LastGetCoinTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.CodeType = 0; - } - if (message.GameTotalNum != null && message.hasOwnProperty("GameTotalNum")) - object.GameTotalNum = message.GameTotalNum; - if (message.GameMostPartake != null && message.hasOwnProperty("GameMostPartake")) - object.GameMostPartake = message.GameMostPartake; - if (message.GameMostProfit != null && message.hasOwnProperty("GameMostProfit")) - object.GameMostProfit = message.GameMostProfit; - if (message.GameMostProfitNum != null && message.hasOwnProperty("GameMostProfitNum")) - object.GameMostProfitNum = message.GameMostProfitNum; - if (message.CreateRoomNum != null && message.hasOwnProperty("CreateRoomNum")) - object.CreateRoomNum = message.CreateRoomNum; - if (message.CreateRoomMost != null && message.hasOwnProperty("CreateRoomMost")) - object.CreateRoomMost = message.CreateRoomMost; - if (message.CreateClubNum != null && message.hasOwnProperty("CreateClubNum")) - object.CreateClubNum = message.CreateClubNum; - if (message.CreateClubRoomMost != null && message.hasOwnProperty("CreateClubRoomMost")) - object.CreateClubRoomMost = message.CreateClubRoomMost; - if (message.TeamNum != null && message.hasOwnProperty("TeamNum")) - object.TeamNum = message.TeamNum; - if (message.AchievementTotal != null && message.hasOwnProperty("AchievementTotal")) - object.AchievementTotal = message.AchievementTotal; - if (message.RewardTotal != null && message.hasOwnProperty("RewardTotal")) - object.RewardTotal = message.RewardTotal; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (typeof message.TotalCoin === "number") - object.TotalCoin = options.longs === String ? String(message.TotalCoin) : message.TotalCoin; - else - object.TotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.TotalCoin) : options.longs === Number ? new $util.LongBits(message.TotalCoin.low >>> 0, message.TotalCoin.high >>> 0).toNumber() : message.TotalCoin; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (typeof message.LastGetCoinTime === "number") - object.LastGetCoinTime = options.longs === String ? String(message.LastGetCoinTime) : message.LastGetCoinTime; - else - object.LastGetCoinTime = options.longs === String ? $util.Long.prototype.toString.call(message.LastGetCoinTime) : options.longs === Number ? new $util.LongBits(message.LastGetCoinTime.low >>> 0, message.LastGetCoinTime.high >>> 0).toNumber() : message.LastGetCoinTime; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - object.CodeType = message.CodeType; - if (message.ClassType && message.ClassType.length) { - object.ClassType = []; - for (var j = 0; j < message.ClassType.length; ++j) - object.ClassType[j] = message.ClassType[j]; - } - return object; - }; - - /** - * Converts this SCNewPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.SCNewPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - SCNewPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCNewPlayerInfo - * @function getTypeUrl - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCNewPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCNewPlayerInfo"; - }; - - return SCNewPlayerInfo; - })(); - - gamehall.SCRebateTotalInfo = (function() { - - /** - * Properties of a SCRebateTotalInfo. - * @memberof gamehall - * @interface ISCRebateTotalInfo - * @property {number|Long|null} [TotalCoin] SCRebateTotalInfo TotalCoin - * @property {number|Long|null} [LastGetCoinTime] SCRebateTotalInfo LastGetCoinTime - * @property {number|Long|null} [Coin] SCRebateTotalInfo Coin - * @property {number|null} [CodeType] SCRebateTotalInfo CodeType - */ - - /** - * Constructs a new SCRebateTotalInfo. - * @memberof gamehall - * @classdesc Represents a SCRebateTotalInfo. - * @implements ISCRebateTotalInfo - * @constructor - * @param {gamehall.ISCRebateTotalInfo=} [properties] Properties to set - */ - function SCRebateTotalInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRebateTotalInfo TotalCoin. - * @member {number|Long} TotalCoin - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.TotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo LastGetCoinTime. - * @member {number|Long} LastGetCoinTime - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.LastGetCoinTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo CodeType. - * @member {number} CodeType - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.CodeType = 0; - - /** - * Creates a new SCRebateTotalInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo=} [properties] Properties to set - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo instance - */ - SCRebateTotalInfo.create = function create(properties) { - return new SCRebateTotalInfo(properties); - }; - - /** - * Encodes the specified SCRebateTotalInfo message. Does not implicitly {@link gamehall.SCRebateTotalInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo} message SCRebateTotalInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateTotalInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.TotalCoin != null && Object.hasOwnProperty.call(message, "TotalCoin")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.TotalCoin); - if (message.LastGetCoinTime != null && Object.hasOwnProperty.call(message, "LastGetCoinTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.LastGetCoinTime); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Coin); - if (message.CodeType != null && Object.hasOwnProperty.call(message, "CodeType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.CodeType); - return writer; - }; - - /** - * Encodes the specified SCRebateTotalInfo message, length delimited. Does not implicitly {@link gamehall.SCRebateTotalInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo} message SCRebateTotalInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateTotalInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRebateTotalInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateTotalInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRebateTotalInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.TotalCoin = reader.int64(); - break; - } - case 2: { - message.LastGetCoinTime = reader.int64(); - break; - } - case 3: { - message.Coin = reader.int64(); - break; - } - case 4: { - message.CodeType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRebateTotalInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateTotalInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRebateTotalInfo message. - * @function verify - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRebateTotalInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (!$util.isInteger(message.TotalCoin) && !(message.TotalCoin && $util.isInteger(message.TotalCoin.low) && $util.isInteger(message.TotalCoin.high))) - return "TotalCoin: integer|Long expected"; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (!$util.isInteger(message.LastGetCoinTime) && !(message.LastGetCoinTime && $util.isInteger(message.LastGetCoinTime.low) && $util.isInteger(message.LastGetCoinTime.high))) - return "LastGetCoinTime: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - if (!$util.isInteger(message.CodeType)) - return "CodeType: integer expected"; - return null; - }; - - /** - * Creates a SCRebateTotalInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - */ - SCRebateTotalInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRebateTotalInfo) - return object; - var message = new $root.gamehall.SCRebateTotalInfo(); - if (object.TotalCoin != null) - if ($util.Long) - (message.TotalCoin = $util.Long.fromValue(object.TotalCoin)).unsigned = false; - else if (typeof object.TotalCoin === "string") - message.TotalCoin = parseInt(object.TotalCoin, 10); - else if (typeof object.TotalCoin === "number") - message.TotalCoin = object.TotalCoin; - else if (typeof object.TotalCoin === "object") - message.TotalCoin = new $util.LongBits(object.TotalCoin.low >>> 0, object.TotalCoin.high >>> 0).toNumber(); - if (object.LastGetCoinTime != null) - if ($util.Long) - (message.LastGetCoinTime = $util.Long.fromValue(object.LastGetCoinTime)).unsigned = false; - else if (typeof object.LastGetCoinTime === "string") - message.LastGetCoinTime = parseInt(object.LastGetCoinTime, 10); - else if (typeof object.LastGetCoinTime === "number") - message.LastGetCoinTime = object.LastGetCoinTime; - else if (typeof object.LastGetCoinTime === "object") - message.LastGetCoinTime = new $util.LongBits(object.LastGetCoinTime.low >>> 0, object.LastGetCoinTime.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.CodeType != null) - message.CodeType = object.CodeType | 0; - return message; - }; - - /** - * Creates a plain object from a SCRebateTotalInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.SCRebateTotalInfo} message SCRebateTotalInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRebateTotalInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LastGetCoinTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LastGetCoinTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.CodeType = 0; - } - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (typeof message.TotalCoin === "number") - object.TotalCoin = options.longs === String ? String(message.TotalCoin) : message.TotalCoin; - else - object.TotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.TotalCoin) : options.longs === Number ? new $util.LongBits(message.TotalCoin.low >>> 0, message.TotalCoin.high >>> 0).toNumber() : message.TotalCoin; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (typeof message.LastGetCoinTime === "number") - object.LastGetCoinTime = options.longs === String ? String(message.LastGetCoinTime) : message.LastGetCoinTime; - else - object.LastGetCoinTime = options.longs === String ? $util.Long.prototype.toString.call(message.LastGetCoinTime) : options.longs === Number ? new $util.LongBits(message.LastGetCoinTime.low >>> 0, message.LastGetCoinTime.high >>> 0).toNumber() : message.LastGetCoinTime; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - object.CodeType = message.CodeType; - return object; - }; - - /** - * Converts this SCRebateTotalInfo to JSON. - * @function toJSON - * @memberof gamehall.SCRebateTotalInfo - * @instance - * @returns {Object.} JSON object - */ - SCRebateTotalInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRebateTotalInfo - * @function getTypeUrl - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRebateTotalInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRebateTotalInfo"; - }; - - return SCRebateTotalInfo; - })(); - - gamehall.CSCodeTypeRecord = (function() { - - /** - * Properties of a CSCodeTypeRecord. - * @memberof gamehall - * @interface ICSCodeTypeRecord - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSCodeTypeRecord ShowTypeId - */ - - /** - * Constructs a new CSCodeTypeRecord. - * @memberof gamehall - * @classdesc Represents a CSCodeTypeRecord. - * @implements ICSCodeTypeRecord - * @constructor - * @param {gamehall.ICSCodeTypeRecord=} [properties] Properties to set - */ - function CSCodeTypeRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCodeTypeRecord ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSCodeTypeRecord - * @instance - */ - CSCodeTypeRecord.prototype.ShowTypeId = 0; - - /** - * Creates a new CSCodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord instance - */ - CSCodeTypeRecord.create = function create(properties) { - return new CSCodeTypeRecord(properties); - }; - - /** - * Encodes the specified CSCodeTypeRecord message. Does not implicitly {@link gamehall.CSCodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord} message CSCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - return writer; - }; - - /** - * Encodes the specified CSCodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.CSCodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord} message CSCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCodeTypeRecord message. - * @function verify - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - return null; - }; - - /** - * Creates a CSCodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - */ - CSCodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCodeTypeRecord) - return object; - var message = new $root.gamehall.CSCodeTypeRecord(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - return message; - }; - - /** - * Creates a plain object from a CSCodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.CSCodeTypeRecord} message CSCodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - return object; - }; - - /** - * Converts this CSCodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.CSCodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - CSCodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCodeTypeRecord"; - }; - - return CSCodeTypeRecord; - })(); - - gamehall.CodeTypeRecord = (function() { - - /** - * Properties of a CodeTypeRecord. - * @memberof gamehall - * @interface ICodeTypeRecord - * @property {string|null} [GameName] CodeTypeRecord GameName - * @property {number|Long|null} [GameBetCoin] CodeTypeRecord GameBetCoin - * @property {number|null} [Rate] CodeTypeRecord Rate - * @property {number|null} [Coin] CodeTypeRecord Coin - * @property {number|null} [MinCoin] CodeTypeRecord MinCoin - * @property {number|null} [MaxCoin] CodeTypeRecord MaxCoin - */ - - /** - * Constructs a new CodeTypeRecord. - * @memberof gamehall - * @classdesc 洗码列表 - * @implements ICodeTypeRecord - * @constructor - * @param {gamehall.ICodeTypeRecord=} [properties] Properties to set - */ - function CodeTypeRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CodeTypeRecord GameName. - * @member {string} GameName - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.GameName = ""; - - /** - * CodeTypeRecord GameBetCoin. - * @member {number|Long} GameBetCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.GameBetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CodeTypeRecord Rate. - * @member {number} Rate - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.Rate = 0; - - /** - * CodeTypeRecord Coin. - * @member {number} Coin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.Coin = 0; - - /** - * CodeTypeRecord MinCoin. - * @member {number} MinCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.MinCoin = 0; - - /** - * CodeTypeRecord MaxCoin. - * @member {number} MaxCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.MaxCoin = 0; - - /** - * Creates a new CodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord instance - */ - CodeTypeRecord.create = function create(properties) { - return new CodeTypeRecord(properties); - }; - - /** - * Encodes the specified CodeTypeRecord message. Does not implicitly {@link gamehall.CodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord} message CodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameName != null && Object.hasOwnProperty.call(message, "GameName")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.GameName); - if (message.GameBetCoin != null && Object.hasOwnProperty.call(message, "GameBetCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.GameBetCoin); - if (message.Rate != null && Object.hasOwnProperty.call(message, "Rate")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Rate); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Coin); - if (message.MinCoin != null && Object.hasOwnProperty.call(message, "MinCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MinCoin); - if (message.MaxCoin != null && Object.hasOwnProperty.call(message, "MaxCoin")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxCoin); - return writer; - }; - - /** - * Encodes the specified CodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.CodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord} message CodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameName = reader.string(); - break; - } - case 2: { - message.GameBetCoin = reader.int64(); - break; - } - case 3: { - message.Rate = reader.int32(); - break; - } - case 4: { - message.Coin = reader.int32(); - break; - } - case 5: { - message.MinCoin = reader.int32(); - break; - } - case 6: { - message.MaxCoin = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CodeTypeRecord message. - * @function verify - * @memberof gamehall.CodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameName != null && message.hasOwnProperty("GameName")) - if (!$util.isString(message.GameName)) - return "GameName: string expected"; - if (message.GameBetCoin != null && message.hasOwnProperty("GameBetCoin")) - if (!$util.isInteger(message.GameBetCoin) && !(message.GameBetCoin && $util.isInteger(message.GameBetCoin.low) && $util.isInteger(message.GameBetCoin.high))) - return "GameBetCoin: integer|Long expected"; - if (message.Rate != null && message.hasOwnProperty("Rate")) - if (!$util.isInteger(message.Rate)) - return "Rate: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - if (message.MinCoin != null && message.hasOwnProperty("MinCoin")) - if (!$util.isInteger(message.MinCoin)) - return "MinCoin: integer expected"; - if (message.MaxCoin != null && message.hasOwnProperty("MaxCoin")) - if (!$util.isInteger(message.MaxCoin)) - return "MaxCoin: integer expected"; - return null; - }; - - /** - * Creates a CodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - */ - CodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CodeTypeRecord) - return object; - var message = new $root.gamehall.CodeTypeRecord(); - if (object.GameName != null) - message.GameName = String(object.GameName); - if (object.GameBetCoin != null) - if ($util.Long) - (message.GameBetCoin = $util.Long.fromValue(object.GameBetCoin)).unsigned = false; - else if (typeof object.GameBetCoin === "string") - message.GameBetCoin = parseInt(object.GameBetCoin, 10); - else if (typeof object.GameBetCoin === "number") - message.GameBetCoin = object.GameBetCoin; - else if (typeof object.GameBetCoin === "object") - message.GameBetCoin = new $util.LongBits(object.GameBetCoin.low >>> 0, object.GameBetCoin.high >>> 0).toNumber(); - if (object.Rate != null) - message.Rate = object.Rate | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - if (object.MinCoin != null) - message.MinCoin = object.MinCoin | 0; - if (object.MaxCoin != null) - message.MaxCoin = object.MaxCoin | 0; - return message; - }; - - /** - * Creates a plain object from a CodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.CodeTypeRecord} message CodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameName = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.GameBetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.GameBetCoin = options.longs === String ? "0" : 0; - object.Rate = 0; - object.Coin = 0; - object.MinCoin = 0; - object.MaxCoin = 0; - } - if (message.GameName != null && message.hasOwnProperty("GameName")) - object.GameName = message.GameName; - if (message.GameBetCoin != null && message.hasOwnProperty("GameBetCoin")) - if (typeof message.GameBetCoin === "number") - object.GameBetCoin = options.longs === String ? String(message.GameBetCoin) : message.GameBetCoin; - else - object.GameBetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.GameBetCoin) : options.longs === Number ? new $util.LongBits(message.GameBetCoin.low >>> 0, message.GameBetCoin.high >>> 0).toNumber() : message.GameBetCoin; - if (message.Rate != null && message.hasOwnProperty("Rate")) - object.Rate = message.Rate; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - if (message.MinCoin != null && message.hasOwnProperty("MinCoin")) - object.MinCoin = message.MinCoin; - if (message.MaxCoin != null && message.hasOwnProperty("MaxCoin")) - object.MaxCoin = message.MaxCoin; - return object; - }; - - /** - * Converts this CodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.CodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - CodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.CodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CodeTypeRecord"; - }; - - return CodeTypeRecord; - })(); - - gamehall.SCCodeTypeRecord = (function() { - - /** - * Properties of a SCCodeTypeRecord. - * @memberof gamehall - * @interface ISCCodeTypeRecord - * @property {gamehall.HallOperaCode|null} [ShowType] SCCodeTypeRecord ShowType - * @property {Array.|null} [CodeTypeRecord] SCCodeTypeRecord CodeTypeRecord - */ - - /** - * Constructs a new SCCodeTypeRecord. - * @memberof gamehall - * @classdesc Represents a SCCodeTypeRecord. - * @implements ISCCodeTypeRecord - * @constructor - * @param {gamehall.ISCCodeTypeRecord=} [properties] Properties to set - */ - function SCCodeTypeRecord(properties) { - this.CodeTypeRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCodeTypeRecord ShowType. - * @member {gamehall.HallOperaCode} ShowType - * @memberof gamehall.SCCodeTypeRecord - * @instance - */ - SCCodeTypeRecord.prototype.ShowType = 0; - - /** - * SCCodeTypeRecord CodeTypeRecord. - * @member {Array.} CodeTypeRecord - * @memberof gamehall.SCCodeTypeRecord - * @instance - */ - SCCodeTypeRecord.prototype.CodeTypeRecord = $util.emptyArray; - - /** - * Creates a new SCCodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord instance - */ - SCCodeTypeRecord.create = function create(properties) { - return new SCCodeTypeRecord(properties); - }; - - /** - * Encodes the specified SCCodeTypeRecord message. Does not implicitly {@link gamehall.SCCodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord} message SCCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.CodeTypeRecord != null && message.CodeTypeRecord.length) - for (var i = 0; i < message.CodeTypeRecord.length; ++i) - $root.gamehall.CodeTypeRecord.encode(message.CodeTypeRecord[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCCodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.SCCodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord} message SCCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - if (!(message.CodeTypeRecord && message.CodeTypeRecord.length)) - message.CodeTypeRecord = []; - message.CodeTypeRecord.push($root.gamehall.CodeTypeRecord.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCodeTypeRecord message. - * @function verify - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - switch (message.ShowType) { - default: - return "ShowType: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.CodeTypeRecord != null && message.hasOwnProperty("CodeTypeRecord")) { - if (!Array.isArray(message.CodeTypeRecord)) - return "CodeTypeRecord: array expected"; - for (var i = 0; i < message.CodeTypeRecord.length; ++i) { - var error = $root.gamehall.CodeTypeRecord.verify(message.CodeTypeRecord[i]); - if (error) - return "CodeTypeRecord." + error; - } - } - return null; - }; - - /** - * Creates a SCCodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - */ - SCCodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCodeTypeRecord) - return object; - var message = new $root.gamehall.SCCodeTypeRecord(); - switch (object.ShowType) { - default: - if (typeof object.ShowType === "number") { - message.ShowType = object.ShowType; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowType = 0; - break; - case "HallChessGame": - case 1: - message.ShowType = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowType = 2; - break; - case "HallFishingGame": - case 3: - message.ShowType = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowType = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowType = 5; - break; - case "HallSportsGame": - case 6: - message.ShowType = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowType = 7; - break; - case "HallClubRoom": - case 8: - message.ShowType = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowType = 101; - break; - } - if (object.CodeTypeRecord) { - if (!Array.isArray(object.CodeTypeRecord)) - throw TypeError(".gamehall.SCCodeTypeRecord.CodeTypeRecord: array expected"); - message.CodeTypeRecord = []; - for (var i = 0; i < object.CodeTypeRecord.length; ++i) { - if (typeof object.CodeTypeRecord[i] !== "object") - throw TypeError(".gamehall.SCCodeTypeRecord.CodeTypeRecord: object expected"); - message.CodeTypeRecord[i] = $root.gamehall.CodeTypeRecord.fromObject(object.CodeTypeRecord[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCCodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.SCCodeTypeRecord} message SCCodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.CodeTypeRecord = []; - if (options.defaults) - object.ShowType = options.enums === String ? "HallOperaZero" : 0; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowType] === undefined ? message.ShowType : $root.gamehall.HallOperaCode[message.ShowType] : message.ShowType; - if (message.CodeTypeRecord && message.CodeTypeRecord.length) { - object.CodeTypeRecord = []; - for (var j = 0; j < message.CodeTypeRecord.length; ++j) - object.CodeTypeRecord[j] = $root.gamehall.CodeTypeRecord.toObject(message.CodeTypeRecord[j], options); - } - return object; - }; - - /** - * Converts this SCCodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.SCCodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - SCCodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCodeTypeRecord"; - }; - - return SCCodeTypeRecord; - })(); - - gamehall.CSBetCoinRecord = (function() { - - /** - * Properties of a CSBetCoinRecord. - * @memberof gamehall - * @interface ICSBetCoinRecord - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSBetCoinRecord ShowTypeId - * @property {number|Long|null} [TimeIndex] CSBetCoinRecord TimeIndex - * @property {number|null} [PageNo] CSBetCoinRecord PageNo - */ - - /** - * Constructs a new CSBetCoinRecord. - * @memberof gamehall - * @classdesc Represents a CSBetCoinRecord. - * @implements ICSBetCoinRecord - * @constructor - * @param {gamehall.ICSBetCoinRecord=} [properties] Properties to set - */ - function CSBetCoinRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSBetCoinRecord ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.ShowTypeId = 0; - - /** - * CSBetCoinRecord TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSBetCoinRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.PageNo = 0; - - /** - * Creates a new CSBetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord instance - */ - CSBetCoinRecord.create = function create(properties) { - return new CSBetCoinRecord(properties); - }; - - /** - * Encodes the specified CSBetCoinRecord message. Does not implicitly {@link gamehall.CSBetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord} message CSBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSBetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.TimeIndex); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSBetCoinRecord message, length delimited. Does not implicitly {@link gamehall.CSBetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord} message CSBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSBetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSBetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSBetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSBetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - case 2: { - message.TimeIndex = reader.int64(); - break; - } - case 3: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSBetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSBetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSBetCoinRecord message. - * @function verify - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSBetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSBetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - */ - CSBetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSBetCoinRecord) - return object; - var message = new $root.gamehall.CSBetCoinRecord(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSBetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.CSBetCoinRecord} message CSBetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSBetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - object.PageNo = 0; - } - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSBetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.CSBetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - CSBetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSBetCoinRecord - * @function getTypeUrl - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSBetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSBetCoinRecord"; - }; - - return CSBetCoinRecord; - })(); - - gamehall.BetCoinRecord = (function() { - - /** - * Properties of a BetCoinRecord. - * @memberof gamehall - * @interface IBetCoinRecord - * @property {number|Long|null} [Ts] BetCoinRecord Ts - * @property {string|null} [GameName] BetCoinRecord GameName - * @property {string|null} [RecordId] BetCoinRecord RecordId - * @property {number|Long|null} [BetCoin] BetCoinRecord BetCoin - * @property {number|Long|null} [ReceivedCoin] BetCoinRecord ReceivedCoin - */ - - /** - * Constructs a new BetCoinRecord. - * @memberof gamehall - * @classdesc 投注记录 - * @implements IBetCoinRecord - * @constructor - * @param {gamehall.IBetCoinRecord=} [properties] Properties to set - */ - function BetCoinRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BetCoinRecord Ts. - * @member {number|Long} Ts - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BetCoinRecord GameName. - * @member {string} GameName - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.GameName = ""; - - /** - * BetCoinRecord RecordId. - * @member {string} RecordId - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.RecordId = ""; - - /** - * BetCoinRecord BetCoin. - * @member {number|Long} BetCoin - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.BetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BetCoinRecord ReceivedCoin. - * @member {number|Long} ReceivedCoin - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.ReceivedCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new BetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.BetCoinRecord} BetCoinRecord instance - */ - BetCoinRecord.create = function create(properties) { - return new BetCoinRecord(properties); - }; - - /** - * Encodes the specified BetCoinRecord message. Does not implicitly {@link gamehall.BetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord} message BetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.GameName != null && Object.hasOwnProperty.call(message, "GameName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameName); - if (message.RecordId != null && Object.hasOwnProperty.call(message, "RecordId")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.RecordId); - if (message.BetCoin != null && Object.hasOwnProperty.call(message, "BetCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.BetCoin); - if (message.ReceivedCoin != null && Object.hasOwnProperty.call(message, "ReceivedCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.ReceivedCoin); - return writer; - }; - - /** - * Encodes the specified BetCoinRecord message, length delimited. Does not implicitly {@link gamehall.BetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord} message BetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BetCoinRecord} BetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.GameName = reader.string(); - break; - } - case 3: { - message.RecordId = reader.string(); - break; - } - case 4: { - message.BetCoin = reader.int64(); - break; - } - case 5: { - message.ReceivedCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BetCoinRecord} BetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BetCoinRecord message. - * @function verify - * @memberof gamehall.BetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.GameName != null && message.hasOwnProperty("GameName")) - if (!$util.isString(message.GameName)) - return "GameName: string expected"; - if (message.RecordId != null && message.hasOwnProperty("RecordId")) - if (!$util.isString(message.RecordId)) - return "RecordId: string expected"; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (!$util.isInteger(message.BetCoin) && !(message.BetCoin && $util.isInteger(message.BetCoin.low) && $util.isInteger(message.BetCoin.high))) - return "BetCoin: integer|Long expected"; - if (message.ReceivedCoin != null && message.hasOwnProperty("ReceivedCoin")) - if (!$util.isInteger(message.ReceivedCoin) && !(message.ReceivedCoin && $util.isInteger(message.ReceivedCoin.low) && $util.isInteger(message.ReceivedCoin.high))) - return "ReceivedCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a BetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BetCoinRecord} BetCoinRecord - */ - BetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BetCoinRecord) - return object; - var message = new $root.gamehall.BetCoinRecord(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.GameName != null) - message.GameName = String(object.GameName); - if (object.RecordId != null) - message.RecordId = String(object.RecordId); - if (object.BetCoin != null) - if ($util.Long) - (message.BetCoin = $util.Long.fromValue(object.BetCoin)).unsigned = false; - else if (typeof object.BetCoin === "string") - message.BetCoin = parseInt(object.BetCoin, 10); - else if (typeof object.BetCoin === "number") - message.BetCoin = object.BetCoin; - else if (typeof object.BetCoin === "object") - message.BetCoin = new $util.LongBits(object.BetCoin.low >>> 0, object.BetCoin.high >>> 0).toNumber(); - if (object.ReceivedCoin != null) - if ($util.Long) - (message.ReceivedCoin = $util.Long.fromValue(object.ReceivedCoin)).unsigned = false; - else if (typeof object.ReceivedCoin === "string") - message.ReceivedCoin = parseInt(object.ReceivedCoin, 10); - else if (typeof object.ReceivedCoin === "number") - message.ReceivedCoin = object.ReceivedCoin; - else if (typeof object.ReceivedCoin === "object") - message.ReceivedCoin = new $util.LongBits(object.ReceivedCoin.low >>> 0, object.ReceivedCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a BetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.BetCoinRecord} message BetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.GameName = ""; - object.RecordId = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BetCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ReceivedCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ReceivedCoin = options.longs === String ? "0" : 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.GameName != null && message.hasOwnProperty("GameName")) - object.GameName = message.GameName; - if (message.RecordId != null && message.hasOwnProperty("RecordId")) - object.RecordId = message.RecordId; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (typeof message.BetCoin === "number") - object.BetCoin = options.longs === String ? String(message.BetCoin) : message.BetCoin; - else - object.BetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.BetCoin) : options.longs === Number ? new $util.LongBits(message.BetCoin.low >>> 0, message.BetCoin.high >>> 0).toNumber() : message.BetCoin; - if (message.ReceivedCoin != null && message.hasOwnProperty("ReceivedCoin")) - if (typeof message.ReceivedCoin === "number") - object.ReceivedCoin = options.longs === String ? String(message.ReceivedCoin) : message.ReceivedCoin; - else - object.ReceivedCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ReceivedCoin) : options.longs === Number ? new $util.LongBits(message.ReceivedCoin.low >>> 0, message.ReceivedCoin.high >>> 0).toNumber() : message.ReceivedCoin; - return object; - }; - - /** - * Converts this BetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.BetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - BetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BetCoinRecord - * @function getTypeUrl - * @memberof gamehall.BetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BetCoinRecord"; - }; - - return BetCoinRecord; - })(); - - gamehall.SCBetCoinRecord = (function() { - - /** - * Properties of a SCBetCoinRecord. - * @memberof gamehall - * @interface ISCBetCoinRecord - * @property {Array.|null} [BetCoinRecord] SCBetCoinRecord BetCoinRecord - * @property {number|null} [PageNo] SCBetCoinRecord PageNo - * @property {number|null} [PageSize] SCBetCoinRecord PageSize - * @property {number|null} [PageNum] SCBetCoinRecord PageNum - */ - - /** - * Constructs a new SCBetCoinRecord. - * @memberof gamehall - * @classdesc Represents a SCBetCoinRecord. - * @implements ISCBetCoinRecord - * @constructor - * @param {gamehall.ISCBetCoinRecord=} [properties] Properties to set - */ - function SCBetCoinRecord(properties) { - this.BetCoinRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCBetCoinRecord BetCoinRecord. - * @member {Array.} BetCoinRecord - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.BetCoinRecord = $util.emptyArray; - - /** - * SCBetCoinRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageNo = 0; - - /** - * SCBetCoinRecord PageSize. - * @member {number} PageSize - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageSize = 0; - - /** - * SCBetCoinRecord PageNum. - * @member {number} PageNum - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageNum = 0; - - /** - * Creates a new SCBetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord instance - */ - SCBetCoinRecord.create = function create(properties) { - return new SCBetCoinRecord(properties); - }; - - /** - * Encodes the specified SCBetCoinRecord message. Does not implicitly {@link gamehall.SCBetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord} message SCBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.BetCoinRecord != null && message.BetCoinRecord.length) - for (var i = 0; i < message.BetCoinRecord.length; ++i) - $root.gamehall.BetCoinRecord.encode(message.BetCoinRecord[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCBetCoinRecord message, length delimited. Does not implicitly {@link gamehall.SCBetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord} message SCBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCBetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCBetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.BetCoinRecord && message.BetCoinRecord.length)) - message.BetCoinRecord = []; - message.BetCoinRecord.push($root.gamehall.BetCoinRecord.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCBetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCBetCoinRecord message. - * @function verify - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCBetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.BetCoinRecord != null && message.hasOwnProperty("BetCoinRecord")) { - if (!Array.isArray(message.BetCoinRecord)) - return "BetCoinRecord: array expected"; - for (var i = 0; i < message.BetCoinRecord.length; ++i) { - var error = $root.gamehall.BetCoinRecord.verify(message.BetCoinRecord[i]); - if (error) - return "BetCoinRecord." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCBetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - */ - SCBetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCBetCoinRecord) - return object; - var message = new $root.gamehall.SCBetCoinRecord(); - if (object.BetCoinRecord) { - if (!Array.isArray(object.BetCoinRecord)) - throw TypeError(".gamehall.SCBetCoinRecord.BetCoinRecord: array expected"); - message.BetCoinRecord = []; - for (var i = 0; i < object.BetCoinRecord.length; ++i) { - if (typeof object.BetCoinRecord[i] !== "object") - throw TypeError(".gamehall.SCBetCoinRecord.BetCoinRecord: object expected"); - message.BetCoinRecord[i] = $root.gamehall.BetCoinRecord.fromObject(object.BetCoinRecord[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCBetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.SCBetCoinRecord} message SCBetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCBetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.BetCoinRecord = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.BetCoinRecord && message.BetCoinRecord.length) { - object.BetCoinRecord = []; - for (var j = 0; j < message.BetCoinRecord.length; ++j) - object.BetCoinRecord[j] = $root.gamehall.BetCoinRecord.toObject(message.BetCoinRecord[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCBetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.SCBetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - SCBetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCBetCoinRecord - * @function getTypeUrl - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCBetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCBetCoinRecord"; - }; - - return SCBetCoinRecord; - })(); - - gamehall.CSCoinDetailed = (function() { - - /** - * Properties of a CSCoinDetailed. - * @memberof gamehall - * @interface ICSCoinDetailed - * @property {number|Long|null} [TimeIndex] CSCoinDetailed TimeIndex - * @property {number|Long|null} [CoinType] CSCoinDetailed CoinType - * @property {number|null} [PageNo] CSCoinDetailed PageNo - */ - - /** - * Constructs a new CSCoinDetailed. - * @memberof gamehall - * @classdesc Represents a CSCoinDetailed. - * @implements ICSCoinDetailed - * @constructor - * @param {gamehall.ICSCoinDetailed=} [properties] Properties to set - */ - function CSCoinDetailed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinDetailed TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSCoinDetailed CoinType. - * @member {number|Long} CoinType - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.CoinType = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSCoinDetailed PageNo. - * @member {number} PageNo - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.PageNo = 0; - - /** - * Creates a new CSCoinDetailed instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed=} [properties] Properties to set - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed instance - */ - CSCoinDetailed.create = function create(properties) { - return new CSCoinDetailed(properties); - }; - - /** - * Encodes the specified CSCoinDetailed message. Does not implicitly {@link gamehall.CSCoinDetailed.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed} message CSCoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinDetailed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.TimeIndex); - if (message.CoinType != null && Object.hasOwnProperty.call(message, "CoinType")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CoinType); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSCoinDetailed message, length delimited. Does not implicitly {@link gamehall.CSCoinDetailed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed} message CSCoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinDetailed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinDetailed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinDetailed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinDetailed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.TimeIndex = reader.int64(); - break; - } - case 2: { - message.CoinType = reader.int64(); - break; - } - case 3: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinDetailed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinDetailed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinDetailed message. - * @function verify - * @memberof gamehall.CSCoinDetailed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinDetailed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (!$util.isInteger(message.CoinType) && !(message.CoinType && $util.isInteger(message.CoinType.low) && $util.isInteger(message.CoinType.high))) - return "CoinType: integer|Long expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSCoinDetailed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinDetailed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - */ - CSCoinDetailed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinDetailed) - return object; - var message = new $root.gamehall.CSCoinDetailed(); - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - if (object.CoinType != null) - if ($util.Long) - (message.CoinType = $util.Long.fromValue(object.CoinType)).unsigned = false; - else if (typeof object.CoinType === "string") - message.CoinType = parseInt(object.CoinType, 10); - else if (typeof object.CoinType === "number") - message.CoinType = object.CoinType; - else if (typeof object.CoinType === "object") - message.CoinType = new $util.LongBits(object.CoinType.low >>> 0, object.CoinType.high >>> 0).toNumber(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinDetailed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.CSCoinDetailed} message CSCoinDetailed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinDetailed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CoinType = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CoinType = options.longs === String ? "0" : 0; - object.PageNo = 0; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (typeof message.CoinType === "number") - object.CoinType = options.longs === String ? String(message.CoinType) : message.CoinType; - else - object.CoinType = options.longs === String ? $util.Long.prototype.toString.call(message.CoinType) : options.longs === Number ? new $util.LongBits(message.CoinType.low >>> 0, message.CoinType.high >>> 0).toNumber() : message.CoinType; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSCoinDetailed to JSON. - * @function toJSON - * @memberof gamehall.CSCoinDetailed - * @instance - * @returns {Object.} JSON object - */ - CSCoinDetailed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinDetailed - * @function getTypeUrl - * @memberof gamehall.CSCoinDetailed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinDetailed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinDetailed"; - }; - - return CSCoinDetailed; - })(); - - gamehall.CoinDetailed = (function() { - - /** - * Properties of a CoinDetailed. - * @memberof gamehall - * @interface ICoinDetailed - * @property {number|Long|null} [Ts] CoinDetailed Ts - * @property {number|Long|null} [CoinType] CoinDetailed CoinType - * @property {number|Long|null} [Income] CoinDetailed Income - * @property {number|Long|null} [Disburse] CoinDetailed Disburse - * @property {number|Long|null} [Coin] CoinDetailed Coin - */ - - /** - * Constructs a new CoinDetailed. - * @memberof gamehall - * @classdesc 账户明细 - * @implements ICoinDetailed - * @constructor - * @param {gamehall.ICoinDetailed=} [properties] Properties to set - */ - function CoinDetailed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CoinDetailed Ts. - * @member {number|Long} Ts - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed CoinType. - * @member {number|Long} CoinType - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.CoinType = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Income. - * @member {number|Long} Income - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Income = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Disburse. - * @member {number|Long} Disburse - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Disburse = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Coin. - * @member {number|Long} Coin - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CoinDetailed instance using the specified properties. - * @function create - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed=} [properties] Properties to set - * @returns {gamehall.CoinDetailed} CoinDetailed instance - */ - CoinDetailed.create = function create(properties) { - return new CoinDetailed(properties); - }; - - /** - * Encodes the specified CoinDetailed message. Does not implicitly {@link gamehall.CoinDetailed.verify|verify} messages. - * @function encode - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed} message CoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinDetailed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.CoinType != null && Object.hasOwnProperty.call(message, "CoinType")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CoinType); - if (message.Income != null && Object.hasOwnProperty.call(message, "Income")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Income); - if (message.Disburse != null && Object.hasOwnProperty.call(message, "Disburse")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Disburse); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified CoinDetailed message, length delimited. Does not implicitly {@link gamehall.CoinDetailed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed} message CoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinDetailed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CoinDetailed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CoinDetailed} CoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinDetailed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CoinDetailed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.CoinType = reader.int64(); - break; - } - case 3: { - message.Income = reader.int64(); - break; - } - case 4: { - message.Disburse = reader.int64(); - break; - } - case 5: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CoinDetailed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CoinDetailed} CoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinDetailed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CoinDetailed message. - * @function verify - * @memberof gamehall.CoinDetailed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CoinDetailed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (!$util.isInteger(message.CoinType) && !(message.CoinType && $util.isInteger(message.CoinType.low) && $util.isInteger(message.CoinType.high))) - return "CoinType: integer|Long expected"; - if (message.Income != null && message.hasOwnProperty("Income")) - if (!$util.isInteger(message.Income) && !(message.Income && $util.isInteger(message.Income.low) && $util.isInteger(message.Income.high))) - return "Income: integer|Long expected"; - if (message.Disburse != null && message.hasOwnProperty("Disburse")) - if (!$util.isInteger(message.Disburse) && !(message.Disburse && $util.isInteger(message.Disburse.low) && $util.isInteger(message.Disburse.high))) - return "Disburse: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a CoinDetailed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CoinDetailed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CoinDetailed} CoinDetailed - */ - CoinDetailed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CoinDetailed) - return object; - var message = new $root.gamehall.CoinDetailed(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.CoinType != null) - if ($util.Long) - (message.CoinType = $util.Long.fromValue(object.CoinType)).unsigned = false; - else if (typeof object.CoinType === "string") - message.CoinType = parseInt(object.CoinType, 10); - else if (typeof object.CoinType === "number") - message.CoinType = object.CoinType; - else if (typeof object.CoinType === "object") - message.CoinType = new $util.LongBits(object.CoinType.low >>> 0, object.CoinType.high >>> 0).toNumber(); - if (object.Income != null) - if ($util.Long) - (message.Income = $util.Long.fromValue(object.Income)).unsigned = false; - else if (typeof object.Income === "string") - message.Income = parseInt(object.Income, 10); - else if (typeof object.Income === "number") - message.Income = object.Income; - else if (typeof object.Income === "object") - message.Income = new $util.LongBits(object.Income.low >>> 0, object.Income.high >>> 0).toNumber(); - if (object.Disburse != null) - if ($util.Long) - (message.Disburse = $util.Long.fromValue(object.Disburse)).unsigned = false; - else if (typeof object.Disburse === "string") - message.Disburse = parseInt(object.Disburse, 10); - else if (typeof object.Disburse === "number") - message.Disburse = object.Disburse; - else if (typeof object.Disburse === "object") - message.Disburse = new $util.LongBits(object.Disburse.low >>> 0, object.Disburse.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CoinDetailed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.CoinDetailed} message CoinDetailed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CoinDetailed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CoinType = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CoinType = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Income = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Income = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Disburse = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Disburse = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (typeof message.CoinType === "number") - object.CoinType = options.longs === String ? String(message.CoinType) : message.CoinType; - else - object.CoinType = options.longs === String ? $util.Long.prototype.toString.call(message.CoinType) : options.longs === Number ? new $util.LongBits(message.CoinType.low >>> 0, message.CoinType.high >>> 0).toNumber() : message.CoinType; - if (message.Income != null && message.hasOwnProperty("Income")) - if (typeof message.Income === "number") - object.Income = options.longs === String ? String(message.Income) : message.Income; - else - object.Income = options.longs === String ? $util.Long.prototype.toString.call(message.Income) : options.longs === Number ? new $util.LongBits(message.Income.low >>> 0, message.Income.high >>> 0).toNumber() : message.Income; - if (message.Disburse != null && message.hasOwnProperty("Disburse")) - if (typeof message.Disburse === "number") - object.Disburse = options.longs === String ? String(message.Disburse) : message.Disburse; - else - object.Disburse = options.longs === String ? $util.Long.prototype.toString.call(message.Disburse) : options.longs === Number ? new $util.LongBits(message.Disburse.low >>> 0, message.Disburse.high >>> 0).toNumber() : message.Disburse; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this CoinDetailed to JSON. - * @function toJSON - * @memberof gamehall.CoinDetailed - * @instance - * @returns {Object.} JSON object - */ - CoinDetailed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CoinDetailed - * @function getTypeUrl - * @memberof gamehall.CoinDetailed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CoinDetailed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CoinDetailed"; - }; - - return CoinDetailed; - })(); - - gamehall.SCCoinDetailedTotal = (function() { - - /** - * Properties of a SCCoinDetailedTotal. - * @memberof gamehall - * @interface ISCCoinDetailedTotal - * @property {Array.|null} [CoinDetailed] SCCoinDetailedTotal CoinDetailed - * @property {number|null} [PageNo] SCCoinDetailedTotal PageNo - * @property {number|null} [PageSize] SCCoinDetailedTotal PageSize - * @property {number|null} [PageNum] SCCoinDetailedTotal PageNum - */ - - /** - * Constructs a new SCCoinDetailedTotal. - * @memberof gamehall - * @classdesc Represents a SCCoinDetailedTotal. - * @implements ISCCoinDetailedTotal - * @constructor - * @param {gamehall.ISCCoinDetailedTotal=} [properties] Properties to set - */ - function SCCoinDetailedTotal(properties) { - this.CoinDetailed = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinDetailedTotal CoinDetailed. - * @member {Array.} CoinDetailed - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.CoinDetailed = $util.emptyArray; - - /** - * SCCoinDetailedTotal PageNo. - * @member {number} PageNo - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageNo = 0; - - /** - * SCCoinDetailedTotal PageSize. - * @member {number} PageSize - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageSize = 0; - - /** - * SCCoinDetailedTotal PageNum. - * @member {number} PageNum - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageNum = 0; - - /** - * Creates a new SCCoinDetailedTotal instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal=} [properties] Properties to set - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal instance - */ - SCCoinDetailedTotal.create = function create(properties) { - return new SCCoinDetailedTotal(properties); - }; - - /** - * Encodes the specified SCCoinDetailedTotal message. Does not implicitly {@link gamehall.SCCoinDetailedTotal.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal} message SCCoinDetailedTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinDetailedTotal.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.CoinDetailed != null && message.CoinDetailed.length) - for (var i = 0; i < message.CoinDetailed.length; ++i) - $root.gamehall.CoinDetailed.encode(message.CoinDetailed[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCCoinDetailedTotal message, length delimited. Does not implicitly {@link gamehall.SCCoinDetailedTotal.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal} message SCCoinDetailedTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinDetailedTotal.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinDetailedTotal message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinDetailedTotal.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinDetailedTotal(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.CoinDetailed && message.CoinDetailed.length)) - message.CoinDetailed = []; - message.CoinDetailed.push($root.gamehall.CoinDetailed.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinDetailedTotal message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinDetailedTotal.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinDetailedTotal message. - * @function verify - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinDetailedTotal.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.CoinDetailed != null && message.hasOwnProperty("CoinDetailed")) { - if (!Array.isArray(message.CoinDetailed)) - return "CoinDetailed: array expected"; - for (var i = 0; i < message.CoinDetailed.length; ++i) { - var error = $root.gamehall.CoinDetailed.verify(message.CoinDetailed[i]); - if (error) - return "CoinDetailed." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCCoinDetailedTotal message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - */ - SCCoinDetailedTotal.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinDetailedTotal) - return object; - var message = new $root.gamehall.SCCoinDetailedTotal(); - if (object.CoinDetailed) { - if (!Array.isArray(object.CoinDetailed)) - throw TypeError(".gamehall.SCCoinDetailedTotal.CoinDetailed: array expected"); - message.CoinDetailed = []; - for (var i = 0; i < object.CoinDetailed.length; ++i) { - if (typeof object.CoinDetailed[i] !== "object") - throw TypeError(".gamehall.SCCoinDetailedTotal.CoinDetailed: object expected"); - message.CoinDetailed[i] = $root.gamehall.CoinDetailed.fromObject(object.CoinDetailed[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCCoinDetailedTotal message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.SCCoinDetailedTotal} message SCCoinDetailedTotal - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinDetailedTotal.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.CoinDetailed = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.CoinDetailed && message.CoinDetailed.length) { - object.CoinDetailed = []; - for (var j = 0; j < message.CoinDetailed.length; ++j) - object.CoinDetailed[j] = $root.gamehall.CoinDetailed.toObject(message.CoinDetailed[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCCoinDetailedTotal to JSON. - * @function toJSON - * @memberof gamehall.SCCoinDetailedTotal - * @instance - * @returns {Object.} JSON object - */ - SCCoinDetailedTotal.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinDetailedTotal - * @function getTypeUrl - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinDetailedTotal.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinDetailedTotal"; - }; - - return SCCoinDetailedTotal; - })(); - - gamehall.SCCoinTotal = (function() { - - /** - * Properties of a SCCoinTotal. - * @memberof gamehall - * @interface ISCCoinTotal - * @property {number|Long|null} [RechargeCoin] SCCoinTotal RechargeCoin - * @property {number|Long|null} [ExchangeCoin] SCCoinTotal ExchangeCoin - * @property {number|Long|null} [ClubAddCoin] SCCoinTotal ClubAddCoin - * @property {number|Long|null} [RebateCoin] SCCoinTotal RebateCoin - * @property {number|Long|null} [Activity] SCCoinTotal Activity - * @property {Array.|null} [TransactionType] SCCoinTotal TransactionType - */ - - /** - * Constructs a new SCCoinTotal. - * @memberof gamehall - * @classdesc Represents a SCCoinTotal. - * @implements ISCCoinTotal - * @constructor - * @param {gamehall.ISCCoinTotal=} [properties] Properties to set - */ - function SCCoinTotal(properties) { - this.TransactionType = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinTotal RechargeCoin. - * @member {number|Long} RechargeCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.RechargeCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal ExchangeCoin. - * @member {number|Long} ExchangeCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.ExchangeCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal ClubAddCoin. - * @member {number|Long} ClubAddCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.ClubAddCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal RebateCoin. - * @member {number|Long} RebateCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.RebateCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal Activity. - * @member {number|Long} Activity - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.Activity = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal TransactionType. - * @member {Array.} TransactionType - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.TransactionType = $util.emptyArray; - - /** - * Creates a new SCCoinTotal instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal=} [properties] Properties to set - * @returns {gamehall.SCCoinTotal} SCCoinTotal instance - */ - SCCoinTotal.create = function create(properties) { - return new SCCoinTotal(properties); - }; - - /** - * Encodes the specified SCCoinTotal message. Does not implicitly {@link gamehall.SCCoinTotal.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal} message SCCoinTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinTotal.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RechargeCoin != null && Object.hasOwnProperty.call(message, "RechargeCoin")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.RechargeCoin); - if (message.ExchangeCoin != null && Object.hasOwnProperty.call(message, "ExchangeCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.ExchangeCoin); - if (message.ClubAddCoin != null && Object.hasOwnProperty.call(message, "ClubAddCoin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.ClubAddCoin); - if (message.RebateCoin != null && Object.hasOwnProperty.call(message, "RebateCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.RebateCoin); - if (message.Activity != null && Object.hasOwnProperty.call(message, "Activity")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.Activity); - if (message.TransactionType != null && message.TransactionType.length) { - writer.uint32(/* id 6, wireType 2 =*/50).fork(); - for (var i = 0; i < message.TransactionType.length; ++i) - writer.int32(message.TransactionType[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinTotal message, length delimited. Does not implicitly {@link gamehall.SCCoinTotal.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal} message SCCoinTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinTotal.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinTotal message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinTotal} SCCoinTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinTotal.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinTotal(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RechargeCoin = reader.int64(); - break; - } - case 2: { - message.ExchangeCoin = reader.int64(); - break; - } - case 3: { - message.ClubAddCoin = reader.int64(); - break; - } - case 4: { - message.RebateCoin = reader.int64(); - break; - } - case 5: { - message.Activity = reader.int64(); - break; - } - case 6: { - if (!(message.TransactionType && message.TransactionType.length)) - message.TransactionType = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.TransactionType.push(reader.int32()); - } else - message.TransactionType.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinTotal message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinTotal} SCCoinTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinTotal.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinTotal message. - * @function verify - * @memberof gamehall.SCCoinTotal - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinTotal.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RechargeCoin != null && message.hasOwnProperty("RechargeCoin")) - if (!$util.isInteger(message.RechargeCoin) && !(message.RechargeCoin && $util.isInteger(message.RechargeCoin.low) && $util.isInteger(message.RechargeCoin.high))) - return "RechargeCoin: integer|Long expected"; - if (message.ExchangeCoin != null && message.hasOwnProperty("ExchangeCoin")) - if (!$util.isInteger(message.ExchangeCoin) && !(message.ExchangeCoin && $util.isInteger(message.ExchangeCoin.low) && $util.isInteger(message.ExchangeCoin.high))) - return "ExchangeCoin: integer|Long expected"; - if (message.ClubAddCoin != null && message.hasOwnProperty("ClubAddCoin")) - if (!$util.isInteger(message.ClubAddCoin) && !(message.ClubAddCoin && $util.isInteger(message.ClubAddCoin.low) && $util.isInteger(message.ClubAddCoin.high))) - return "ClubAddCoin: integer|Long expected"; - if (message.RebateCoin != null && message.hasOwnProperty("RebateCoin")) - if (!$util.isInteger(message.RebateCoin) && !(message.RebateCoin && $util.isInteger(message.RebateCoin.low) && $util.isInteger(message.RebateCoin.high))) - return "RebateCoin: integer|Long expected"; - if (message.Activity != null && message.hasOwnProperty("Activity")) - if (!$util.isInteger(message.Activity) && !(message.Activity && $util.isInteger(message.Activity.low) && $util.isInteger(message.Activity.high))) - return "Activity: integer|Long expected"; - if (message.TransactionType != null && message.hasOwnProperty("TransactionType")) { - if (!Array.isArray(message.TransactionType)) - return "TransactionType: array expected"; - for (var i = 0; i < message.TransactionType.length; ++i) - if (!$util.isInteger(message.TransactionType[i])) - return "TransactionType: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinTotal message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinTotal - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinTotal} SCCoinTotal - */ - SCCoinTotal.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinTotal) - return object; - var message = new $root.gamehall.SCCoinTotal(); - if (object.RechargeCoin != null) - if ($util.Long) - (message.RechargeCoin = $util.Long.fromValue(object.RechargeCoin)).unsigned = false; - else if (typeof object.RechargeCoin === "string") - message.RechargeCoin = parseInt(object.RechargeCoin, 10); - else if (typeof object.RechargeCoin === "number") - message.RechargeCoin = object.RechargeCoin; - else if (typeof object.RechargeCoin === "object") - message.RechargeCoin = new $util.LongBits(object.RechargeCoin.low >>> 0, object.RechargeCoin.high >>> 0).toNumber(); - if (object.ExchangeCoin != null) - if ($util.Long) - (message.ExchangeCoin = $util.Long.fromValue(object.ExchangeCoin)).unsigned = false; - else if (typeof object.ExchangeCoin === "string") - message.ExchangeCoin = parseInt(object.ExchangeCoin, 10); - else if (typeof object.ExchangeCoin === "number") - message.ExchangeCoin = object.ExchangeCoin; - else if (typeof object.ExchangeCoin === "object") - message.ExchangeCoin = new $util.LongBits(object.ExchangeCoin.low >>> 0, object.ExchangeCoin.high >>> 0).toNumber(); - if (object.ClubAddCoin != null) - if ($util.Long) - (message.ClubAddCoin = $util.Long.fromValue(object.ClubAddCoin)).unsigned = false; - else if (typeof object.ClubAddCoin === "string") - message.ClubAddCoin = parseInt(object.ClubAddCoin, 10); - else if (typeof object.ClubAddCoin === "number") - message.ClubAddCoin = object.ClubAddCoin; - else if (typeof object.ClubAddCoin === "object") - message.ClubAddCoin = new $util.LongBits(object.ClubAddCoin.low >>> 0, object.ClubAddCoin.high >>> 0).toNumber(); - if (object.RebateCoin != null) - if ($util.Long) - (message.RebateCoin = $util.Long.fromValue(object.RebateCoin)).unsigned = false; - else if (typeof object.RebateCoin === "string") - message.RebateCoin = parseInt(object.RebateCoin, 10); - else if (typeof object.RebateCoin === "number") - message.RebateCoin = object.RebateCoin; - else if (typeof object.RebateCoin === "object") - message.RebateCoin = new $util.LongBits(object.RebateCoin.low >>> 0, object.RebateCoin.high >>> 0).toNumber(); - if (object.Activity != null) - if ($util.Long) - (message.Activity = $util.Long.fromValue(object.Activity)).unsigned = false; - else if (typeof object.Activity === "string") - message.Activity = parseInt(object.Activity, 10); - else if (typeof object.Activity === "number") - message.Activity = object.Activity; - else if (typeof object.Activity === "object") - message.Activity = new $util.LongBits(object.Activity.low >>> 0, object.Activity.high >>> 0).toNumber(); - if (object.TransactionType) { - if (!Array.isArray(object.TransactionType)) - throw TypeError(".gamehall.SCCoinTotal.TransactionType: array expected"); - message.TransactionType = []; - for (var i = 0; i < object.TransactionType.length; ++i) - message.TransactionType[i] = object.TransactionType[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinTotal message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.SCCoinTotal} message SCCoinTotal - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinTotal.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.TransactionType = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RechargeCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RechargeCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ExchangeCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ExchangeCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ClubAddCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ClubAddCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RebateCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RebateCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Activity = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Activity = options.longs === String ? "0" : 0; - } - if (message.RechargeCoin != null && message.hasOwnProperty("RechargeCoin")) - if (typeof message.RechargeCoin === "number") - object.RechargeCoin = options.longs === String ? String(message.RechargeCoin) : message.RechargeCoin; - else - object.RechargeCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RechargeCoin) : options.longs === Number ? new $util.LongBits(message.RechargeCoin.low >>> 0, message.RechargeCoin.high >>> 0).toNumber() : message.RechargeCoin; - if (message.ExchangeCoin != null && message.hasOwnProperty("ExchangeCoin")) - if (typeof message.ExchangeCoin === "number") - object.ExchangeCoin = options.longs === String ? String(message.ExchangeCoin) : message.ExchangeCoin; - else - object.ExchangeCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ExchangeCoin) : options.longs === Number ? new $util.LongBits(message.ExchangeCoin.low >>> 0, message.ExchangeCoin.high >>> 0).toNumber() : message.ExchangeCoin; - if (message.ClubAddCoin != null && message.hasOwnProperty("ClubAddCoin")) - if (typeof message.ClubAddCoin === "number") - object.ClubAddCoin = options.longs === String ? String(message.ClubAddCoin) : message.ClubAddCoin; - else - object.ClubAddCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ClubAddCoin) : options.longs === Number ? new $util.LongBits(message.ClubAddCoin.low >>> 0, message.ClubAddCoin.high >>> 0).toNumber() : message.ClubAddCoin; - if (message.RebateCoin != null && message.hasOwnProperty("RebateCoin")) - if (typeof message.RebateCoin === "number") - object.RebateCoin = options.longs === String ? String(message.RebateCoin) : message.RebateCoin; - else - object.RebateCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RebateCoin) : options.longs === Number ? new $util.LongBits(message.RebateCoin.low >>> 0, message.RebateCoin.high >>> 0).toNumber() : message.RebateCoin; - if (message.Activity != null && message.hasOwnProperty("Activity")) - if (typeof message.Activity === "number") - object.Activity = options.longs === String ? String(message.Activity) : message.Activity; - else - object.Activity = options.longs === String ? $util.Long.prototype.toString.call(message.Activity) : options.longs === Number ? new $util.LongBits(message.Activity.low >>> 0, message.Activity.high >>> 0).toNumber() : message.Activity; - if (message.TransactionType && message.TransactionType.length) { - object.TransactionType = []; - for (var j = 0; j < message.TransactionType.length; ++j) - object.TransactionType[j] = message.TransactionType[j]; - } - return object; - }; - - /** - * Converts this SCCoinTotal to JSON. - * @function toJSON - * @memberof gamehall.SCCoinTotal - * @instance - * @returns {Object.} JSON object - */ - SCCoinTotal.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinTotal - * @function getTypeUrl - * @memberof gamehall.SCCoinTotal - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinTotal.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinTotal"; - }; - - return SCCoinTotal; - })(); - - gamehall.CSReportForm = (function() { - - /** - * Properties of a CSReportForm. - * @memberof gamehall - * @interface ICSReportForm - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSReportForm ShowTypeId - * @property {number|Long|null} [TimeIndex] CSReportForm TimeIndex - */ - - /** - * Constructs a new CSReportForm. - * @memberof gamehall - * @classdesc Represents a CSReportForm. - * @implements ICSReportForm - * @constructor - * @param {gamehall.ICSReportForm=} [properties] Properties to set - */ - function CSReportForm(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSReportForm ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSReportForm - * @instance - */ - CSReportForm.prototype.ShowTypeId = 0; - - /** - * CSReportForm TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSReportForm - * @instance - */ - CSReportForm.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSReportForm instance using the specified properties. - * @function create - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm=} [properties] Properties to set - * @returns {gamehall.CSReportForm} CSReportForm instance - */ - CSReportForm.create = function create(properties) { - return new CSReportForm(properties); - }; - - /** - * Encodes the specified CSReportForm message. Does not implicitly {@link gamehall.CSReportForm.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm} message CSReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReportForm.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.TimeIndex); - return writer; - }; - - /** - * Encodes the specified CSReportForm message, length delimited. Does not implicitly {@link gamehall.CSReportForm.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm} message CSReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReportForm.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReportForm message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReportForm} CSReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReportForm.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReportForm(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - case 2: { - message.TimeIndex = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReportForm message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReportForm} CSReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReportForm.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReportForm message. - * @function verify - * @memberof gamehall.CSReportForm - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReportForm.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - return null; - }; - - /** - * Creates a CSReportForm message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReportForm - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReportForm} CSReportForm - */ - CSReportForm.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReportForm) - return object; - var message = new $root.gamehall.CSReportForm(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSReportForm message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.CSReportForm} message CSReportForm - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReportForm.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - } - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - return object; - }; - - /** - * Converts this CSReportForm to JSON. - * @function toJSON - * @memberof gamehall.CSReportForm - * @instance - * @returns {Object.} JSON object - */ - CSReportForm.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReportForm - * @function getTypeUrl - * @memberof gamehall.CSReportForm - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReportForm.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReportForm"; - }; - - return CSReportForm; - })(); - - gamehall.SCReportForm = (function() { - - /** - * Properties of a SCReportForm. - * @memberof gamehall - * @interface ISCReportForm - * @property {number|null} [ShowType] SCReportForm ShowType - * @property {number|Long|null} [ProfitCoin] SCReportForm ProfitCoin - * @property {number|Long|null} [BetCoin] SCReportForm BetCoin - * @property {number|Long|null} [FlowCoin] SCReportForm FlowCoin - */ - - /** - * Constructs a new SCReportForm. - * @memberof gamehall - * @classdesc Represents a SCReportForm. - * @implements ISCReportForm - * @constructor - * @param {gamehall.ISCReportForm=} [properties] Properties to set - */ - function SCReportForm(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReportForm ShowType. - * @member {number} ShowType - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.ShowType = 0; - - /** - * SCReportForm ProfitCoin. - * @member {number|Long} ProfitCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.ProfitCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCReportForm BetCoin. - * @member {number|Long} BetCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.BetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCReportForm FlowCoin. - * @member {number|Long} FlowCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.FlowCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReportForm instance using the specified properties. - * @function create - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm=} [properties] Properties to set - * @returns {gamehall.SCReportForm} SCReportForm instance - */ - SCReportForm.create = function create(properties) { - return new SCReportForm(properties); - }; - - /** - * Encodes the specified SCReportForm message. Does not implicitly {@link gamehall.SCReportForm.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm} message SCReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReportForm.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.ProfitCoin != null && Object.hasOwnProperty.call(message, "ProfitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.ProfitCoin); - if (message.BetCoin != null && Object.hasOwnProperty.call(message, "BetCoin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.BetCoin); - if (message.FlowCoin != null && Object.hasOwnProperty.call(message, "FlowCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.FlowCoin); - return writer; - }; - - /** - * Encodes the specified SCReportForm message, length delimited. Does not implicitly {@link gamehall.SCReportForm.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm} message SCReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReportForm.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReportForm message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReportForm} SCReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReportForm.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReportForm(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - message.ProfitCoin = reader.int64(); - break; - } - case 3: { - message.BetCoin = reader.int64(); - break; - } - case 4: { - message.FlowCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReportForm message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReportForm} SCReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReportForm.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReportForm message. - * @function verify - * @memberof gamehall.SCReportForm - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReportForm.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - if (!$util.isInteger(message.ShowType)) - return "ShowType: integer expected"; - if (message.ProfitCoin != null && message.hasOwnProperty("ProfitCoin")) - if (!$util.isInteger(message.ProfitCoin) && !(message.ProfitCoin && $util.isInteger(message.ProfitCoin.low) && $util.isInteger(message.ProfitCoin.high))) - return "ProfitCoin: integer|Long expected"; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (!$util.isInteger(message.BetCoin) && !(message.BetCoin && $util.isInteger(message.BetCoin.low) && $util.isInteger(message.BetCoin.high))) - return "BetCoin: integer|Long expected"; - if (message.FlowCoin != null && message.hasOwnProperty("FlowCoin")) - if (!$util.isInteger(message.FlowCoin) && !(message.FlowCoin && $util.isInteger(message.FlowCoin.low) && $util.isInteger(message.FlowCoin.high))) - return "FlowCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReportForm message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReportForm - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReportForm} SCReportForm - */ - SCReportForm.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReportForm) - return object; - var message = new $root.gamehall.SCReportForm(); - if (object.ShowType != null) - message.ShowType = object.ShowType | 0; - if (object.ProfitCoin != null) - if ($util.Long) - (message.ProfitCoin = $util.Long.fromValue(object.ProfitCoin)).unsigned = false; - else if (typeof object.ProfitCoin === "string") - message.ProfitCoin = parseInt(object.ProfitCoin, 10); - else if (typeof object.ProfitCoin === "number") - message.ProfitCoin = object.ProfitCoin; - else if (typeof object.ProfitCoin === "object") - message.ProfitCoin = new $util.LongBits(object.ProfitCoin.low >>> 0, object.ProfitCoin.high >>> 0).toNumber(); - if (object.BetCoin != null) - if ($util.Long) - (message.BetCoin = $util.Long.fromValue(object.BetCoin)).unsigned = false; - else if (typeof object.BetCoin === "string") - message.BetCoin = parseInt(object.BetCoin, 10); - else if (typeof object.BetCoin === "number") - message.BetCoin = object.BetCoin; - else if (typeof object.BetCoin === "object") - message.BetCoin = new $util.LongBits(object.BetCoin.low >>> 0, object.BetCoin.high >>> 0).toNumber(); - if (object.FlowCoin != null) - if ($util.Long) - (message.FlowCoin = $util.Long.fromValue(object.FlowCoin)).unsigned = false; - else if (typeof object.FlowCoin === "string") - message.FlowCoin = parseInt(object.FlowCoin, 10); - else if (typeof object.FlowCoin === "number") - message.FlowCoin = object.FlowCoin; - else if (typeof object.FlowCoin === "object") - message.FlowCoin = new $util.LongBits(object.FlowCoin.low >>> 0, object.FlowCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReportForm message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.SCReportForm} message SCReportForm - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReportForm.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowType = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ProfitCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ProfitCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BetCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.FlowCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.FlowCoin = options.longs === String ? "0" : 0; - } - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = message.ShowType; - if (message.ProfitCoin != null && message.hasOwnProperty("ProfitCoin")) - if (typeof message.ProfitCoin === "number") - object.ProfitCoin = options.longs === String ? String(message.ProfitCoin) : message.ProfitCoin; - else - object.ProfitCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ProfitCoin) : options.longs === Number ? new $util.LongBits(message.ProfitCoin.low >>> 0, message.ProfitCoin.high >>> 0).toNumber() : message.ProfitCoin; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (typeof message.BetCoin === "number") - object.BetCoin = options.longs === String ? String(message.BetCoin) : message.BetCoin; - else - object.BetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.BetCoin) : options.longs === Number ? new $util.LongBits(message.BetCoin.low >>> 0, message.BetCoin.high >>> 0).toNumber() : message.BetCoin; - if (message.FlowCoin != null && message.hasOwnProperty("FlowCoin")) - if (typeof message.FlowCoin === "number") - object.FlowCoin = options.longs === String ? String(message.FlowCoin) : message.FlowCoin; - else - object.FlowCoin = options.longs === String ? $util.Long.prototype.toString.call(message.FlowCoin) : options.longs === Number ? new $util.LongBits(message.FlowCoin.low >>> 0, message.FlowCoin.high >>> 0).toNumber() : message.FlowCoin; - return object; - }; - - /** - * Converts this SCReportForm to JSON. - * @function toJSON - * @memberof gamehall.SCReportForm - * @instance - * @returns {Object.} JSON object - */ - SCReportForm.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReportForm - * @function getTypeUrl - * @memberof gamehall.SCReportForm - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReportForm.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReportForm"; - }; - - return SCReportForm; - })(); - - gamehall.CSHistoryRecord = (function() { - - /** - * Properties of a CSHistoryRecord. - * @memberof gamehall - * @interface ICSHistoryRecord - * @property {number|null} [PageNo] CSHistoryRecord PageNo - */ - - /** - * Constructs a new CSHistoryRecord. - * @memberof gamehall - * @classdesc Represents a CSHistoryRecord. - * @implements ICSHistoryRecord - * @constructor - * @param {gamehall.ICSHistoryRecord=} [properties] Properties to set - */ - function CSHistoryRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHistoryRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.CSHistoryRecord - * @instance - */ - CSHistoryRecord.prototype.PageNo = 0; - - /** - * Creates a new CSHistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord=} [properties] Properties to set - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord instance - */ - CSHistoryRecord.create = function create(properties) { - return new CSHistoryRecord(properties); - }; - - /** - * Encodes the specified CSHistoryRecord message. Does not implicitly {@link gamehall.CSHistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord} message CSHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSHistoryRecord message, length delimited. Does not implicitly {@link gamehall.CSHistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord} message CSHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHistoryRecord message. - * @function verify - * @memberof gamehall.CSHistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSHistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - */ - CSHistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHistoryRecord) - return object; - var message = new $root.gamehall.CSHistoryRecord(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSHistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.CSHistoryRecord} message CSHistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.PageNo = 0; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSHistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.CSHistoryRecord - * @instance - * @returns {Object.} JSON object - */ - CSHistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHistoryRecord - * @function getTypeUrl - * @memberof gamehall.CSHistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHistoryRecord"; - }; - - return CSHistoryRecord; - })(); - - gamehall.HistoryRecord = (function() { - - /** - * Properties of a HistoryRecord. - * @memberof gamehall - * @interface IHistoryRecord - * @property {number|Long|null} [Ts] HistoryRecord Ts - * @property {number|null} [CodeCoin] HistoryRecord CodeCoin - * @property {number|null} [Coin] HistoryRecord Coin - * @property {number|null} [ReceiveType] HistoryRecord ReceiveType - */ - - /** - * Constructs a new HistoryRecord. - * @memberof gamehall - * @classdesc Represents a HistoryRecord. - * @implements IHistoryRecord - * @constructor - * @param {gamehall.IHistoryRecord=} [properties] Properties to set - */ - function HistoryRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HistoryRecord Ts. - * @member {number|Long} Ts - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * HistoryRecord CodeCoin. - * @member {number} CodeCoin - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.CodeCoin = 0; - - /** - * HistoryRecord Coin. - * @member {number} Coin - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.Coin = 0; - - /** - * HistoryRecord ReceiveType. - * @member {number} ReceiveType - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.ReceiveType = 0; - - /** - * Creates a new HistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord=} [properties] Properties to set - * @returns {gamehall.HistoryRecord} HistoryRecord instance - */ - HistoryRecord.create = function create(properties) { - return new HistoryRecord(properties); - }; - - /** - * Encodes the specified HistoryRecord message. Does not implicitly {@link gamehall.HistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord} message HistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.CodeCoin != null && Object.hasOwnProperty.call(message, "CodeCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.CodeCoin); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Coin); - if (message.ReceiveType != null && Object.hasOwnProperty.call(message, "ReceiveType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ReceiveType); - return writer; - }; - - /** - * Encodes the specified HistoryRecord message, length delimited. Does not implicitly {@link gamehall.HistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord} message HistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HistoryRecord} HistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.CodeCoin = reader.int32(); - break; - } - case 3: { - message.Coin = reader.int32(); - break; - } - case 4: { - message.ReceiveType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HistoryRecord} HistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HistoryRecord message. - * @function verify - * @memberof gamehall.HistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.CodeCoin != null && message.hasOwnProperty("CodeCoin")) - if (!$util.isInteger(message.CodeCoin)) - return "CodeCoin: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - if (message.ReceiveType != null && message.hasOwnProperty("ReceiveType")) - if (!$util.isInteger(message.ReceiveType)) - return "ReceiveType: integer expected"; - return null; - }; - - /** - * Creates a HistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HistoryRecord} HistoryRecord - */ - HistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HistoryRecord) - return object; - var message = new $root.gamehall.HistoryRecord(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.CodeCoin != null) - message.CodeCoin = object.CodeCoin | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - if (object.ReceiveType != null) - message.ReceiveType = object.ReceiveType | 0; - return message; - }; - - /** - * Creates a plain object from a HistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.HistoryRecord} message HistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.CodeCoin = 0; - object.Coin = 0; - object.ReceiveType = 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.CodeCoin != null && message.hasOwnProperty("CodeCoin")) - object.CodeCoin = message.CodeCoin; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - if (message.ReceiveType != null && message.hasOwnProperty("ReceiveType")) - object.ReceiveType = message.ReceiveType; - return object; - }; - - /** - * Converts this HistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.HistoryRecord - * @instance - * @returns {Object.} JSON object - */ - HistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HistoryRecord - * @function getTypeUrl - * @memberof gamehall.HistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HistoryRecord"; - }; - - return HistoryRecord; - })(); - - gamehall.SCHistoryRecord = (function() { - - /** - * Properties of a SCHistoryRecord. - * @memberof gamehall - * @interface ISCHistoryRecord - * @property {Array.|null} [HistoryRecord] SCHistoryRecord HistoryRecord - * @property {number|null} [PageNo] SCHistoryRecord PageNo - * @property {number|null} [PageSize] SCHistoryRecord PageSize - * @property {number|null} [PageNum] SCHistoryRecord PageNum - */ - - /** - * Constructs a new SCHistoryRecord. - * @memberof gamehall - * @classdesc Represents a SCHistoryRecord. - * @implements ISCHistoryRecord - * @constructor - * @param {gamehall.ISCHistoryRecord=} [properties] Properties to set - */ - function SCHistoryRecord(properties) { - this.HistoryRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHistoryRecord HistoryRecord. - * @member {Array.} HistoryRecord - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.HistoryRecord = $util.emptyArray; - - /** - * SCHistoryRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageNo = 0; - - /** - * SCHistoryRecord PageSize. - * @member {number} PageSize - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageSize = 0; - - /** - * SCHistoryRecord PageNum. - * @member {number} PageNum - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageNum = 0; - - /** - * Creates a new SCHistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord=} [properties] Properties to set - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord instance - */ - SCHistoryRecord.create = function create(properties) { - return new SCHistoryRecord(properties); - }; - - /** - * Encodes the specified SCHistoryRecord message. Does not implicitly {@link gamehall.SCHistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord} message SCHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HistoryRecord != null && message.HistoryRecord.length) - for (var i = 0; i < message.HistoryRecord.length; ++i) - $root.gamehall.HistoryRecord.encode(message.HistoryRecord[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCHistoryRecord message, length delimited. Does not implicitly {@link gamehall.SCHistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord} message SCHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.HistoryRecord && message.HistoryRecord.length)) - message.HistoryRecord = []; - message.HistoryRecord.push($root.gamehall.HistoryRecord.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHistoryRecord message. - * @function verify - * @memberof gamehall.SCHistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HistoryRecord != null && message.hasOwnProperty("HistoryRecord")) { - if (!Array.isArray(message.HistoryRecord)) - return "HistoryRecord: array expected"; - for (var i = 0; i < message.HistoryRecord.length; ++i) { - var error = $root.gamehall.HistoryRecord.verify(message.HistoryRecord[i]); - if (error) - return "HistoryRecord." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCHistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - */ - SCHistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHistoryRecord) - return object; - var message = new $root.gamehall.SCHistoryRecord(); - if (object.HistoryRecord) { - if (!Array.isArray(object.HistoryRecord)) - throw TypeError(".gamehall.SCHistoryRecord.HistoryRecord: array expected"); - message.HistoryRecord = []; - for (var i = 0; i < object.HistoryRecord.length; ++i) { - if (typeof object.HistoryRecord[i] !== "object") - throw TypeError(".gamehall.SCHistoryRecord.HistoryRecord: object expected"); - message.HistoryRecord[i] = $root.gamehall.HistoryRecord.fromObject(object.HistoryRecord[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCHistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.SCHistoryRecord} message SCHistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.HistoryRecord = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.HistoryRecord && message.HistoryRecord.length) { - object.HistoryRecord = []; - for (var j = 0; j < message.HistoryRecord.length; ++j) - object.HistoryRecord[j] = $root.gamehall.HistoryRecord.toObject(message.HistoryRecord[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCHistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.SCHistoryRecord - * @instance - * @returns {Object.} JSON object - */ - SCHistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHistoryRecord - * @function getTypeUrl - * @memberof gamehall.SCHistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHistoryRecord"; - }; - - return SCHistoryRecord; - })(); - - gamehall.CSReceiveCodeCoin = (function() { - - /** - * Properties of a CSReceiveCodeCoin. - * @memberof gamehall - * @interface ICSReceiveCodeCoin - */ - - /** - * Constructs a new CSReceiveCodeCoin. - * @memberof gamehall - * @classdesc Represents a CSReceiveCodeCoin. - * @implements ICSReceiveCodeCoin - * @constructor - * @param {gamehall.ICSReceiveCodeCoin=} [properties] Properties to set - */ - function CSReceiveCodeCoin(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSReceiveCodeCoin instance using the specified properties. - * @function create - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin=} [properties] Properties to set - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin instance - */ - CSReceiveCodeCoin.create = function create(properties) { - return new CSReceiveCodeCoin(properties); - }; - - /** - * Encodes the specified CSReceiveCodeCoin message. Does not implicitly {@link gamehall.CSReceiveCodeCoin.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin} message CSReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveCodeCoin.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSReceiveCodeCoin message, length delimited. Does not implicitly {@link gamehall.CSReceiveCodeCoin.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin} message CSReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveCodeCoin.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReceiveCodeCoin message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveCodeCoin.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReceiveCodeCoin(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReceiveCodeCoin message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveCodeCoin.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReceiveCodeCoin message. - * @function verify - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReceiveCodeCoin.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSReceiveCodeCoin message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - */ - CSReceiveCodeCoin.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReceiveCodeCoin) - return object; - return new $root.gamehall.CSReceiveCodeCoin(); - }; - - /** - * Creates a plain object from a CSReceiveCodeCoin message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.CSReceiveCodeCoin} message CSReceiveCodeCoin - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReceiveCodeCoin.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSReceiveCodeCoin to JSON. - * @function toJSON - * @memberof gamehall.CSReceiveCodeCoin - * @instance - * @returns {Object.} JSON object - */ - CSReceiveCodeCoin.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReceiveCodeCoin - * @function getTypeUrl - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReceiveCodeCoin.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReceiveCodeCoin"; - }; - - return CSReceiveCodeCoin; - })(); - - gamehall.SCReceiveCodeCoin = (function() { - - /** - * Properties of a SCReceiveCodeCoin. - * @memberof gamehall - * @interface ISCReceiveCodeCoin - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCReceiveCodeCoin OpRetCode - * @property {number|Long|null} [Coin] SCReceiveCodeCoin Coin - */ - - /** - * Constructs a new SCReceiveCodeCoin. - * @memberof gamehall - * @classdesc Represents a SCReceiveCodeCoin. - * @implements ISCReceiveCodeCoin - * @constructor - * @param {gamehall.ISCReceiveCodeCoin=} [properties] Properties to set - */ - function SCReceiveCodeCoin(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReceiveCodeCoin OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCReceiveCodeCoin - * @instance - */ - SCReceiveCodeCoin.prototype.OpRetCode = 0; - - /** - * SCReceiveCodeCoin Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCReceiveCodeCoin - * @instance - */ - SCReceiveCodeCoin.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReceiveCodeCoin instance using the specified properties. - * @function create - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin=} [properties] Properties to set - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin instance - */ - SCReceiveCodeCoin.create = function create(properties) { - return new SCReceiveCodeCoin(properties); - }; - - /** - * Encodes the specified SCReceiveCodeCoin message. Does not implicitly {@link gamehall.SCReceiveCodeCoin.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin} message SCReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveCodeCoin.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCReceiveCodeCoin message, length delimited. Does not implicitly {@link gamehall.SCReceiveCodeCoin.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin} message SCReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveCodeCoin.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReceiveCodeCoin message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveCodeCoin.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReceiveCodeCoin(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReceiveCodeCoin message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveCodeCoin.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReceiveCodeCoin message. - * @function verify - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReceiveCodeCoin.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReceiveCodeCoin message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - */ - SCReceiveCodeCoin.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReceiveCodeCoin) - return object; - var message = new $root.gamehall.SCReceiveCodeCoin(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReceiveCodeCoin message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.SCReceiveCodeCoin} message SCReceiveCodeCoin - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReceiveCodeCoin.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCReceiveCodeCoin to JSON. - * @function toJSON - * @memberof gamehall.SCReceiveCodeCoin - * @instance - * @returns {Object.} JSON object - */ - SCReceiveCodeCoin.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReceiveCodeCoin - * @function getTypeUrl - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReceiveCodeCoin.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReceiveCodeCoin"; - }; - - return SCReceiveCodeCoin; - })(); - - gamehall.CSGetRankInfo = (function() { - - /** - * Properties of a CSGetRankInfo. - * @memberof gamehall - * @interface ICSGetRankInfo - * @property {string|null} [Plt] CSGetRankInfo Plt - * @property {number|null} [GameFreeId] CSGetRankInfo GameFreeId - */ - - /** - * Constructs a new CSGetRankInfo. - * @memberof gamehall - * @classdesc Represents a CSGetRankInfo. - * @implements ICSGetRankInfo - * @constructor - * @param {gamehall.ICSGetRankInfo=} [properties] Properties to set - */ - function CSGetRankInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetRankInfo Plt. - * @member {string} Plt - * @memberof gamehall.CSGetRankInfo - * @instance - */ - CSGetRankInfo.prototype.Plt = ""; - - /** - * CSGetRankInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSGetRankInfo - * @instance - */ - CSGetRankInfo.prototype.GameFreeId = 0; - - /** - * Creates a new CSGetRankInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo=} [properties] Properties to set - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo instance - */ - CSGetRankInfo.create = function create(properties) { - return new CSGetRankInfo(properties); - }; - - /** - * Encodes the specified CSGetRankInfo message. Does not implicitly {@link gamehall.CSGetRankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo} message CSGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetRankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Plt != null && Object.hasOwnProperty.call(message, "Plt")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Plt); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified CSGetRankInfo message, length delimited. Does not implicitly {@link gamehall.CSGetRankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo} message CSGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetRankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetRankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetRankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetRankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Plt = reader.string(); - break; - } - case 2: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetRankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetRankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetRankInfo message. - * @function verify - * @memberof gamehall.CSGetRankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetRankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Plt != null && message.hasOwnProperty("Plt")) - if (!$util.isString(message.Plt)) - return "Plt: string expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a CSGetRankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetRankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - */ - CSGetRankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetRankInfo) - return object; - var message = new $root.gamehall.CSGetRankInfo(); - if (object.Plt != null) - message.Plt = String(object.Plt); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetRankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.CSGetRankInfo} message CSGetRankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetRankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Plt = ""; - object.GameFreeId = 0; - } - if (message.Plt != null && message.hasOwnProperty("Plt")) - object.Plt = message.Plt; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this CSGetRankInfo to JSON. - * @function toJSON - * @memberof gamehall.CSGetRankInfo - * @instance - * @returns {Object.} JSON object - */ - CSGetRankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetRankInfo - * @function getTypeUrl - * @memberof gamehall.CSGetRankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetRankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetRankInfo"; - }; - - return CSGetRankInfo; - })(); - - gamehall.RankInfo = (function() { - - /** - * Properties of a RankInfo. - * @memberof gamehall - * @interface IRankInfo - * @property {number|null} [Snid] RankInfo Snid - * @property {string|null} [Name] RankInfo Name - * @property {number|Long|null} [TotalIn] RankInfo TotalIn - * @property {number|Long|null} [TotalOut] RankInfo TotalOut - */ - - /** - * Constructs a new RankInfo. - * @memberof gamehall - * @classdesc Represents a RankInfo. - * @implements IRankInfo - * @constructor - * @param {gamehall.IRankInfo=} [properties] Properties to set - */ - function RankInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RankInfo Snid. - * @member {number} Snid - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.Snid = 0; - - /** - * RankInfo Name. - * @member {string} Name - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.Name = ""; - - /** - * RankInfo TotalIn. - * @member {number|Long} TotalIn - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.TotalIn = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * RankInfo TotalOut. - * @member {number|Long} TotalOut - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.TotalOut = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new RankInfo instance using the specified properties. - * @function create - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo=} [properties] Properties to set - * @returns {gamehall.RankInfo} RankInfo instance - */ - RankInfo.create = function create(properties) { - return new RankInfo(properties); - }; - - /** - * Encodes the specified RankInfo message. Does not implicitly {@link gamehall.RankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo} message RankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Snid != null && Object.hasOwnProperty.call(message, "Snid")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Snid); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.TotalIn != null && Object.hasOwnProperty.call(message, "TotalIn")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalIn); - if (message.TotalOut != null && Object.hasOwnProperty.call(message, "TotalOut")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalOut); - return writer; - }; - - /** - * Encodes the specified RankInfo message, length delimited. Does not implicitly {@link gamehall.RankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo} message RankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RankInfo} RankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Snid = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.TotalIn = reader.int64(); - break; - } - case 4: { - message.TotalOut = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RankInfo} RankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RankInfo message. - * @function verify - * @memberof gamehall.RankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Snid != null && message.hasOwnProperty("Snid")) - if (!$util.isInteger(message.Snid)) - return "Snid: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (!$util.isInteger(message.TotalIn) && !(message.TotalIn && $util.isInteger(message.TotalIn.low) && $util.isInteger(message.TotalIn.high))) - return "TotalIn: integer|Long expected"; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (!$util.isInteger(message.TotalOut) && !(message.TotalOut && $util.isInteger(message.TotalOut.low) && $util.isInteger(message.TotalOut.high))) - return "TotalOut: integer|Long expected"; - return null; - }; - - /** - * Creates a RankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RankInfo} RankInfo - */ - RankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RankInfo) - return object; - var message = new $root.gamehall.RankInfo(); - if (object.Snid != null) - message.Snid = object.Snid | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.TotalIn != null) - if ($util.Long) - (message.TotalIn = $util.Long.fromValue(object.TotalIn)).unsigned = false; - else if (typeof object.TotalIn === "string") - message.TotalIn = parseInt(object.TotalIn, 10); - else if (typeof object.TotalIn === "number") - message.TotalIn = object.TotalIn; - else if (typeof object.TotalIn === "object") - message.TotalIn = new $util.LongBits(object.TotalIn.low >>> 0, object.TotalIn.high >>> 0).toNumber(); - if (object.TotalOut != null) - if ($util.Long) - (message.TotalOut = $util.Long.fromValue(object.TotalOut)).unsigned = false; - else if (typeof object.TotalOut === "string") - message.TotalOut = parseInt(object.TotalOut, 10); - else if (typeof object.TotalOut === "number") - message.TotalOut = object.TotalOut; - else if (typeof object.TotalOut === "object") - message.TotalOut = new $util.LongBits(object.TotalOut.low >>> 0, object.TotalOut.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a RankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.RankInfo} message RankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Snid = 0; - object.Name = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalIn = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalIn = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalOut = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalOut = options.longs === String ? "0" : 0; - } - if (message.Snid != null && message.hasOwnProperty("Snid")) - object.Snid = message.Snid; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (typeof message.TotalIn === "number") - object.TotalIn = options.longs === String ? String(message.TotalIn) : message.TotalIn; - else - object.TotalIn = options.longs === String ? $util.Long.prototype.toString.call(message.TotalIn) : options.longs === Number ? new $util.LongBits(message.TotalIn.low >>> 0, message.TotalIn.high >>> 0).toNumber() : message.TotalIn; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (typeof message.TotalOut === "number") - object.TotalOut = options.longs === String ? String(message.TotalOut) : message.TotalOut; - else - object.TotalOut = options.longs === String ? $util.Long.prototype.toString.call(message.TotalOut) : options.longs === Number ? new $util.LongBits(message.TotalOut.low >>> 0, message.TotalOut.high >>> 0).toNumber() : message.TotalOut; - return object; - }; - - /** - * Converts this RankInfo to JSON. - * @function toJSON - * @memberof gamehall.RankInfo - * @instance - * @returns {Object.} JSON object - */ - RankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RankInfo - * @function getTypeUrl - * @memberof gamehall.RankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RankInfo"; - }; - - return RankInfo; - })(); - - gamehall.SCGetRankInfo = (function() { - - /** - * Properties of a SCGetRankInfo. - * @memberof gamehall - * @interface ISCGetRankInfo - * @property {Array.|null} [Info] SCGetRankInfo Info - */ - - /** - * Constructs a new SCGetRankInfo. - * @memberof gamehall - * @classdesc Represents a SCGetRankInfo. - * @implements ISCGetRankInfo - * @constructor - * @param {gamehall.ISCGetRankInfo=} [properties] Properties to set - */ - function SCGetRankInfo(properties) { - this.Info = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetRankInfo Info. - * @member {Array.} Info - * @memberof gamehall.SCGetRankInfo - * @instance - */ - SCGetRankInfo.prototype.Info = $util.emptyArray; - - /** - * Creates a new SCGetRankInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo=} [properties] Properties to set - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo instance - */ - SCGetRankInfo.create = function create(properties) { - return new SCGetRankInfo(properties); - }; - - /** - * Encodes the specified SCGetRankInfo message. Does not implicitly {@link gamehall.SCGetRankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo} message SCGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetRankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Info != null && message.Info.length) - for (var i = 0; i < message.Info.length; ++i) - $root.gamehall.RankInfo.encode(message.Info[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetRankInfo message, length delimited. Does not implicitly {@link gamehall.SCGetRankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo} message SCGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetRankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetRankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetRankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetRankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Info && message.Info.length)) - message.Info = []; - message.Info.push($root.gamehall.RankInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetRankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetRankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetRankInfo message. - * @function verify - * @memberof gamehall.SCGetRankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetRankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Info != null && message.hasOwnProperty("Info")) { - if (!Array.isArray(message.Info)) - return "Info: array expected"; - for (var i = 0; i < message.Info.length; ++i) { - var error = $root.gamehall.RankInfo.verify(message.Info[i]); - if (error) - return "Info." + error; - } - } - return null; - }; - - /** - * Creates a SCGetRankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetRankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - */ - SCGetRankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetRankInfo) - return object; - var message = new $root.gamehall.SCGetRankInfo(); - if (object.Info) { - if (!Array.isArray(object.Info)) - throw TypeError(".gamehall.SCGetRankInfo.Info: array expected"); - message.Info = []; - for (var i = 0; i < object.Info.length; ++i) { - if (typeof object.Info[i] !== "object") - throw TypeError(".gamehall.SCGetRankInfo.Info: object expected"); - message.Info[i] = $root.gamehall.RankInfo.fromObject(object.Info[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetRankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.SCGetRankInfo} message SCGetRankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetRankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Info = []; - if (message.Info && message.Info.length) { - object.Info = []; - for (var j = 0; j < message.Info.length; ++j) - object.Info[j] = $root.gamehall.RankInfo.toObject(message.Info[j], options); - } - return object; - }; - - /** - * Converts this SCGetRankInfo to JSON. - * @function toJSON - * @memberof gamehall.SCGetRankInfo - * @instance - * @returns {Object.} JSON object - */ - SCGetRankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetRankInfo - * @function getTypeUrl - * @memberof gamehall.SCGetRankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetRankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetRankInfo"; - }; - - return SCGetRankInfo; - })(); - - /** - * ShowRedCode enum. - * @name gamehall.ShowRedCode - * @enum {number} - * @property {number} Mail=0 Mail value - * @property {number} Shop=1 Shop value - * @property {number} Role=2 Role value - * @property {number} Pet=3 Pet value - * @property {number} Welfare=4 Welfare value - */ - gamehall.ShowRedCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "Mail"] = 0; - values[valuesById[1] = "Shop"] = 1; - values[valuesById[2] = "Role"] = 2; - values[valuesById[3] = "Pet"] = 3; - values[valuesById[4] = "Welfare"] = 4; - return values; - })(); - - gamehall.ShowRed = (function() { - - /** - * Properties of a ShowRed. - * @memberof gamehall - * @interface IShowRed - * @property {gamehall.ShowRedCode|null} [ShowType] ShowRed ShowType - * @property {number|null} [ShowChild] ShowRed ShowChild - * @property {number|null} [IsShow] ShowRed IsShow - */ - - /** - * Constructs a new ShowRed. - * @memberof gamehall - * @classdesc Represents a ShowRed. - * @implements IShowRed - * @constructor - * @param {gamehall.IShowRed=} [properties] Properties to set - */ - function ShowRed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ShowRed ShowType. - * @member {gamehall.ShowRedCode} ShowType - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.ShowType = 0; - - /** - * ShowRed ShowChild. - * @member {number} ShowChild - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.ShowChild = 0; - - /** - * ShowRed IsShow. - * @member {number} IsShow - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.IsShow = 0; - - /** - * Creates a new ShowRed instance using the specified properties. - * @function create - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed=} [properties] Properties to set - * @returns {gamehall.ShowRed} ShowRed instance - */ - ShowRed.create = function create(properties) { - return new ShowRed(properties); - }; - - /** - * Encodes the specified ShowRed message. Does not implicitly {@link gamehall.ShowRed.verify|verify} messages. - * @function encode - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed} message ShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ShowRed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.ShowChild != null && Object.hasOwnProperty.call(message, "ShowChild")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ShowChild); - if (message.IsShow != null && Object.hasOwnProperty.call(message, "IsShow")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.IsShow); - return writer; - }; - - /** - * Encodes the specified ShowRed message, length delimited. Does not implicitly {@link gamehall.ShowRed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed} message ShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ShowRed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ShowRed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ShowRed} ShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ShowRed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ShowRed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - message.ShowChild = reader.int32(); - break; - } - case 3: { - message.IsShow = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ShowRed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ShowRed} ShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ShowRed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ShowRed message. - * @function verify - * @memberof gamehall.ShowRed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ShowRed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - switch (message.ShowType) { - default: - return "ShowType: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - break; - } - if (message.ShowChild != null && message.hasOwnProperty("ShowChild")) - if (!$util.isInteger(message.ShowChild)) - return "ShowChild: integer expected"; - if (message.IsShow != null && message.hasOwnProperty("IsShow")) - if (!$util.isInteger(message.IsShow)) - return "IsShow: integer expected"; - return null; - }; - - /** - * Creates a ShowRed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ShowRed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ShowRed} ShowRed - */ - ShowRed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ShowRed) - return object; - var message = new $root.gamehall.ShowRed(); - switch (object.ShowType) { - default: - if (typeof object.ShowType === "number") { - message.ShowType = object.ShowType; - break; - } - break; - case "Mail": - case 0: - message.ShowType = 0; - break; - case "Shop": - case 1: - message.ShowType = 1; - break; - case "Role": - case 2: - message.ShowType = 2; - break; - case "Pet": - case 3: - message.ShowType = 3; - break; - case "Welfare": - case 4: - message.ShowType = 4; - break; - } - if (object.ShowChild != null) - message.ShowChild = object.ShowChild | 0; - if (object.IsShow != null) - message.IsShow = object.IsShow | 0; - return message; - }; - - /** - * Creates a plain object from a ShowRed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.ShowRed} message ShowRed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ShowRed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowType = options.enums === String ? "Mail" : 0; - object.ShowChild = 0; - object.IsShow = 0; - } - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = options.enums === String ? $root.gamehall.ShowRedCode[message.ShowType] === undefined ? message.ShowType : $root.gamehall.ShowRedCode[message.ShowType] : message.ShowType; - if (message.ShowChild != null && message.hasOwnProperty("ShowChild")) - object.ShowChild = message.ShowChild; - if (message.IsShow != null && message.hasOwnProperty("IsShow")) - object.IsShow = message.IsShow; - return object; - }; - - /** - * Converts this ShowRed to JSON. - * @function toJSON - * @memberof gamehall.ShowRed - * @instance - * @returns {Object.} JSON object - */ - ShowRed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ShowRed - * @function getTypeUrl - * @memberof gamehall.ShowRed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ShowRed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ShowRed"; - }; - - return ShowRed; - })(); - - gamehall.SCShowRed = (function() { - - /** - * Properties of a SCShowRed. - * @memberof gamehall - * @interface ISCShowRed - * @property {gamehall.IShowRed|null} [ShowRed] SCShowRed ShowRed - */ - - /** - * Constructs a new SCShowRed. - * @memberof gamehall - * @classdesc Represents a SCShowRed. - * @implements ISCShowRed - * @constructor - * @param {gamehall.ISCShowRed=} [properties] Properties to set - */ - function SCShowRed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShowRed ShowRed. - * @member {gamehall.IShowRed|null|undefined} ShowRed - * @memberof gamehall.SCShowRed - * @instance - */ - SCShowRed.prototype.ShowRed = null; - - /** - * Creates a new SCShowRed instance using the specified properties. - * @function create - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed=} [properties] Properties to set - * @returns {gamehall.SCShowRed} SCShowRed instance - */ - SCShowRed.create = function create(properties) { - return new SCShowRed(properties); - }; - - /** - * Encodes the specified SCShowRed message. Does not implicitly {@link gamehall.SCShowRed.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed} message SCShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShowRed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowRed != null && Object.hasOwnProperty.call(message, "ShowRed")) - $root.gamehall.ShowRed.encode(message.ShowRed, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCShowRed message, length delimited. Does not implicitly {@link gamehall.SCShowRed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed} message SCShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShowRed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShowRed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShowRed} SCShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShowRed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShowRed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowRed = $root.gamehall.ShowRed.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShowRed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShowRed} SCShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShowRed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShowRed message. - * @function verify - * @memberof gamehall.SCShowRed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShowRed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowRed != null && message.hasOwnProperty("ShowRed")) { - var error = $root.gamehall.ShowRed.verify(message.ShowRed); - if (error) - return "ShowRed." + error; - } - return null; - }; - - /** - * Creates a SCShowRed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShowRed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShowRed} SCShowRed - */ - SCShowRed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShowRed) - return object; - var message = new $root.gamehall.SCShowRed(); - if (object.ShowRed != null) { - if (typeof object.ShowRed !== "object") - throw TypeError(".gamehall.SCShowRed.ShowRed: object expected"); - message.ShowRed = $root.gamehall.ShowRed.fromObject(object.ShowRed); - } - return message; - }; - - /** - * Creates a plain object from a SCShowRed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.SCShowRed} message SCShowRed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShowRed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShowRed = null; - if (message.ShowRed != null && message.hasOwnProperty("ShowRed")) - object.ShowRed = $root.gamehall.ShowRed.toObject(message.ShowRed, options); - return object; - }; - - /** - * Converts this SCShowRed to JSON. - * @function toJSON - * @memberof gamehall.SCShowRed - * @instance - * @returns {Object.} JSON object - */ - SCShowRed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShowRed - * @function getTypeUrl - * @memberof gamehall.SCShowRed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShowRed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShowRed"; - }; - - return SCShowRed; - })(); - - /** - * OpResultCode_Hundred enum. - * @name gamehall.OpResultCode_Hundred - * @enum {number} - * @property {number} OPRC_Sucess_Hundred=0 OPRC_Sucess_Hundred value - * @property {number} OPRC_Error_Hundred=1 OPRC_Error_Hundred value - * @property {number} OPRC_YourResVerIsLow_Hundred=1044 OPRC_YourResVerIsLow_Hundred value - * @property {number} OPRC_YourAppVerIsLow_Hundred=1045 OPRC_YourAppVerIsLow_Hundred value - * @property {number} OPRC_RoomHadClosed_Hundred=1053 OPRC_RoomHadClosed_Hundred value - * @property {number} OPRC_SceneServerMaintain_Hundred=1054 OPRC_SceneServerMaintain_Hundred value - * @property {number} OPRC_CoinNotEnough_Hundred=1056 OPRC_CoinNotEnough_Hundred value - * @property {number} OPRC_CoinTooMore_Hundred=1058 OPRC_CoinTooMore_Hundred value - * @property {number} OPRC_RoomGameTimes_Hundred=1103 OPRC_RoomGameTimes_Hundred value - * @property {number} OPRC_MustBindPromoter_Hundred=1113 OPRC_MustBindPromoter_Hundred value - */ - gamehall.OpResultCode_Hundred = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Hundred"] = 0; - values[valuesById[1] = "OPRC_Error_Hundred"] = 1; - values[valuesById[1044] = "OPRC_YourResVerIsLow_Hundred"] = 1044; - values[valuesById[1045] = "OPRC_YourAppVerIsLow_Hundred"] = 1045; - values[valuesById[1053] = "OPRC_RoomHadClosed_Hundred"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain_Hundred"] = 1054; - values[valuesById[1056] = "OPRC_CoinNotEnough_Hundred"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore_Hundred"] = 1058; - values[valuesById[1103] = "OPRC_RoomGameTimes_Hundred"] = 1103; - values[valuesById[1113] = "OPRC_MustBindPromoter_Hundred"] = 1113; - return values; - })(); - - /** - * HundredScenePacketID enum. - * @name gamehall.HundredScenePacketID - * @enum {number} - * @property {number} PACKET_HundredScene_ZERO=0 PACKET_HundredScene_ZERO value - * @property {number} PACKET_CS_HUNDREDSCENE_OP=2380 PACKET_CS_HUNDREDSCENE_OP value - * @property {number} PACKET_SC_HUNDREDSCENE_OP=2381 PACKET_SC_HUNDREDSCENE_OP value - * @property {number} PACKET_CS_HUNDREDSCENE_GETPLAYERNUM=2382 PACKET_CS_HUNDREDSCENE_GETPLAYERNUM value - * @property {number} PACKET_SC_HUNDREDSCENE_GETPLAYERNUM=2383 PACKET_SC_HUNDREDSCENE_GETPLAYERNUM value - * @property {number} PACKET_CS_GAMEJACKPOT=2384 PACKET_CS_GAMEJACKPOT value - * @property {number} PACKET_SC_GAMEJACKPOT=2385 PACKET_SC_GAMEJACKPOT value - * @property {number} PACKET_CS_GAMEHISTORYINFO=2386 PACKET_CS_GAMEHISTORYINFO value - * @property {number} PACKET_SC_GAMEPLAYERHISTORY=2387 PACKET_SC_GAMEPLAYERHISTORY value - * @property {number} PACKET_SC_GAMEBIGWINHISTORY=2388 PACKET_SC_GAMEBIGWINHISTORY value - * @property {number} PACKET_BD_GAMEJACKPOT=2389 PACKET_BD_GAMEJACKPOT value - */ - gamehall.HundredScenePacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_HundredScene_ZERO"] = 0; - values[valuesById[2380] = "PACKET_CS_HUNDREDSCENE_OP"] = 2380; - values[valuesById[2381] = "PACKET_SC_HUNDREDSCENE_OP"] = 2381; - values[valuesById[2382] = "PACKET_CS_HUNDREDSCENE_GETPLAYERNUM"] = 2382; - values[valuesById[2383] = "PACKET_SC_HUNDREDSCENE_GETPLAYERNUM"] = 2383; - values[valuesById[2384] = "PACKET_CS_GAMEJACKPOT"] = 2384; - values[valuesById[2385] = "PACKET_SC_GAMEJACKPOT"] = 2385; - values[valuesById[2386] = "PACKET_CS_GAMEHISTORYINFO"] = 2386; - values[valuesById[2387] = "PACKET_SC_GAMEPLAYERHISTORY"] = 2387; - values[valuesById[2388] = "PACKET_SC_GAMEBIGWINHISTORY"] = 2388; - values[valuesById[2389] = "PACKET_BD_GAMEJACKPOT"] = 2389; - return values; - })(); - - gamehall.CSHundredSceneOp = (function() { - - /** - * Properties of a CSHundredSceneOp. - * @memberof gamehall - * @interface ICSHundredSceneOp - * @property {number|null} [Id] CSHundredSceneOp Id - * @property {number|null} [OpType] CSHundredSceneOp OpType - * @property {Array.|null} [OpParams] CSHundredSceneOp OpParams - * @property {number|null} [ApkVer] CSHundredSceneOp ApkVer - * @property {number|null} [ResVer] CSHundredSceneOp ResVer - */ - - /** - * Constructs a new CSHundredSceneOp. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneOp. - * @implements ICSHundredSceneOp - * @constructor - * @param {gamehall.ICSHundredSceneOp=} [properties] Properties to set - */ - function CSHundredSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneOp Id. - * @member {number} Id - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.Id = 0; - - /** - * CSHundredSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.OpType = 0; - - /** - * CSHundredSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * CSHundredSceneOp ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.ApkVer = 0; - - /** - * CSHundredSceneOp ResVer. - * @member {number} ResVer - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.ResVer = 0; - - /** - * Creates a new CSHundredSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp instance - */ - CSHundredSceneOp.create = function create(properties) { - return new CSHundredSceneOp(properties); - }; - - /** - * Encodes the specified CSHundredSceneOp message. Does not implicitly {@link gamehall.CSHundredSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp} message CSHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.ResVer); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneOp message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp} message CSHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpType = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.ApkVer = reader.int32(); - break; - } - case 5: { - message.ResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneOp message. - * @function verify - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - */ - CSHundredSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneOp) - return object; - var message = new $root.gamehall.CSHundredSceneOp(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSHundredSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.CSHundredSceneOp} message CSHundredSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.OpType = 0; - object.ApkVer = 0; - object.ResVer = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - return object; - }; - - /** - * Converts this CSHundredSceneOp to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneOp - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneOp - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneOp"; - }; - - return CSHundredSceneOp; - })(); - - gamehall.SCHundredSceneOp = (function() { - - /** - * Properties of a SCHundredSceneOp. - * @memberof gamehall - * @interface ISCHundredSceneOp - * @property {gamehall.OpResultCode_Hundred|null} [OpCode] SCHundredSceneOp OpCode - * @property {number|null} [Id] SCHundredSceneOp Id - * @property {number|null} [OpType] SCHundredSceneOp OpType - * @property {Array.|null} [OpParams] SCHundredSceneOp OpParams - * @property {number|null} [MinApkVer] SCHundredSceneOp MinApkVer - * @property {number|null} [LatestApkVer] SCHundredSceneOp LatestApkVer - * @property {number|null} [MinResVer] SCHundredSceneOp MinResVer - * @property {number|null} [LatestResVer] SCHundredSceneOp LatestResVer - */ - - /** - * Constructs a new SCHundredSceneOp. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneOp. - * @implements ISCHundredSceneOp - * @constructor - * @param {gamehall.ISCHundredSceneOp=} [properties] Properties to set - */ - function SCHundredSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneOp OpCode. - * @member {gamehall.OpResultCode_Hundred} OpCode - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpCode = 0; - - /** - * SCHundredSceneOp Id. - * @member {number} Id - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.Id = 0; - - /** - * SCHundredSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpType = 0; - - /** - * SCHundredSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * SCHundredSceneOp MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.MinApkVer = 0; - - /** - * SCHundredSceneOp LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.LatestApkVer = 0; - - /** - * SCHundredSceneOp MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.MinResVer = 0; - - /** - * SCHundredSceneOp LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.LatestResVer = 0; - - /** - * Creates a new SCHundredSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp instance - */ - SCHundredSceneOp.create = function create(properties) { - return new SCHundredSceneOp(properties); - }; - - /** - * Encodes the specified SCHundredSceneOp message. Does not implicitly {@link gamehall.SCHundredSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp} message SCHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.LatestResVer); - return writer; - }; - - /** - * Encodes the specified SCHundredSceneOp message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp} message SCHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.OpType = reader.int32(); - break; - } - case 4: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 5: { - message.MinApkVer = reader.int32(); - break; - } - case 6: { - message.LatestApkVer = reader.int32(); - break; - } - case 7: { - message.MinResVer = reader.int32(); - break; - } - case 8: { - message.LatestResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneOp message. - * @function verify - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1044: - case 1045: - case 1053: - case 1054: - case 1056: - case 1058: - case 1103: - case 1113: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - return null; - }; - - /** - * Creates a SCHundredSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - */ - SCHundredSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneOp) - return object; - var message = new $root.gamehall.SCHundredSceneOp(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Hundred": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Hundred": - case 1: - message.OpCode = 1; - break; - case "OPRC_YourResVerIsLow_Hundred": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Hundred": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_RoomHadClosed_Hundred": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Hundred": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_CoinNotEnough_Hundred": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Hundred": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_RoomGameTimes_Hundred": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Hundred": - case 1113: - message.OpCode = 1113; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCHundredSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.SCHundredSceneOp} message SCHundredSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Hundred" : 0; - object.Id = 0; - object.OpType = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Hundred[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Hundred[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - return object; - }; - - /** - * Converts this SCHundredSceneOp to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneOp - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneOp - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneOp"; - }; - - return SCHundredSceneOp; - })(); - - gamehall.CSHundredSceneGetPlayerNum = (function() { - - /** - * Properties of a CSHundredSceneGetPlayerNum. - * @memberof gamehall - * @interface ICSHundredSceneGetPlayerNum - * @property {number|null} [GameId] CSHundredSceneGetPlayerNum GameId - * @property {number|null} [GameModel] CSHundredSceneGetPlayerNum GameModel - */ - - /** - * Constructs a new CSHundredSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetPlayerNum. - * @implements ICSHundredSceneGetPlayerNum - * @constructor - * @param {gamehall.ICSHundredSceneGetPlayerNum=} [properties] Properties to set - */ - function CSHundredSceneGetPlayerNum(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneGetPlayerNum GameId. - * @member {number} GameId - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - */ - CSHundredSceneGetPlayerNum.prototype.GameId = 0; - - /** - * CSHundredSceneGetPlayerNum GameModel. - * @member {number} GameModel - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - */ - CSHundredSceneGetPlayerNum.prototype.GameModel = 0; - - /** - * Creates a new CSHundredSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum instance - */ - CSHundredSceneGetPlayerNum.create = function create(properties) { - return new CSHundredSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetPlayerNum message. Does not implicitly {@link gamehall.CSHundredSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameModel != null && Object.hasOwnProperty.call(message, "GameModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameModel); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - if (!$util.isInteger(message.GameModel)) - return "GameModel: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - */ - CSHundredSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetPlayerNum) - return object; - var message = new $root.gamehall.CSHundredSceneGetPlayerNum(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameModel != null) - message.GameModel = object.GameModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.CSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - object.GameModel = message.GameModel; - return object; - }; - - /** - * Converts this CSHundredSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetPlayerNum"; - }; - - return CSHundredSceneGetPlayerNum; - })(); - - gamehall.SCHundredSceneGetPlayerNum = (function() { - - /** - * Properties of a SCHundredSceneGetPlayerNum. - * @memberof gamehall - * @interface ISCHundredSceneGetPlayerNum - * @property {Array.|null} [Nums] SCHundredSceneGetPlayerNum Nums - */ - - /** - * Constructs a new SCHundredSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneGetPlayerNum. - * @implements ISCHundredSceneGetPlayerNum - * @constructor - * @param {gamehall.ISCHundredSceneGetPlayerNum=} [properties] Properties to set - */ - function SCHundredSceneGetPlayerNum(properties) { - this.Nums = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneGetPlayerNum Nums. - * @member {Array.} Nums - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @instance - */ - SCHundredSceneGetPlayerNum.prototype.Nums = $util.emptyArray; - - /** - * Creates a new SCHundredSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum instance - */ - SCHundredSceneGetPlayerNum.create = function create(properties) { - return new SCHundredSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified SCHundredSceneGetPlayerNum message. Does not implicitly {@link gamehall.SCHundredSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Nums != null && message.Nums.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.Nums.length; ++i) - writer.int32(message.Nums[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCHundredSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Nums && message.Nums.length)) - message.Nums = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Nums.push(reader.int32()); - } else - message.Nums.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Nums != null && message.hasOwnProperty("Nums")) { - if (!Array.isArray(message.Nums)) - return "Nums: array expected"; - for (var i = 0; i < message.Nums.length; ++i) - if (!$util.isInteger(message.Nums[i])) - return "Nums: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCHundredSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - */ - SCHundredSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneGetPlayerNum) - return object; - var message = new $root.gamehall.SCHundredSceneGetPlayerNum(); - if (object.Nums) { - if (!Array.isArray(object.Nums)) - throw TypeError(".gamehall.SCHundredSceneGetPlayerNum.Nums: array expected"); - message.Nums = []; - for (var i = 0; i < object.Nums.length; ++i) - message.Nums[i] = object.Nums[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.SCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Nums = []; - if (message.Nums && message.Nums.length) { - object.Nums = []; - for (var j = 0; j < message.Nums.length; ++j) - object.Nums[j] = message.Nums[j]; - } - return object; - }; - - /** - * Converts this SCHundredSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneGetPlayerNum"; - }; - - return SCHundredSceneGetPlayerNum; - })(); - - gamehall.CSHundredSceneGetGameJackpot = (function() { - - /** - * Properties of a CSHundredSceneGetGameJackpot. - * @memberof gamehall - * @interface ICSHundredSceneGetGameJackpot - */ - - /** - * Constructs a new CSHundredSceneGetGameJackpot. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetGameJackpot. - * @implements ICSHundredSceneGetGameJackpot - * @constructor - * @param {gamehall.ICSHundredSceneGetGameJackpot=} [properties] Properties to set - */ - function CSHundredSceneGetGameJackpot(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSHundredSceneGetGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot instance - */ - CSHundredSceneGetGameJackpot.create = function create(properties) { - return new CSHundredSceneGetGameJackpot(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetGameJackpot message. Does not implicitly {@link gamehall.CSHundredSceneGetGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetGameJackpot message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetGameJackpot message. - * @function verify - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - */ - CSHundredSceneGetGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetGameJackpot) - return object; - return new $root.gamehall.CSHundredSceneGetGameJackpot(); - }; - - /** - * Creates a plain object from a CSHundredSceneGetGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.CSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetGameJackpot.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSHundredSceneGetGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetGameJackpot - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetGameJackpot"; - }; - - return CSHundredSceneGetGameJackpot; - })(); - - gamehall.GameJackpotFundInfo = (function() { - - /** - * Properties of a GameJackpotFundInfo. - * @memberof gamehall - * @interface IGameJackpotFundInfo - * @property {number|null} [GameFreeId] GameJackpotFundInfo GameFreeId - * @property {number|Long|null} [JackPotFund] GameJackpotFundInfo JackPotFund - */ - - /** - * Constructs a new GameJackpotFundInfo. - * @memberof gamehall - * @classdesc Represents a GameJackpotFundInfo. - * @implements IGameJackpotFundInfo - * @constructor - * @param {gamehall.IGameJackpotFundInfo=} [properties] Properties to set - */ - function GameJackpotFundInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameJackpotFundInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameJackpotFundInfo - * @instance - */ - GameJackpotFundInfo.prototype.GameFreeId = 0; - - /** - * GameJackpotFundInfo JackPotFund. - * @member {number|Long} JackPotFund - * @memberof gamehall.GameJackpotFundInfo - * @instance - */ - GameJackpotFundInfo.prototype.JackPotFund = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new GameJackpotFundInfo instance using the specified properties. - * @function create - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo=} [properties] Properties to set - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo instance - */ - GameJackpotFundInfo.create = function create(properties) { - return new GameJackpotFundInfo(properties); - }; - - /** - * Encodes the specified GameJackpotFundInfo message. Does not implicitly {@link gamehall.GameJackpotFundInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo} message GameJackpotFundInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameJackpotFundInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.JackPotFund != null && Object.hasOwnProperty.call(message, "JackPotFund")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.JackPotFund); - return writer; - }; - - /** - * Encodes the specified GameJackpotFundInfo message, length delimited. Does not implicitly {@link gamehall.GameJackpotFundInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo} message GameJackpotFundInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameJackpotFundInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameJackpotFundInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameJackpotFundInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameJackpotFundInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.JackPotFund = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameJackpotFundInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameJackpotFundInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameJackpotFundInfo message. - * @function verify - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameJackpotFundInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.JackPotFund != null && message.hasOwnProperty("JackPotFund")) - if (!$util.isInteger(message.JackPotFund) && !(message.JackPotFund && $util.isInteger(message.JackPotFund.low) && $util.isInteger(message.JackPotFund.high))) - return "JackPotFund: integer|Long expected"; - return null; - }; - - /** - * Creates a GameJackpotFundInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - */ - GameJackpotFundInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameJackpotFundInfo) - return object; - var message = new $root.gamehall.GameJackpotFundInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.JackPotFund != null) - if ($util.Long) - (message.JackPotFund = $util.Long.fromValue(object.JackPotFund)).unsigned = false; - else if (typeof object.JackPotFund === "string") - message.JackPotFund = parseInt(object.JackPotFund, 10); - else if (typeof object.JackPotFund === "number") - message.JackPotFund = object.JackPotFund; - else if (typeof object.JackPotFund === "object") - message.JackPotFund = new $util.LongBits(object.JackPotFund.low >>> 0, object.JackPotFund.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a GameJackpotFundInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.GameJackpotFundInfo} message GameJackpotFundInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameJackpotFundInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.JackPotFund = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.JackPotFund = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.JackPotFund != null && message.hasOwnProperty("JackPotFund")) - if (typeof message.JackPotFund === "number") - object.JackPotFund = options.longs === String ? String(message.JackPotFund) : message.JackPotFund; - else - object.JackPotFund = options.longs === String ? $util.Long.prototype.toString.call(message.JackPotFund) : options.longs === Number ? new $util.LongBits(message.JackPotFund.low >>> 0, message.JackPotFund.high >>> 0).toNumber() : message.JackPotFund; - return object; - }; - - /** - * Converts this GameJackpotFundInfo to JSON. - * @function toJSON - * @memberof gamehall.GameJackpotFundInfo - * @instance - * @returns {Object.} JSON object - */ - GameJackpotFundInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameJackpotFundInfo - * @function getTypeUrl - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameJackpotFundInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameJackpotFundInfo"; - }; - - return GameJackpotFundInfo; - })(); - - gamehall.SCHundredSceneGetGameJackpot = (function() { - - /** - * Properties of a SCHundredSceneGetGameJackpot. - * @memberof gamehall - * @interface ISCHundredSceneGetGameJackpot - * @property {Array.|null} [GameJackpotFund] SCHundredSceneGetGameJackpot GameJackpotFund - */ - - /** - * Constructs a new SCHundredSceneGetGameJackpot. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneGetGameJackpot. - * @implements ISCHundredSceneGetGameJackpot - * @constructor - * @param {gamehall.ISCHundredSceneGetGameJackpot=} [properties] Properties to set - */ - function SCHundredSceneGetGameJackpot(properties) { - this.GameJackpotFund = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneGetGameJackpot GameJackpotFund. - * @member {Array.} GameJackpotFund - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @instance - */ - SCHundredSceneGetGameJackpot.prototype.GameJackpotFund = $util.emptyArray; - - /** - * Creates a new SCHundredSceneGetGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot instance - */ - SCHundredSceneGetGameJackpot.create = function create(properties) { - return new SCHundredSceneGetGameJackpot(properties); - }; - - /** - * Encodes the specified SCHundredSceneGetGameJackpot message. Does not implicitly {@link gamehall.SCHundredSceneGetGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameJackpotFund != null && message.GameJackpotFund.length) - for (var i = 0; i < message.GameJackpotFund.length; ++i) - $root.gamehall.GameJackpotFundInfo.encode(message.GameJackpotFund[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCHundredSceneGetGameJackpot message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneGetGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneGetGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneGetGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameJackpotFund && message.GameJackpotFund.length)) - message.GameJackpotFund = []; - message.GameJackpotFund.push($root.gamehall.GameJackpotFundInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneGetGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneGetGameJackpot message. - * @function verify - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneGetGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameJackpotFund != null && message.hasOwnProperty("GameJackpotFund")) { - if (!Array.isArray(message.GameJackpotFund)) - return "GameJackpotFund: array expected"; - for (var i = 0; i < message.GameJackpotFund.length; ++i) { - var error = $root.gamehall.GameJackpotFundInfo.verify(message.GameJackpotFund[i]); - if (error) - return "GameJackpotFund." + error; - } - } - return null; - }; - - /** - * Creates a SCHundredSceneGetGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - */ - SCHundredSceneGetGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneGetGameJackpot) - return object; - var message = new $root.gamehall.SCHundredSceneGetGameJackpot(); - if (object.GameJackpotFund) { - if (!Array.isArray(object.GameJackpotFund)) - throw TypeError(".gamehall.SCHundredSceneGetGameJackpot.GameJackpotFund: array expected"); - message.GameJackpotFund = []; - for (var i = 0; i < object.GameJackpotFund.length; ++i) { - if (typeof object.GameJackpotFund[i] !== "object") - throw TypeError(".gamehall.SCHundredSceneGetGameJackpot.GameJackpotFund: object expected"); - message.GameJackpotFund[i] = $root.gamehall.GameJackpotFundInfo.fromObject(object.GameJackpotFund[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneGetGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.SCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneGetGameJackpot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameJackpotFund = []; - if (message.GameJackpotFund && message.GameJackpotFund.length) { - object.GameJackpotFund = []; - for (var j = 0; j < message.GameJackpotFund.length; ++j) - object.GameJackpotFund[j] = $root.gamehall.GameJackpotFundInfo.toObject(message.GameJackpotFund[j], options); - } - return object; - }; - - /** - * Converts this SCHundredSceneGetGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneGetGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneGetGameJackpot - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneGetGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneGetGameJackpot"; - }; - - return SCHundredSceneGetGameJackpot; - })(); - - gamehall.BroadcastGameJackpot = (function() { - - /** - * Properties of a BroadcastGameJackpot. - * @memberof gamehall - * @interface IBroadcastGameJackpot - * @property {Array.|null} [JackpotFund] BroadcastGameJackpot JackpotFund - * @property {number|null} [GameFreeId] BroadcastGameJackpot GameFreeId - */ - - /** - * Constructs a new BroadcastGameJackpot. - * @memberof gamehall - * @classdesc Represents a BroadcastGameJackpot. - * @implements IBroadcastGameJackpot - * @constructor - * @param {gamehall.IBroadcastGameJackpot=} [properties] Properties to set - */ - function BroadcastGameJackpot(properties) { - this.JackpotFund = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BroadcastGameJackpot JackpotFund. - * @member {Array.} JackpotFund - * @memberof gamehall.BroadcastGameJackpot - * @instance - */ - BroadcastGameJackpot.prototype.JackpotFund = $util.emptyArray; - - /** - * BroadcastGameJackpot GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.BroadcastGameJackpot - * @instance - */ - BroadcastGameJackpot.prototype.GameFreeId = 0; - - /** - * Creates a new BroadcastGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot=} [properties] Properties to set - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot instance - */ - BroadcastGameJackpot.create = function create(properties) { - return new BroadcastGameJackpot(properties); - }; - - /** - * Encodes the specified BroadcastGameJackpot message. Does not implicitly {@link gamehall.BroadcastGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot} message BroadcastGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BroadcastGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.JackpotFund != null && message.JackpotFund.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.JackpotFund.length; ++i) - writer.int64(message.JackpotFund[i]); - writer.ldelim(); - } - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified BroadcastGameJackpot message, length delimited. Does not implicitly {@link gamehall.BroadcastGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot} message BroadcastGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BroadcastGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BroadcastGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BroadcastGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BroadcastGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.JackpotFund && message.JackpotFund.length)) - message.JackpotFund = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.JackpotFund.push(reader.int64()); - } else - message.JackpotFund.push(reader.int64()); - break; - } - case 2: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BroadcastGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BroadcastGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BroadcastGameJackpot message. - * @function verify - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BroadcastGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.JackpotFund != null && message.hasOwnProperty("JackpotFund")) { - if (!Array.isArray(message.JackpotFund)) - return "JackpotFund: array expected"; - for (var i = 0; i < message.JackpotFund.length; ++i) - if (!$util.isInteger(message.JackpotFund[i]) && !(message.JackpotFund[i] && $util.isInteger(message.JackpotFund[i].low) && $util.isInteger(message.JackpotFund[i].high))) - return "JackpotFund: integer|Long[] expected"; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a BroadcastGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - */ - BroadcastGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BroadcastGameJackpot) - return object; - var message = new $root.gamehall.BroadcastGameJackpot(); - if (object.JackpotFund) { - if (!Array.isArray(object.JackpotFund)) - throw TypeError(".gamehall.BroadcastGameJackpot.JackpotFund: array expected"); - message.JackpotFund = []; - for (var i = 0; i < object.JackpotFund.length; ++i) - if ($util.Long) - (message.JackpotFund[i] = $util.Long.fromValue(object.JackpotFund[i])).unsigned = false; - else if (typeof object.JackpotFund[i] === "string") - message.JackpotFund[i] = parseInt(object.JackpotFund[i], 10); - else if (typeof object.JackpotFund[i] === "number") - message.JackpotFund[i] = object.JackpotFund[i]; - else if (typeof object.JackpotFund[i] === "object") - message.JackpotFund[i] = new $util.LongBits(object.JackpotFund[i].low >>> 0, object.JackpotFund[i].high >>> 0).toNumber(); - } - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a BroadcastGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.BroadcastGameJackpot} message BroadcastGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BroadcastGameJackpot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.JackpotFund = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.JackpotFund && message.JackpotFund.length) { - object.JackpotFund = []; - for (var j = 0; j < message.JackpotFund.length; ++j) - if (typeof message.JackpotFund[j] === "number") - object.JackpotFund[j] = options.longs === String ? String(message.JackpotFund[j]) : message.JackpotFund[j]; - else - object.JackpotFund[j] = options.longs === String ? $util.Long.prototype.toString.call(message.JackpotFund[j]) : options.longs === Number ? new $util.LongBits(message.JackpotFund[j].low >>> 0, message.JackpotFund[j].high >>> 0).toNumber() : message.JackpotFund[j]; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this BroadcastGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.BroadcastGameJackpot - * @instance - * @returns {Object.} JSON object - */ - BroadcastGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BroadcastGameJackpot - * @function getTypeUrl - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BroadcastGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BroadcastGameJackpot"; - }; - - return BroadcastGameJackpot; - })(); - - gamehall.CSHundredSceneGetHistoryInfo = (function() { - - /** - * Properties of a CSHundredSceneGetHistoryInfo. - * @memberof gamehall - * @interface ICSHundredSceneGetHistoryInfo - * @property {number|null} [GameId] CSHundredSceneGetHistoryInfo GameId - * @property {number|null} [GameHistoryModel] CSHundredSceneGetHistoryInfo GameHistoryModel - */ - - /** - * Constructs a new CSHundredSceneGetHistoryInfo. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetHistoryInfo. - * @implements ICSHundredSceneGetHistoryInfo - * @constructor - * @param {gamehall.ICSHundredSceneGetHistoryInfo=} [properties] Properties to set - */ - function CSHundredSceneGetHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneGetHistoryInfo GameId. - * @member {number} GameId - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - */ - CSHundredSceneGetHistoryInfo.prototype.GameId = 0; - - /** - * CSHundredSceneGetHistoryInfo GameHistoryModel. - * @member {number} GameHistoryModel - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - */ - CSHundredSceneGetHistoryInfo.prototype.GameHistoryModel = 0; - - /** - * Creates a new CSHundredSceneGetHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo instance - */ - CSHundredSceneGetHistoryInfo.create = function create(properties) { - return new CSHundredSceneGetHistoryInfo(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetHistoryInfo message. Does not implicitly {@link gamehall.CSHundredSceneGetHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameHistoryModel != null && Object.hasOwnProperty.call(message, "GameHistoryModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameHistoryModel); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetHistoryInfo message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameHistoryModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetHistoryInfo message. - * @function verify - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameHistoryModel != null && message.hasOwnProperty("GameHistoryModel")) - if (!$util.isInteger(message.GameHistoryModel)) - return "GameHistoryModel: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - */ - CSHundredSceneGetHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetHistoryInfo) - return object; - var message = new $root.gamehall.CSHundredSceneGetHistoryInfo(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameHistoryModel != null) - message.GameHistoryModel = object.GameHistoryModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneGetHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.CSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameHistoryModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameHistoryModel != null && message.hasOwnProperty("GameHistoryModel")) - object.GameHistoryModel = message.GameHistoryModel; - return object; - }; - - /** - * Converts this CSHundredSceneGetHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetHistoryInfo - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetHistoryInfo"; - }; - - return CSHundredSceneGetHistoryInfo; - })(); - - gamehall.GameHistoryInfo = (function() { - - /** - * Properties of a GameHistoryInfo. - * @memberof gamehall - * @interface IGameHistoryInfo - * @property {string|null} [GameNumber] GameHistoryInfo GameNumber - * @property {number|Long|null} [CreatedTime] GameHistoryInfo CreatedTime - * @property {number|Long|null} [Multiple] GameHistoryInfo Multiple - * @property {string|null} [Hash] GameHistoryInfo Hash - */ - - /** - * Constructs a new GameHistoryInfo. - * @memberof gamehall - * @classdesc Represents a GameHistoryInfo. - * @implements IGameHistoryInfo - * @constructor - * @param {gamehall.IGameHistoryInfo=} [properties] Properties to set - */ - function GameHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameHistoryInfo GameNumber. - * @member {string} GameNumber - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.GameNumber = ""; - - /** - * GameHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameHistoryInfo Multiple. - * @member {number|Long} Multiple - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.Multiple = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameHistoryInfo Hash. - * @member {string} Hash - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.Hash = ""; - - /** - * Creates a new GameHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo=} [properties] Properties to set - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo instance - */ - GameHistoryInfo.create = function create(properties) { - return new GameHistoryInfo(properties); - }; - - /** - * Encodes the specified GameHistoryInfo message. Does not implicitly {@link gamehall.GameHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo} message GameHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameNumber != null && Object.hasOwnProperty.call(message, "GameNumber")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.GameNumber); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.Multiple != null && Object.hasOwnProperty.call(message, "Multiple")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Multiple); - if (message.Hash != null && Object.hasOwnProperty.call(message, "Hash")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Hash); - return writer; - }; - - /** - * Encodes the specified GameHistoryInfo message, length delimited. Does not implicitly {@link gamehall.GameHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo} message GameHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameNumber = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.Multiple = reader.int64(); - break; - } - case 4: { - message.Hash = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameHistoryInfo message. - * @function verify - * @memberof gamehall.GameHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameNumber != null && message.hasOwnProperty("GameNumber")) - if (!$util.isString(message.GameNumber)) - return "GameNumber: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (!$util.isInteger(message.Multiple) && !(message.Multiple && $util.isInteger(message.Multiple.low) && $util.isInteger(message.Multiple.high))) - return "Multiple: integer|Long expected"; - if (message.Hash != null && message.hasOwnProperty("Hash")) - if (!$util.isString(message.Hash)) - return "Hash: string expected"; - return null; - }; - - /** - * Creates a GameHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - */ - GameHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameHistoryInfo) - return object; - var message = new $root.gamehall.GameHistoryInfo(); - if (object.GameNumber != null) - message.GameNumber = String(object.GameNumber); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.Multiple != null) - if ($util.Long) - (message.Multiple = $util.Long.fromValue(object.Multiple)).unsigned = false; - else if (typeof object.Multiple === "string") - message.Multiple = parseInt(object.Multiple, 10); - else if (typeof object.Multiple === "number") - message.Multiple = object.Multiple; - else if (typeof object.Multiple === "object") - message.Multiple = new $util.LongBits(object.Multiple.low >>> 0, object.Multiple.high >>> 0).toNumber(); - if (object.Hash != null) - message.Hash = String(object.Hash); - return message; - }; - - /** - * Creates a plain object from a GameHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.GameHistoryInfo} message GameHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameNumber = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Multiple = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Multiple = options.longs === String ? "0" : 0; - object.Hash = ""; - } - if (message.GameNumber != null && message.hasOwnProperty("GameNumber")) - object.GameNumber = message.GameNumber; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (typeof message.Multiple === "number") - object.Multiple = options.longs === String ? String(message.Multiple) : message.Multiple; - else - object.Multiple = options.longs === String ? $util.Long.prototype.toString.call(message.Multiple) : options.longs === Number ? new $util.LongBits(message.Multiple.low >>> 0, message.Multiple.high >>> 0).toNumber() : message.Multiple; - if (message.Hash != null && message.hasOwnProperty("Hash")) - object.Hash = message.Hash; - return object; - }; - - /** - * Converts this GameHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.GameHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - GameHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameHistoryInfo - * @function getTypeUrl - * @memberof gamehall.GameHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameHistoryInfo"; - }; - - return GameHistoryInfo; - })(); - - gamehall.PlayerHistoryInfo = (function() { - - /** - * Properties of a PlayerHistoryInfo. - * @memberof gamehall - * @interface IPlayerHistoryInfo - * @property {string|null} [SpinID] PlayerHistoryInfo SpinID - * @property {number|Long|null} [CreatedTime] PlayerHistoryInfo CreatedTime - * @property {number|Long|null} [TotalBetValue] PlayerHistoryInfo TotalBetValue - * @property {number|Long|null} [TotalPriceValue] PlayerHistoryInfo TotalPriceValue - * @property {boolean|null} [IsFree] PlayerHistoryInfo IsFree - * @property {number|Long|null} [TotalBonusValue] PlayerHistoryInfo TotalBonusValue - * @property {number|Long|null} [Multiple] PlayerHistoryInfo Multiple - */ - - /** - * Constructs a new PlayerHistoryInfo. - * @memberof gamehall - * @classdesc Represents a PlayerHistoryInfo. - * @implements IPlayerHistoryInfo - * @constructor - * @param {gamehall.IPlayerHistoryInfo=} [properties] Properties to set - */ - function PlayerHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerHistoryInfo SpinID. - * @member {string} SpinID - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.SpinID = ""; - - /** - * PlayerHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo TotalBetValue. - * @member {number|Long} TotalBetValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalBetValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo TotalPriceValue. - * @member {number|Long} TotalPriceValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalPriceValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo IsFree. - * @member {boolean} IsFree - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.IsFree = false; - - /** - * PlayerHistoryInfo TotalBonusValue. - * @member {number|Long} TotalBonusValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalBonusValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo Multiple. - * @member {number|Long} Multiple - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.Multiple = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new PlayerHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo=} [properties] Properties to set - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo instance - */ - PlayerHistoryInfo.create = function create(properties) { - return new PlayerHistoryInfo(properties); - }; - - /** - * Encodes the specified PlayerHistoryInfo message. Does not implicitly {@link gamehall.PlayerHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo} message PlayerHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SpinID != null && Object.hasOwnProperty.call(message, "SpinID")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.SpinID); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.TotalBetValue != null && Object.hasOwnProperty.call(message, "TotalBetValue")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalBetValue); - if (message.TotalPriceValue != null && Object.hasOwnProperty.call(message, "TotalPriceValue")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalPriceValue); - if (message.IsFree != null && Object.hasOwnProperty.call(message, "IsFree")) - writer.uint32(/* id 5, wireType 0 =*/40).bool(message.IsFree); - if (message.TotalBonusValue != null && Object.hasOwnProperty.call(message, "TotalBonusValue")) - writer.uint32(/* id 6, wireType 0 =*/48).int64(message.TotalBonusValue); - if (message.Multiple != null && Object.hasOwnProperty.call(message, "Multiple")) - writer.uint32(/* id 7, wireType 0 =*/56).int64(message.Multiple); - return writer; - }; - - /** - * Encodes the specified PlayerHistoryInfo message, length delimited. Does not implicitly {@link gamehall.PlayerHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo} message PlayerHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SpinID = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.TotalBetValue = reader.int64(); - break; - } - case 4: { - message.TotalPriceValue = reader.int64(); - break; - } - case 5: { - message.IsFree = reader.bool(); - break; - } - case 6: { - message.TotalBonusValue = reader.int64(); - break; - } - case 7: { - message.Multiple = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerHistoryInfo message. - * @function verify - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - if (!$util.isString(message.SpinID)) - return "SpinID: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.TotalBetValue != null && message.hasOwnProperty("TotalBetValue")) - if (!$util.isInteger(message.TotalBetValue) && !(message.TotalBetValue && $util.isInteger(message.TotalBetValue.low) && $util.isInteger(message.TotalBetValue.high))) - return "TotalBetValue: integer|Long expected"; - if (message.TotalPriceValue != null && message.hasOwnProperty("TotalPriceValue")) - if (!$util.isInteger(message.TotalPriceValue) && !(message.TotalPriceValue && $util.isInteger(message.TotalPriceValue.low) && $util.isInteger(message.TotalPriceValue.high))) - return "TotalPriceValue: integer|Long expected"; - if (message.IsFree != null && message.hasOwnProperty("IsFree")) - if (typeof message.IsFree !== "boolean") - return "IsFree: boolean expected"; - if (message.TotalBonusValue != null && message.hasOwnProperty("TotalBonusValue")) - if (!$util.isInteger(message.TotalBonusValue) && !(message.TotalBonusValue && $util.isInteger(message.TotalBonusValue.low) && $util.isInteger(message.TotalBonusValue.high))) - return "TotalBonusValue: integer|Long expected"; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (!$util.isInteger(message.Multiple) && !(message.Multiple && $util.isInteger(message.Multiple.low) && $util.isInteger(message.Multiple.high))) - return "Multiple: integer|Long expected"; - return null; - }; - - /** - * Creates a PlayerHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - */ - PlayerHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerHistoryInfo) - return object; - var message = new $root.gamehall.PlayerHistoryInfo(); - if (object.SpinID != null) - message.SpinID = String(object.SpinID); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.TotalBetValue != null) - if ($util.Long) - (message.TotalBetValue = $util.Long.fromValue(object.TotalBetValue)).unsigned = false; - else if (typeof object.TotalBetValue === "string") - message.TotalBetValue = parseInt(object.TotalBetValue, 10); - else if (typeof object.TotalBetValue === "number") - message.TotalBetValue = object.TotalBetValue; - else if (typeof object.TotalBetValue === "object") - message.TotalBetValue = new $util.LongBits(object.TotalBetValue.low >>> 0, object.TotalBetValue.high >>> 0).toNumber(); - if (object.TotalPriceValue != null) - if ($util.Long) - (message.TotalPriceValue = $util.Long.fromValue(object.TotalPriceValue)).unsigned = false; - else if (typeof object.TotalPriceValue === "string") - message.TotalPriceValue = parseInt(object.TotalPriceValue, 10); - else if (typeof object.TotalPriceValue === "number") - message.TotalPriceValue = object.TotalPriceValue; - else if (typeof object.TotalPriceValue === "object") - message.TotalPriceValue = new $util.LongBits(object.TotalPriceValue.low >>> 0, object.TotalPriceValue.high >>> 0).toNumber(); - if (object.IsFree != null) - message.IsFree = Boolean(object.IsFree); - if (object.TotalBonusValue != null) - if ($util.Long) - (message.TotalBonusValue = $util.Long.fromValue(object.TotalBonusValue)).unsigned = false; - else if (typeof object.TotalBonusValue === "string") - message.TotalBonusValue = parseInt(object.TotalBonusValue, 10); - else if (typeof object.TotalBonusValue === "number") - message.TotalBonusValue = object.TotalBonusValue; - else if (typeof object.TotalBonusValue === "object") - message.TotalBonusValue = new $util.LongBits(object.TotalBonusValue.low >>> 0, object.TotalBonusValue.high >>> 0).toNumber(); - if (object.Multiple != null) - if ($util.Long) - (message.Multiple = $util.Long.fromValue(object.Multiple)).unsigned = false; - else if (typeof object.Multiple === "string") - message.Multiple = parseInt(object.Multiple, 10); - else if (typeof object.Multiple === "number") - message.Multiple = object.Multiple; - else if (typeof object.Multiple === "object") - message.Multiple = new $util.LongBits(object.Multiple.low >>> 0, object.Multiple.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a PlayerHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.PlayerHistoryInfo} message PlayerHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SpinID = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBetValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBetValue = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalPriceValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalPriceValue = options.longs === String ? "0" : 0; - object.IsFree = false; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBonusValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBonusValue = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Multiple = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Multiple = options.longs === String ? "0" : 0; - } - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - object.SpinID = message.SpinID; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.TotalBetValue != null && message.hasOwnProperty("TotalBetValue")) - if (typeof message.TotalBetValue === "number") - object.TotalBetValue = options.longs === String ? String(message.TotalBetValue) : message.TotalBetValue; - else - object.TotalBetValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBetValue) : options.longs === Number ? new $util.LongBits(message.TotalBetValue.low >>> 0, message.TotalBetValue.high >>> 0).toNumber() : message.TotalBetValue; - if (message.TotalPriceValue != null && message.hasOwnProperty("TotalPriceValue")) - if (typeof message.TotalPriceValue === "number") - object.TotalPriceValue = options.longs === String ? String(message.TotalPriceValue) : message.TotalPriceValue; - else - object.TotalPriceValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalPriceValue) : options.longs === Number ? new $util.LongBits(message.TotalPriceValue.low >>> 0, message.TotalPriceValue.high >>> 0).toNumber() : message.TotalPriceValue; - if (message.IsFree != null && message.hasOwnProperty("IsFree")) - object.IsFree = message.IsFree; - if (message.TotalBonusValue != null && message.hasOwnProperty("TotalBonusValue")) - if (typeof message.TotalBonusValue === "number") - object.TotalBonusValue = options.longs === String ? String(message.TotalBonusValue) : message.TotalBonusValue; - else - object.TotalBonusValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBonusValue) : options.longs === Number ? new $util.LongBits(message.TotalBonusValue.low >>> 0, message.TotalBonusValue.high >>> 0).toNumber() : message.TotalBonusValue; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (typeof message.Multiple === "number") - object.Multiple = options.longs === String ? String(message.Multiple) : message.Multiple; - else - object.Multiple = options.longs === String ? $util.Long.prototype.toString.call(message.Multiple) : options.longs === Number ? new $util.LongBits(message.Multiple.low >>> 0, message.Multiple.high >>> 0).toNumber() : message.Multiple; - return object; - }; - - /** - * Converts this PlayerHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.PlayerHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - PlayerHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerHistoryInfo - * @function getTypeUrl - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerHistoryInfo"; - }; - - return PlayerHistoryInfo; - })(); - - gamehall.SCPlayerHistory = (function() { - - /** - * Properties of a SCPlayerHistory. - * @memberof gamehall - * @interface ISCPlayerHistory - * @property {Array.|null} [PlayerHistory] SCPlayerHistory PlayerHistory - * @property {Array.|null} [GameHistory] SCPlayerHistory GameHistory - */ - - /** - * Constructs a new SCPlayerHistory. - * @memberof gamehall - * @classdesc Represents a SCPlayerHistory. - * @implements ISCPlayerHistory - * @constructor - * @param {gamehall.ISCPlayerHistory=} [properties] Properties to set - */ - function SCPlayerHistory(properties) { - this.PlayerHistory = []; - this.GameHistory = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCPlayerHistory PlayerHistory. - * @member {Array.} PlayerHistory - * @memberof gamehall.SCPlayerHistory - * @instance - */ - SCPlayerHistory.prototype.PlayerHistory = $util.emptyArray; - - /** - * SCPlayerHistory GameHistory. - * @member {Array.} GameHistory - * @memberof gamehall.SCPlayerHistory - * @instance - */ - SCPlayerHistory.prototype.GameHistory = $util.emptyArray; - - /** - * Creates a new SCPlayerHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory=} [properties] Properties to set - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory instance - */ - SCPlayerHistory.create = function create(properties) { - return new SCPlayerHistory(properties); - }; - - /** - * Encodes the specified SCPlayerHistory message. Does not implicitly {@link gamehall.SCPlayerHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory} message SCPlayerHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCPlayerHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PlayerHistory != null && message.PlayerHistory.length) - for (var i = 0; i < message.PlayerHistory.length; ++i) - $root.gamehall.PlayerHistoryInfo.encode(message.PlayerHistory[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameHistory != null && message.GameHistory.length) - for (var i = 0; i < message.GameHistory.length; ++i) - $root.gamehall.GameHistoryInfo.encode(message.GameHistory[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCPlayerHistory message, length delimited. Does not implicitly {@link gamehall.SCPlayerHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory} message SCPlayerHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCPlayerHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCPlayerHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCPlayerHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCPlayerHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCPlayerHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.PlayerHistory && message.PlayerHistory.length)) - message.PlayerHistory = []; - message.PlayerHistory.push($root.gamehall.PlayerHistoryInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - if (!(message.GameHistory && message.GameHistory.length)) - message.GameHistory = []; - message.GameHistory.push($root.gamehall.GameHistoryInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCPlayerHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCPlayerHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCPlayerHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCPlayerHistory message. - * @function verify - * @memberof gamehall.SCPlayerHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCPlayerHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PlayerHistory != null && message.hasOwnProperty("PlayerHistory")) { - if (!Array.isArray(message.PlayerHistory)) - return "PlayerHistory: array expected"; - for (var i = 0; i < message.PlayerHistory.length; ++i) { - var error = $root.gamehall.PlayerHistoryInfo.verify(message.PlayerHistory[i]); - if (error) - return "PlayerHistory." + error; - } - } - if (message.GameHistory != null && message.hasOwnProperty("GameHistory")) { - if (!Array.isArray(message.GameHistory)) - return "GameHistory: array expected"; - for (var i = 0; i < message.GameHistory.length; ++i) { - var error = $root.gamehall.GameHistoryInfo.verify(message.GameHistory[i]); - if (error) - return "GameHistory." + error; - } - } - return null; - }; - - /** - * Creates a SCPlayerHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCPlayerHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - */ - SCPlayerHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCPlayerHistory) - return object; - var message = new $root.gamehall.SCPlayerHistory(); - if (object.PlayerHistory) { - if (!Array.isArray(object.PlayerHistory)) - throw TypeError(".gamehall.SCPlayerHistory.PlayerHistory: array expected"); - message.PlayerHistory = []; - for (var i = 0; i < object.PlayerHistory.length; ++i) { - if (typeof object.PlayerHistory[i] !== "object") - throw TypeError(".gamehall.SCPlayerHistory.PlayerHistory: object expected"); - message.PlayerHistory[i] = $root.gamehall.PlayerHistoryInfo.fromObject(object.PlayerHistory[i]); - } - } - if (object.GameHistory) { - if (!Array.isArray(object.GameHistory)) - throw TypeError(".gamehall.SCPlayerHistory.GameHistory: array expected"); - message.GameHistory = []; - for (var i = 0; i < object.GameHistory.length; ++i) { - if (typeof object.GameHistory[i] !== "object") - throw TypeError(".gamehall.SCPlayerHistory.GameHistory: object expected"); - message.GameHistory[i] = $root.gamehall.GameHistoryInfo.fromObject(object.GameHistory[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCPlayerHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.SCPlayerHistory} message SCPlayerHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCPlayerHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.PlayerHistory = []; - object.GameHistory = []; - } - if (message.PlayerHistory && message.PlayerHistory.length) { - object.PlayerHistory = []; - for (var j = 0; j < message.PlayerHistory.length; ++j) - object.PlayerHistory[j] = $root.gamehall.PlayerHistoryInfo.toObject(message.PlayerHistory[j], options); - } - if (message.GameHistory && message.GameHistory.length) { - object.GameHistory = []; - for (var j = 0; j < message.GameHistory.length; ++j) - object.GameHistory[j] = $root.gamehall.GameHistoryInfo.toObject(message.GameHistory[j], options); - } - return object; - }; - - /** - * Converts this SCPlayerHistory to JSON. - * @function toJSON - * @memberof gamehall.SCPlayerHistory - * @instance - * @returns {Object.} JSON object - */ - SCPlayerHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCPlayerHistory - * @function getTypeUrl - * @memberof gamehall.SCPlayerHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCPlayerHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCPlayerHistory"; - }; - - return SCPlayerHistory; - })(); - - gamehall.BigWinHistoryInfo = (function() { - - /** - * Properties of a BigWinHistoryInfo. - * @memberof gamehall - * @interface IBigWinHistoryInfo - * @property {string|null} [SpinID] BigWinHistoryInfo SpinID - * @property {number|Long|null} [CreatedTime] BigWinHistoryInfo CreatedTime - * @property {number|Long|null} [BaseBet] BigWinHistoryInfo BaseBet - * @property {number|Long|null} [PriceValue] BigWinHistoryInfo PriceValue - * @property {string|null} [UserName] BigWinHistoryInfo UserName - * @property {boolean|null} [IsVirtualData] BigWinHistoryInfo IsVirtualData - * @property {number|Long|null} [TotalBet] BigWinHistoryInfo TotalBet - * @property {Array.|null} [Cards] BigWinHistoryInfo Cards - */ - - /** - * Constructs a new BigWinHistoryInfo. - * @memberof gamehall - * @classdesc Represents a BigWinHistoryInfo. - * @implements IBigWinHistoryInfo - * @constructor - * @param {gamehall.IBigWinHistoryInfo=} [properties] Properties to set - */ - function BigWinHistoryInfo(properties) { - this.Cards = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BigWinHistoryInfo SpinID. - * @member {string} SpinID - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.SpinID = ""; - - /** - * BigWinHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo BaseBet. - * @member {number|Long} BaseBet - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.BaseBet = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo PriceValue. - * @member {number|Long} PriceValue - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.PriceValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo UserName. - * @member {string} UserName - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.UserName = ""; - - /** - * BigWinHistoryInfo IsVirtualData. - * @member {boolean} IsVirtualData - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.IsVirtualData = false; - - /** - * BigWinHistoryInfo TotalBet. - * @member {number|Long} TotalBet - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.TotalBet = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo Cards. - * @member {Array.} Cards - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.Cards = $util.emptyArray; - - /** - * Creates a new BigWinHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo=} [properties] Properties to set - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo instance - */ - BigWinHistoryInfo.create = function create(properties) { - return new BigWinHistoryInfo(properties); - }; - - /** - * Encodes the specified BigWinHistoryInfo message. Does not implicitly {@link gamehall.BigWinHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo} message BigWinHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BigWinHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SpinID != null && Object.hasOwnProperty.call(message, "SpinID")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.SpinID); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.BaseBet != null && Object.hasOwnProperty.call(message, "BaseBet")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.BaseBet); - if (message.PriceValue != null && Object.hasOwnProperty.call(message, "PriceValue")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.PriceValue); - if (message.UserName != null && Object.hasOwnProperty.call(message, "UserName")) - writer.uint32(/* id 5, wireType 2 =*/42).string(message.UserName); - if (message.IsVirtualData != null && Object.hasOwnProperty.call(message, "IsVirtualData")) - writer.uint32(/* id 6, wireType 0 =*/48).bool(message.IsVirtualData); - if (message.TotalBet != null && Object.hasOwnProperty.call(message, "TotalBet")) - writer.uint32(/* id 7, wireType 0 =*/56).int64(message.TotalBet); - if (message.Cards != null && message.Cards.length) { - writer.uint32(/* id 8, wireType 2 =*/66).fork(); - for (var i = 0; i < message.Cards.length; ++i) - writer.int32(message.Cards[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified BigWinHistoryInfo message, length delimited. Does not implicitly {@link gamehall.BigWinHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo} message BigWinHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BigWinHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BigWinHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BigWinHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BigWinHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SpinID = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.BaseBet = reader.int64(); - break; - } - case 4: { - message.PriceValue = reader.int64(); - break; - } - case 5: { - message.UserName = reader.string(); - break; - } - case 6: { - message.IsVirtualData = reader.bool(); - break; - } - case 7: { - message.TotalBet = reader.int64(); - break; - } - case 8: { - if (!(message.Cards && message.Cards.length)) - message.Cards = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Cards.push(reader.int32()); - } else - message.Cards.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BigWinHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BigWinHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BigWinHistoryInfo message. - * @function verify - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BigWinHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - if (!$util.isString(message.SpinID)) - return "SpinID: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.BaseBet != null && message.hasOwnProperty("BaseBet")) - if (!$util.isInteger(message.BaseBet) && !(message.BaseBet && $util.isInteger(message.BaseBet.low) && $util.isInteger(message.BaseBet.high))) - return "BaseBet: integer|Long expected"; - if (message.PriceValue != null && message.hasOwnProperty("PriceValue")) - if (!$util.isInteger(message.PriceValue) && !(message.PriceValue && $util.isInteger(message.PriceValue.low) && $util.isInteger(message.PriceValue.high))) - return "PriceValue: integer|Long expected"; - if (message.UserName != null && message.hasOwnProperty("UserName")) - if (!$util.isString(message.UserName)) - return "UserName: string expected"; - if (message.IsVirtualData != null && message.hasOwnProperty("IsVirtualData")) - if (typeof message.IsVirtualData !== "boolean") - return "IsVirtualData: boolean expected"; - if (message.TotalBet != null && message.hasOwnProperty("TotalBet")) - if (!$util.isInteger(message.TotalBet) && !(message.TotalBet && $util.isInteger(message.TotalBet.low) && $util.isInteger(message.TotalBet.high))) - return "TotalBet: integer|Long expected"; - if (message.Cards != null && message.hasOwnProperty("Cards")) { - if (!Array.isArray(message.Cards)) - return "Cards: array expected"; - for (var i = 0; i < message.Cards.length; ++i) - if (!$util.isInteger(message.Cards[i])) - return "Cards: integer[] expected"; - } - return null; - }; - - /** - * Creates a BigWinHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - */ - BigWinHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BigWinHistoryInfo) - return object; - var message = new $root.gamehall.BigWinHistoryInfo(); - if (object.SpinID != null) - message.SpinID = String(object.SpinID); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.BaseBet != null) - if ($util.Long) - (message.BaseBet = $util.Long.fromValue(object.BaseBet)).unsigned = false; - else if (typeof object.BaseBet === "string") - message.BaseBet = parseInt(object.BaseBet, 10); - else if (typeof object.BaseBet === "number") - message.BaseBet = object.BaseBet; - else if (typeof object.BaseBet === "object") - message.BaseBet = new $util.LongBits(object.BaseBet.low >>> 0, object.BaseBet.high >>> 0).toNumber(); - if (object.PriceValue != null) - if ($util.Long) - (message.PriceValue = $util.Long.fromValue(object.PriceValue)).unsigned = false; - else if (typeof object.PriceValue === "string") - message.PriceValue = parseInt(object.PriceValue, 10); - else if (typeof object.PriceValue === "number") - message.PriceValue = object.PriceValue; - else if (typeof object.PriceValue === "object") - message.PriceValue = new $util.LongBits(object.PriceValue.low >>> 0, object.PriceValue.high >>> 0).toNumber(); - if (object.UserName != null) - message.UserName = String(object.UserName); - if (object.IsVirtualData != null) - message.IsVirtualData = Boolean(object.IsVirtualData); - if (object.TotalBet != null) - if ($util.Long) - (message.TotalBet = $util.Long.fromValue(object.TotalBet)).unsigned = false; - else if (typeof object.TotalBet === "string") - message.TotalBet = parseInt(object.TotalBet, 10); - else if (typeof object.TotalBet === "number") - message.TotalBet = object.TotalBet; - else if (typeof object.TotalBet === "object") - message.TotalBet = new $util.LongBits(object.TotalBet.low >>> 0, object.TotalBet.high >>> 0).toNumber(); - if (object.Cards) { - if (!Array.isArray(object.Cards)) - throw TypeError(".gamehall.BigWinHistoryInfo.Cards: array expected"); - message.Cards = []; - for (var i = 0; i < object.Cards.length; ++i) - message.Cards[i] = object.Cards[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a BigWinHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.BigWinHistoryInfo} message BigWinHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BigWinHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Cards = []; - if (options.defaults) { - object.SpinID = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BaseBet = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BaseBet = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.PriceValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.PriceValue = options.longs === String ? "0" : 0; - object.UserName = ""; - object.IsVirtualData = false; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBet = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBet = options.longs === String ? "0" : 0; - } - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - object.SpinID = message.SpinID; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.BaseBet != null && message.hasOwnProperty("BaseBet")) - if (typeof message.BaseBet === "number") - object.BaseBet = options.longs === String ? String(message.BaseBet) : message.BaseBet; - else - object.BaseBet = options.longs === String ? $util.Long.prototype.toString.call(message.BaseBet) : options.longs === Number ? new $util.LongBits(message.BaseBet.low >>> 0, message.BaseBet.high >>> 0).toNumber() : message.BaseBet; - if (message.PriceValue != null && message.hasOwnProperty("PriceValue")) - if (typeof message.PriceValue === "number") - object.PriceValue = options.longs === String ? String(message.PriceValue) : message.PriceValue; - else - object.PriceValue = options.longs === String ? $util.Long.prototype.toString.call(message.PriceValue) : options.longs === Number ? new $util.LongBits(message.PriceValue.low >>> 0, message.PriceValue.high >>> 0).toNumber() : message.PriceValue; - if (message.UserName != null && message.hasOwnProperty("UserName")) - object.UserName = message.UserName; - if (message.IsVirtualData != null && message.hasOwnProperty("IsVirtualData")) - object.IsVirtualData = message.IsVirtualData; - if (message.TotalBet != null && message.hasOwnProperty("TotalBet")) - if (typeof message.TotalBet === "number") - object.TotalBet = options.longs === String ? String(message.TotalBet) : message.TotalBet; - else - object.TotalBet = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBet) : options.longs === Number ? new $util.LongBits(message.TotalBet.low >>> 0, message.TotalBet.high >>> 0).toNumber() : message.TotalBet; - if (message.Cards && message.Cards.length) { - object.Cards = []; - for (var j = 0; j < message.Cards.length; ++j) - object.Cards[j] = message.Cards[j]; - } - return object; - }; - - /** - * Converts this BigWinHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.BigWinHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - BigWinHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BigWinHistoryInfo - * @function getTypeUrl - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BigWinHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BigWinHistoryInfo"; - }; - - return BigWinHistoryInfo; - })(); - - gamehall.SCBigWinHistory = (function() { - - /** - * Properties of a SCBigWinHistory. - * @memberof gamehall - * @interface ISCBigWinHistory - * @property {Array.|null} [BigWinHistory] SCBigWinHistory BigWinHistory - * @property {number|null} [GameId] SCBigWinHistory GameId - */ - - /** - * Constructs a new SCBigWinHistory. - * @memberof gamehall - * @classdesc Represents a SCBigWinHistory. - * @implements ISCBigWinHistory - * @constructor - * @param {gamehall.ISCBigWinHistory=} [properties] Properties to set - */ - function SCBigWinHistory(properties) { - this.BigWinHistory = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCBigWinHistory BigWinHistory. - * @member {Array.} BigWinHistory - * @memberof gamehall.SCBigWinHistory - * @instance - */ - SCBigWinHistory.prototype.BigWinHistory = $util.emptyArray; - - /** - * SCBigWinHistory GameId. - * @member {number} GameId - * @memberof gamehall.SCBigWinHistory - * @instance - */ - SCBigWinHistory.prototype.GameId = 0; - - /** - * Creates a new SCBigWinHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory=} [properties] Properties to set - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory instance - */ - SCBigWinHistory.create = function create(properties) { - return new SCBigWinHistory(properties); - }; - - /** - * Encodes the specified SCBigWinHistory message. Does not implicitly {@link gamehall.SCBigWinHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory} message SCBigWinHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBigWinHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.BigWinHistory != null && message.BigWinHistory.length) - for (var i = 0; i < message.BigWinHistory.length; ++i) - $root.gamehall.BigWinHistoryInfo.encode(message.BigWinHistory[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCBigWinHistory message, length delimited. Does not implicitly {@link gamehall.SCBigWinHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory} message SCBigWinHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBigWinHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCBigWinHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCBigWinHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBigWinHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCBigWinHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.BigWinHistory && message.BigWinHistory.length)) - message.BigWinHistory = []; - message.BigWinHistory.push($root.gamehall.BigWinHistoryInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCBigWinHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCBigWinHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBigWinHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCBigWinHistory message. - * @function verify - * @memberof gamehall.SCBigWinHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCBigWinHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.BigWinHistory != null && message.hasOwnProperty("BigWinHistory")) { - if (!Array.isArray(message.BigWinHistory)) - return "BigWinHistory: array expected"; - for (var i = 0; i < message.BigWinHistory.length; ++i) { - var error = $root.gamehall.BigWinHistoryInfo.verify(message.BigWinHistory[i]); - if (error) - return "BigWinHistory." + error; - } - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCBigWinHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCBigWinHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - */ - SCBigWinHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCBigWinHistory) - return object; - var message = new $root.gamehall.SCBigWinHistory(); - if (object.BigWinHistory) { - if (!Array.isArray(object.BigWinHistory)) - throw TypeError(".gamehall.SCBigWinHistory.BigWinHistory: array expected"); - message.BigWinHistory = []; - for (var i = 0; i < object.BigWinHistory.length; ++i) { - if (typeof object.BigWinHistory[i] !== "object") - throw TypeError(".gamehall.SCBigWinHistory.BigWinHistory: object expected"); - message.BigWinHistory[i] = $root.gamehall.BigWinHistoryInfo.fromObject(object.BigWinHistory[i]); - } - } - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCBigWinHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.SCBigWinHistory} message SCBigWinHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCBigWinHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.BigWinHistory = []; - if (options.defaults) - object.GameId = 0; - if (message.BigWinHistory && message.BigWinHistory.length) { - object.BigWinHistory = []; - for (var j = 0; j < message.BigWinHistory.length; ++j) - object.BigWinHistory[j] = $root.gamehall.BigWinHistoryInfo.toObject(message.BigWinHistory[j], options); - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCBigWinHistory to JSON. - * @function toJSON - * @memberof gamehall.SCBigWinHistory - * @instance - * @returns {Object.} JSON object - */ - SCBigWinHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCBigWinHistory - * @function getTypeUrl - * @memberof gamehall.SCBigWinHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCBigWinHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCBigWinHistory"; - }; - - return SCBigWinHistory; - })(); - - return gamehall; -})(); - -module.exports = $root; diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index f3d15c9..1233d89 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -3286,8 +3286,7 @@ type GWSceneState struct { unknownFields protoimpl.UnknownFields RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - CurrState int32 `protobuf:"varint,2,opt,name=CurrState,proto3" json:"CurrState,omitempty"` - Fishing int32 `protobuf:"varint,3,opt,name=Fishing,proto3" json:"Fishing,omitempty"` + RoomState int32 `protobuf:"varint,2,opt,name=RoomState,proto3" json:"RoomState,omitempty"` } func (x *GWSceneState) Reset() { @@ -3329,16 +3328,9 @@ func (x *GWSceneState) GetRoomId() int32 { return 0 } -func (x *GWSceneState) GetCurrState() int32 { +func (x *GWSceneState) GetRoomState() int32 { if x != nil { - return x.CurrState - } - return 0 -} - -func (x *GWSceneState) GetFishing() int32 { - if x != nil { - return x.Fishing + return x.RoomState } return 0 } @@ -9088,792 +9080,790 @@ var file_server_proto_rawDesc = []byte{ 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x46, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, - 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, - 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, - 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x0a, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, + 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, - 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, - 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, - 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, - 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, - 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, - 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, - 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, - 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, - 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, - 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, - 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, - 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, - 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, - 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, - 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, - 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, - 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, - 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, - 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, - 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, - 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, - 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, - 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, - 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, + 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, + 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, + 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, + 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, + 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, + 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, + 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, + 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, + 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, + 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, + 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, + 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, + 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, + 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, + 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, + 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, + 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, + 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, + 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, - 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, + 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, + 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, + 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, + 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, + 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, + 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, + 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, + 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, + 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, + 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, + 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, + 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, + 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, + 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, + 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, + 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, + 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, + 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, + 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, + 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, + 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, - 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, - 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, - 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, - 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, - 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, - 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, - 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, - 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, - 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, - 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, - 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, - 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, - 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, - 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, - 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, + 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, + 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, + 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, + 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, + 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, + 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, + 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, + 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, - 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, + 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, + 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, + 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, + 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, + 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, + 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, + 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, + 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, + 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, + 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, + 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, + 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, + 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, - 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, - 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, - 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, - 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, - 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, - 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, - 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, + 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, + 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, + 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, + 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, + 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, + 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, - 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, - 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, - 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, + 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, + 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, + 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, + 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, + 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, + 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, + 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, + 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, + 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, + 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, + 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, + 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, + 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, + 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, + 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, + 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, + 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, + 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, - 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, - 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, - 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, - 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, - 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, - 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, + 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, - 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, - 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, - 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, - 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, - 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, - 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, - 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, - 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, - 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, - 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, - 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, - 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, - 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, - 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, - 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, - 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, - 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, - 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, - 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, - 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, - 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, - 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, - 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, - 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, - 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, - 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, - 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, - 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, - 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, - 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, - 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, - 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, + 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, + 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, + 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, + 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, + 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, + 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, + 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, + 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, + 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, + 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, + 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, + 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, + 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, + 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, + 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, + 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, + 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, + 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, + 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, + 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, + 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, + 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, + 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, + 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, + 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, + 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, + 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, + 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, + 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, + 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, + 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, + 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, - 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, - 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, - 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, - 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, - 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, - 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, - 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, - 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, - 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, - 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, - 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, - 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, - 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, - 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, - 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, - 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, - 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, - 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, - 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, - 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, - 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, - 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, - 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, - 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, + 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, + 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, + 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, + 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, + 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, + 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, + 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, + 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, + 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, + 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, + 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, + 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, + 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, + 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, + 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, + 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, + 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, + 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, + 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, + 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, + 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, + 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, + 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, + 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, + 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, + 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, + 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, + 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, + 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, + 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, + 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, + 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/server/server.proto b/protocol/server/server.proto index c6b140b..3f5d54b 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -439,8 +439,7 @@ message GWFishRecord { //PACKET_GW_SCENESTATE message GWSceneState { int32 RoomId = 1; - int32 CurrState = 2; - int32 Fishing = 3; + int32 RoomState = 2; } //PACKET_WR_INVITEROBOT diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index 9f4afc6..ae02080 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -93,6 +93,7 @@ const ( TienLenPacketID_PACKET_SCTienLenThinkLongCnt TienLenPacketID = 5385 // 长考次数 TienLenPacketID_PACKET_SCTienLenFirstGiveItemItem TienLenPacketID = 5386 // 第一次赠送记牌器道具 TienLenPacketID_PACKET_SCTienLenPetSkillRes TienLenPacketID = 5387 //宠物技能 + TienLenPacketID_PACKET_SCTienLenCycleBilled TienLenPacketID = 5388 // 大结算 ) // Enum value maps for TienLenPacketID. @@ -117,6 +118,7 @@ var ( 5385: "PACKET_SCTienLenThinkLongCnt", 5386: "PACKET_SCTienLenFirstGiveItemItem", 5387: "PACKET_SCTienLenPetSkillRes", + 5388: "PACKET_SCTienLenCycleBilled", } TienLenPacketID_value = map[string]int32{ "PACKET_TienLenZERO": 0, @@ -138,6 +140,7 @@ var ( "PACKET_SCTienLenThinkLongCnt": 5385, "PACKET_SCTienLenFirstGiveItemItem": 5386, "PACKET_SCTienLenPetSkillRes": 5387, + "PACKET_SCTienLenCycleBilled": 5388, } ) @@ -2291,6 +2294,117 @@ func (x *SCTienLenPetSkillRes) GetPetSkillRes() bool { return false } +type TienLenCycleBilledInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 + Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 +} + +func (x *TienLenCycleBilledInfo) Reset() { + *x = TienLenCycleBilledInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TienLenCycleBilledInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TienLenCycleBilledInfo) ProtoMessage() {} + +func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TienLenCycleBilledInfo.ProtoReflect.Descriptor instead. +func (*TienLenCycleBilledInfo) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{24} +} + +func (x *TienLenCycleBilledInfo) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *TienLenCycleBilledInfo) GetRoundScore() []int64 { + if x != nil { + return x.RoundScore + } + return nil +} + +func (x *TienLenCycleBilledInfo) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +// PACKET_SCTienLenCycleBilled +type SCTienLenCycleBilled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*TienLenCycleBilledInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` +} + +func (x *SCTienLenCycleBilled) Reset() { + *x = SCTienLenCycleBilled{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCTienLenCycleBilled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCTienLenCycleBilled) ProtoMessage() {} + +func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCTienLenCycleBilled.ProtoReflect.Descriptor instead. +func (*SCTienLenCycleBilled) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{25} +} + +func (x *SCTienLenCycleBilled) GetList() []*TienLenCycleBilledInfo { + if x != nil { + return x.List + } + return nil +} + var File_tienlen_proto protoreflect.FileDescriptor var file_tienlen_proto_rawDesc = []byte{ @@ -2611,54 +2725,68 @@ var file_tienlen_proto_rawDesc = []byte{ 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x16, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x75, + 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, + 0x4b, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, + 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, + 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, + 0x0f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, - 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, - 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, - 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, - 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, - 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, - 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4f, 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, + 0x64, 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, + 0x73, 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, + 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, + 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, + 0x86, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, + 0x10, 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, + 0x88, 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, + 0x6e, 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, + 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, + 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, + 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2674,7 +2802,7 @@ func file_tienlen_proto_rawDescGZIP() []byte { } var file_tienlen_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_tienlen_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: tienlen.OpResultCode (TienLenPacketID)(0), // 1: tienlen.TienLenPacketID @@ -2702,11 +2830,13 @@ var file_tienlen_proto_goTypes = []interface{}{ (*SCTienLenPlayerThinkLongCnt)(nil), // 23: tienlen.SCTienLenPlayerThinkLongCnt (*SCTienLenPlayerFirstGiveItemItem)(nil), // 24: tienlen.SCTienLenPlayerFirstGiveItemItem (*SCTienLenPetSkillRes)(nil), // 25: tienlen.SCTienLenPetSkillRes - nil, // 26: tienlen.TienLenPlayerData.ItemsEntry - nil, // 27: tienlen.SCTienLenCardTest.GradesEntry + (*TienLenCycleBilledInfo)(nil), // 26: tienlen.TienLenCycleBilledInfo + (*SCTienLenCycleBilled)(nil), // 27: tienlen.SCTienLenCycleBilled + nil, // 28: tienlen.TienLenPlayerData.ItemsEntry + nil, // 29: tienlen.SCTienLenCardTest.GradesEntry } var file_tienlen_proto_depIdxs = []int32{ - 26, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry + 28, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry 3, // 1: tienlen.TienLenPlayerData.SkillInfo:type_name -> tienlen.PetSkillInfo 4, // 2: tienlen.PetSkillInfo.SkillData:type_name -> tienlen.SkillInfo 2, // 3: tienlen.SCTienLenRoomInfo.Players:type_name -> tienlen.TienLenPlayerData @@ -2715,12 +2845,13 @@ var file_tienlen_proto_depIdxs = []int32{ 2, // 6: tienlen.SCTienLenPlayerEnter.Data:type_name -> tienlen.TienLenPlayerData 12, // 7: tienlen.TienLenPlayerGameBilled.AddItems:type_name -> tienlen.AddItem 13, // 8: tienlen.SCTienLenGameBilled.Datas:type_name -> tienlen.TienLenPlayerGameBilled - 27, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry - 10, // [10:10] is the sub-list for method output_type - 10, // [10:10] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 29, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry + 26, // 10: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_tienlen_proto_init() } @@ -3017,6 +3148,30 @@ func file_tienlen_proto_init() { return nil } } + file_tienlen_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TienLenCycleBilledInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tienlen_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCTienLenCycleBilled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3024,7 +3179,7 @@ func file_tienlen_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tienlen_proto_rawDesc, NumEnums: 2, - NumMessages: 26, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index a5bfbd3..57b169c 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -29,7 +29,8 @@ enum TienLenPacketID { PACKET_SCTienLenCardTest = 5384;//测试数据 PACKET_SCTienLenThinkLongCnt = 5385; // 长考次数 PACKET_SCTienLenFirstGiveItemItem = 5386; // 第一次赠送记牌器道具 - PACKET_SCTienLenPetSkillRes = 5387; //宠物技能 + PACKET_SCTienLenPetSkillRes = 5387; //宠物技能 + PACKET_SCTienLenCycleBilled = 5388; // 大结算 } @@ -265,4 +266,16 @@ message SCTienLenPetSkillRes{ int32 Snid = 1; int32 Pos = 2; bool PetSkillRes = 3; //true生效 +} + +message TienLenCycleBilledInfo { + int32 SnId = 1; // 玩家ID + repeated int64 RoundScore = 2; // 每轮得分 + int64 Score = 3; // 基础分 + // 总积分 = RoundScore + Score +} + +// PACKET_SCTienLenCycleBilled +message SCTienLenCycleBilled { + repeated TienLenCycleBilledInfo List = 1; } \ No newline at end of file diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index 3049b2f..9058404 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -319,7 +319,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e GainWay: common.GainWayItemChange, Operator: "system", Remark: "背包内使用兑换", - noLog: false, + NoLog: false, }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess @@ -344,7 +344,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e GainWay: common.GainWayItemFen, Operator: "system", Remark: fmt.Sprintf("道具分解%v", msg.GetItemId()), - noLog: false, + NoLog: false, }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 13dc9e9..981a779 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -492,7 +492,7 @@ func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, da dbGameFree := scene.dbGameFree if dbGameFree != nil { - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), int32(scene.gameSite), scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), scene.dbGameFree.GetSceneType(), scene.BaseScore) if p.Coin < limitCoin { logger.Logger.Warn("CSInviteFriendHandler player limitCoin") opRetCode = friend.OpResultCode_OPRC_InviteFriend_CoinLimit //金币不足 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index db1b05b..82b55e9 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -3,6 +3,7 @@ package main import ( "fmt" "math/rand" + "slices" "time" "mongo.games.com/goserver/core/basic" @@ -96,11 +97,18 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in goto failed } + // 密码是否正确 + if scene.password != "" && scene.password != msg.GetPassword() { + code = gamehall.OpResultCode_Game_OPRC_PasswordError + logger.Logger.Trace("CSEnterRoomHandler scene is closed") + goto failed + } + dbGameFree = scene.dbGameFree if dbGameFree != nil { if common.IsLocalGame(scene.gameId) { if !p.IsRob { - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), int32(scene.gameSite), scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), scene.dbGameFree.GetSceneType(), scene.BaseScore) if p.Coin < limitCoin { code = gamehall.OpResultCode_Game_OPRC_CoinNotEnough_Game logger.Logger.Trace("CSEnterRoomHandler scene is closed") @@ -304,7 +312,7 @@ func (this *CSQueryRoomInfoHandler) ProcessLocalGame(s *netlib.Session, packetid } if p.Platform == scene.limitPlatform.IdStr || isShow { if scene.sceneMode == int(msg.GetSceneMode()) && len(scene.players) != 0 { - if scene.gameId == int(gameid) && scene.gameSite == int(msg.GetGameSite()) { + if scene.gameId == int(gameid) && scene.dbGameFree.GetSceneType() == msg.GetGameSite() { // 私人房需要是好友 if scene.sceneMode == common.SceneMode_Private { @@ -854,110 +862,15 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in maxPlayerNum = 0 } - //创建房间 - csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) - roomId = SceneMgrSingleton.GenOneCoinSceneId() - if roomId == common.RANDID_INVALID { - code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) - goto failed - } - scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(gameSite), int(msg.GetSceneMode()), maxPlayerNum, - params, dbGameFree, baseScore, 0) - if scene != nil && code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) - csp.AddScene(scene) - if !scene.PlayerEnter(p, -1, true) { - code = gamehall.OpResultCode_Game_OPRC_Error_Game + if srvdata.GameFreeMgr.IsGameDif(dbGameFree.GetGameId(), common.GameDifThirteen) { + switch msg.GetMaxPlayerNum() { + case 1: + maxPlayerNum = 8 + default: + maxPlayerNum = 4 } } -failed: - resp := &gamehall.SCCreateRoom{ - GameId: msg.GetGameId(), - BaseCoin: msg.GetBaseCoin(), - SceneMode: msg.GetSceneMode(), - MaxPlayerNum: msg.GetMaxPlayerNum(), - Params: msg.GetParams(), - OpRetCode: code, - } - proto.SetDefaults(resp) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_CREATEROOM), resp) - return nil -} - -func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int, data interface{}, sid int64) error { - msg, ok := data.(*gamehall.CSCreateRoom) - if !ok { - return nil - } - - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - return nil - } - - var code gamehall.OpResultCode_Game - var dbGameFree *server.DB_GameFree - var dbGameRule *server.DB_GameRule - var params = common.CopySliceInt32ToInt64(msg.GetParams()) - var baseScore = msg.GetBaseCoin() - var sp ScenePolicy - var gamefreeId = msg.GetId() - var gps *webapiproto.GameFree - var maxPlayerNum = int(msg.GetMaxPlayerNum()) - var csp *CoinScenePool - var roomId int - var scene *Scene - var gameId = gamefreeId / 10000 - var spd *ScenePolicyData - - gps = PlatformMgrSingleton.GetGameFree(p.Platform, gamefreeId) - if gps == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - - dbGameFree = gps.DbGameFree - if dbGameFree == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - - //检测房间状态是否开启 - if !PlatformMgrSingleton.CheckGameState(p.Platform, dbGameFree.Id) { - code = gamehall.OpResultCode_Game_OPRC_GameHadClosed - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v GameHadClosed", p.SnId, gamefreeId) - goto failed - } - - dbGameRule = srvdata.PBDB_GameRuleMgr.GetData(dbGameFree.GetGameRule()) - if dbGameRule == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v gamerule not exist", p.SnId, gamefreeId) - goto failed - } - - sp = GetScenePolicy(int(gameId), 0) - if sp == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - spd, ok = sp.(*ScenePolicyData) - if ok { - //todo 参数校验 - _ = spd - - } - if p.scene != nil { - code = gamehall.OpResultCode_Game_OPRC_RoomHadExist_Game - logger.Logger.Tracef("CSCreateRoomHandler had scene(%d)", p.scene.sceneId) - goto failed - } - //创建房间 csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) roomId = SceneMgrSingleton.GenOneCoinSceneId() @@ -966,18 +879,27 @@ func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) goto failed } - scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(dbGameFree.GetSceneType()), int(msg.GetSceneMode()), - maxPlayerNum, params, dbGameFree, baseScore, 0) - if scene != nil { - if code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) - // try enter scene - csp.scenes[scene.sceneId] = scene - scene.csp = csp - if !scene.PlayerEnter(p, -1, true) { - code = gamehall.OpResultCode_Game_OPRC_Error_Game - } - } + + scene = SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: roomId, + SceneMode: int(msg.GetSceneMode()), + Params: params, + Platform: p.GetPlatform(), + GF: dbGameFree, + PlayerNum: int32(maxPlayerNum), + BaseScore: baseScore, + }) + if scene == nil { + logger.Logger.Tracef("CSCreateRoomHandler CreateScene fail SnId:%v GameId:%v", p.SnId, gameId) + code = gamehall.OpResultCode_Game_OPRC_Error_Game + goto failed + } + + logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) + csp.AddScene(scene) + if !scene.PlayerEnter(p, -1, true) { + code = gamehall.OpResultCode_Game_OPRC_Error_Game } failed: @@ -1028,7 +950,7 @@ func (this *CSAudienceSitHandler) Process(s *netlib.Session, packetid int, data } if !p.scene.IsTestScene() { // 入场限额检查 - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(p.scene.gameId), int32(p.scene.gameSite), p.scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(p.scene.gameId), p.scene.dbGameFree.GetSceneType(), p.scene.BaseScore) if p.Coin < limitCoin { pack.OpCode = gamehall.OpResultCode_Game_OPRC_MoneyNotEnough_Game newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_AUDIENCESIT), pack) @@ -1235,6 +1157,261 @@ failed: return nil } +func CSRoomConfigHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSRoomConfigHandler Process recv ", data) + _, ok := data.(*gamehall.CSRoomConfig) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + pack := PlatformMgrSingleton.GetRoomConfig(p.Platform) + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SCRoomConfig), pack) + logger.Logger.Tracef("SCRoomConfig: %v", pack) + return nil +} + +func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSCreatePrivateRoomHandler Process recv ", data) + msg, ok := data.(*gamehall.CSCreatePrivateRoom) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + var needPwd, costType, voice int64 + var password string + code := gamehall.OpResultCode_Game_OPRC_Error_Game + pack := &gamehall.SCCreatePrivateRoom{} + send := func() { + pack.OpRetCode = code + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM), pack) + logger.Logger.Tracef("SCCreatePrivateRoom: %v", pack) + } + + // 参数校验 + cfg := PlatformMgrSingleton.GetConfig(p.Platform).RoomConfig[msg.GetRoomConfigId()] + if cfg == nil { + send() + return nil + } + // 场次 + if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { + send() + return nil + } + // 局数 + if !slices.Contains(cfg.GetRound(), msg.GetRound()) { + send() + return nil + } + // 玩家数量 + if !slices.Contains(cfg.GetPlayerNum(), msg.GetPlayerNum()) { + send() + return nil + } + // 密码 + if cfg.GetNeedPassword() != 3 { + needPwd = int64(cfg.GetNeedPassword()) + } else { + needPwd = int64(msg.GetNeedPassword()) + } + if needPwd < 1 || needPwd > 2 { + needPwd = 2 // 默认不需要密码 + } + // 房费类型 + if cfg.GetCostType() != 3 { + costType = int64(cfg.GetCostType()) + } else { + costType = int64(msg.GetCostType()) + } + if costType < 1 || costType > 2 { + costType = 1 // 默认房主支付 + } + // 语音 + if cfg.GetVoice() != 3 { + voice = int64(cfg.GetVoice()) + } else { + voice = int64(msg.GetVoice()) + } + if voice < 1 || voice > 2 { + voice = 1 // 默认开启语音 + } + + // 场次是否存在 + gf := PlatformMgrSingleton.GetGameFree(p.Platform, msg.GetGameFreeId()) + if gf == nil { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + sp := GetScenePolicy(int(gf.GetDbGameFree().GetGameId()), int(gf.GetDbGameFree().GetGameMode())) + if sp == nil { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + // 游戏是否开启 + if cfg.GetOn() != common.On || gf.GetStatus() { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + if p.scene != nil { + code = gamehall.OpResultCode_Game_OPRC_RoomHadExist_Game + send() + return nil + } + + // 密码 + if needPwd == 1 { + password = SceneMgrSingleton.GenPassword() + } + + // 费用是否充足 + if len(cfg.GetCost()) > 0 && !sp.CostEnough(int(costType), int(msg.GetPlayerNum()), cfg, p) { + code = gamehall.OpResultCode_Game_OPRC_CostNotEnough + send() + return nil + } + + // 创建房间 + csp := CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, msg.GetGameFreeId()) + roomId := SceneMgrSingleton.GenOnePrivateSceneId() + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: roomId, + SceneMode: common.SceneMode_Private, + CycleTimes: 0, + TotalRound: int(msg.GetRound()), + Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), + GS: nil, + Platform: PlatformMgrSingleton.GetPlatform(p.Platform), + GF: csp.dbGameFree, + PlayerNum: msg.GetPlayerNum(), + Password: password, + Voice: int32(voice), + Channel: cfg.GetOnChannelName(), + RoomType: PlatformMgrSingleton.GetConfig(p.Platform).RoomType[cfg.GetRoomType()], + RoomConfig: cfg, + RoomCostType: int(msg.GetCostType()), + }) + + if scene == nil { + code = gamehall.OpResultCode_Game_OPRC_SceneServerMaintain_Game + send() + return nil + } + + csp.AddScene(scene) + + if !scene.PlayerEnter(p, -1, true) { + send() + return nil + } + + pack = &gamehall.SCCreatePrivateRoom{ + OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, + GameFreeId: msg.GetGameFreeId(), + RoomTypeId: msg.GetRoomTypeId(), + RoomConfigId: msg.GetRoomConfigId(), + Round: msg.GetRound(), + PlayerNum: msg.GetPlayerNum(), + NeedPassword: int32(needPwd), + CostType: int32(costType), + Voice: int32(voice), + RoomId: int32(roomId), + Password: password, + } + send() + return nil +} + +func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSGetPrivateRoomListHandler Process recv ", data) + _, ok := data.(*gamehall.CSGetPrivateRoomList) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + pack := &gamehall.SCGetPrivateRoomList{} + scenes := SceneMgrSingleton.FindRoomList(&FindRoomParam{ + Platform: p.Platform, + GameId: nil, + GameMode: nil, + SceneMode: nil, + RoomId: 0, + IsCustom: 1, + IsFree: 0, + GameFreeId: nil, + SnId: 0, + IsMatch: false, + IsRankMatch: false, + Channel: []string{p.LastChannel}, + }) + for _, v := range scenes { + needPassword := 0 + if v.password != "" { + needPassword = 1 + } + var players []*gamehall.PrivatePlayerInfo + for _, vv := range v.players { + players = append(players, &gamehall.PrivatePlayerInfo{ + SnId: vv.GetSnId(), + Name: vv.GetName(), + UseRoleId: vv.GetRoleId(), + }) + } + d := &gamehall.PrivateRoomInfo{ + GameFreeId: v.dbGameFree.GetId(), + GameId: v.dbGameFree.GetGameId(), + RoomTypeId: v.RoomType.GetId(), + RoomConfigId: v.RoomConfig.GetId(), + RoomId: int32(v.sceneId), + NeedPassword: int32(needPassword), + CurrRound: v.currRound, + MaxRound: v.totalRound, + CurrNum: int32(v.GetPlayerCnt()), + MaxPlayer: int32(v.playerNum), + CreateTs: v.createTime.Unix(), + State: v.SceneState, + Players: players, + } + pack.Datas = append(pack.Datas, d) + } + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST), pack) + logger.Logger.Tracef("SCGetPrivateRoomList: %v", pack) + return nil +} + +func CSTouchTypeHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSTouchTypeHandler Process recv ", data) + _, ok := data.(*gamehall.CSTouchType) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + return nil +} + func init() { // 返回房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomHandler{}) @@ -1266,4 +1443,12 @@ func init() { // 观众进入房间 common.Register(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &gamehall.CSEnterRoom{}, CSAudienceEnterRoomHandler) + // 竞技馆房间配置列表 + common.Register(int(gamehall.GameHallPacketID_PACKET_CSRoomConfig), &gamehall.CSRoomConfig{}, CSRoomConfigHandler) + // 创建竞技馆房间 + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM), &gamehall.CSCreatePrivateRoom{}, CSCreatePrivateRoomHandler) + // 竞技馆房间列表 + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST), &gamehall.CSGetPrivateRoomList{}, CSGetPrivateRoomListHandler) + // 保持刷新 + common.Register(int(gamehall.GameHallPacketID_PACKET_CSTouchType), &gamehall.CSTouchType{}, CSTouchTypeHandler) } diff --git a/worldsrv/action_pets.go b/worldsrv/action_pets.go index 0cd716c..fe7c5b7 100644 --- a/worldsrv/action_pets.go +++ b/worldsrv/action_pets.go @@ -550,7 +550,7 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) GainWay: common.GainWaySkinUpGrade, Operator: "system", Remark: "皮肤升级消耗", - noLog: false, + NoLog: false, }) if !ok { logger.Logger.Errorf("CSSkinUpgrade upgrade error") @@ -604,7 +604,7 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { GainWay: common.GainWaySkinUnLock, Operator: "system", Remark: "皮肤解锁消耗", - noLog: false, + NoLog: false, }) if !ok { logger.Logger.Errorf("CSSKinUnLock Unlock error") diff --git a/worldsrv/action_phonelottery.go b/worldsrv/action_phonelottery.go index 65503c1..30591e1 100644 --- a/worldsrv/action_phonelottery.go +++ b/worldsrv/action_phonelottery.go @@ -402,9 +402,9 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da GainWay: common.GainWayDiamondLottery, Operator: "system", Remark: "钻石抽奖", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) pack.LuckyScore = p.DiamondLotteryScore p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLottery), pack) diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 93974ec..025416e 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -24,7 +24,6 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - gamehall_proto "mongo.games.com/game/protocol/gamehall" player_proto "mongo.games.com/game/protocol/player" webapi_proto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/webapi" @@ -2059,13 +2058,13 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) } // 给玩家发送三方余额状态 - statePack := &gamehall_proto.SCThridGameBalanceUpdateState{} - if player.thridBalanceReqIsSucces { - statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game - } else { - statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Error_Game - } - player.SendRawToClientIncOffLine(sid, s, int(gamehall_proto.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) + //statePack := &gamehall_proto.SCThridGameBalanceUpdateState{} + //if player.thridBalanceReqIsSucces { + // statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game + //} else { + // statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Error_Game + //} + //player.SendRawToClientIncOffLine(sid, s, int(gamehall_proto.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) //抽奖次数兼容老玩家 if !player.IsRob && !player.InitLotteryStatus && WelfareMgrSington.GetPhoneLotteryStatus(player.Platform) == model.WelfareOpen { diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 6728c10..429e3b5 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -73,21 +73,7 @@ func init() { p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } default: - if scene.ClubId > 0 { - //if club, ok := clubManager.clubList[scene.ClubId]; ok { - // if cp, ok1 := club.memberList[p.SnId]; ok1 { - // cp.GameCount += msg.GetGameTimes() - // cp.DayCoin += msg.GetTotalConvertibleFlow() - p.TotalConvertibleFlow - // } - //} - //if !ClubSceneMgrSington.PlayerLeave(p, int(msg.GetReason())) { - // logger.Logger.Warnf("Club leave room msg snid:%v sceneid:%v gameid:%v modeid:%v [coinscene]", - // p.SnId, scene.sceneId, scene.gameId, scene.mode) - // scene.PlayerLeave(p, int(msg.GetReason())) - //} - } else { - scene.PlayerLeave(p, int(msg.GetReason())) - } + scene.PlayerLeave(p, int(msg.GetReason())) } if p.scene != nil { @@ -129,7 +115,7 @@ func init() { Platform: p.Platform, }) //比赛场不处理下面的内容 - if !scene.IsMatchScene() { + if !scene.IsMatchScene() && !scene.IsCustom() { // 破产检测 sdata := srvdata.PBDB_GameSubsidyMgr.GetData(GameSubsidyid) if sdata != nil { @@ -301,7 +287,6 @@ func init() { })) // 房间游戏状态 - // 捕鱼 netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENESTATE), netlib.PacketFactoryWrapper(func() interface{} { return &serverproto.GWSceneState{} })) @@ -310,8 +295,7 @@ func init() { if msg, ok := pack.(*serverproto.GWSceneState); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { - scene.state = msg.GetCurrState() - scene.fishing = msg.GetFishing() + scene.sp.OnSceneState(scene, int(msg.GetRoomState())) } } return nil @@ -600,8 +584,8 @@ func init() { Ts: proto.Int64(leftTime), Sec: proto.Int32(scene.StateSec), }) - gameStateMgr.BrodcastGameState(int32(scene.gameId), scene.limitPlatform.IdStr, - int(gamehallproto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) + gameStateMgr.BrodcastGameState( + int32(scene.gameId), scene.limitPlatform.IdStr, int(gamehallproto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) } } } diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index 72b6e23..5c8e874 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -1093,9 +1093,9 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int GainWay: common.GainWayPermitExchangeGain, Operator: "system", Remark: "赛季通行证兑换获得", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) p.WelfData.PermitExchange[msg.GetId()] = append(p.WelfData.PermitExchange[msg.GetId()], now.Unix()) // 兑换记录 diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 675e14f..13ae7d7 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -149,8 +149,8 @@ type ItemParam struct { Add int64 // 加成数量 GainWay int32 // 记录类型 Operator, Remark string // 操作人,备注 - gameId, gameFreeId int64 // 游戏id,场次id - noLog bool // 是否不记录日志 + GameId, GameFreeId int64 // 游戏id,场次id + NoLog bool // 是否不记录日志 LogId string // 撤销的id,道具兑换失败 } @@ -160,7 +160,7 @@ type AddItemParam struct { } func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, bool) { - return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.gameId, args.gameFreeId, args.noLog, AddItemParam{ + return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ Cost: args.Cost, LogId: args.LogId, }) @@ -173,7 +173,7 @@ func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, boo // remark 备注 // gameId 游戏id // gameFreeId 场次id -// noLog 是否不记录日志 +// NoLog 是否不记录日志 // Deprecated: use [ AddItemsV2 ] instead func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { @@ -758,9 +758,9 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in GainWay: common.GainWayItemChange, Operator: "system", Remark: "背包内使用兑换失败", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, LogId: logId, }) logger.Logger.Errorf("获取兑换码失败 snid:%v itemID:%v res:%v err:%v", p.SnId, itemId, res, err) diff --git a/worldsrv/coinscenepool_base.go b/worldsrv/coinscenepool_base.go index bdc02a9..ee214c1 100644 --- a/worldsrv/coinscenepool_base.go +++ b/worldsrv/coinscenepool_base.go @@ -3,8 +3,6 @@ package main import ( "sort" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/protocol/gamehall" @@ -211,14 +209,6 @@ func (this *BaseCoinScenePool) AudienceLeave(pool *CoinScenePool, p *Player, rea func (this *BaseCoinScenePool) OnPlayerLeave(pool *CoinScenePool, s *Scene, p *Player) {} func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { - gameId := int(pool.dbGameFree.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("Get %v game min session failed.", gameId) - return nil - } - - gameMode := pool.dbGameFree.GetGameMode() params := common.CopySliceInt32ToInt64(pool.dbGameRule.GetParams()) limitPlatform := PlatformMgrSingleton.GetPlatform(pool.platform) if limitPlatform == nil || !limitPlatform.Isolated { @@ -226,9 +216,14 @@ func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { } sceneId := SceneMgrSingleton.GenOneCoinSceneId() - - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, - 1, -1, params, gs, limitPlatform, 0, pool.dbGameFree, pool.ID()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: params, + GS: nil, + Platform: limitPlatform, + GF: pool.dbGameFree, + }) return scene } diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 09f6c84..6ec2898 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -20,10 +20,10 @@ func init() { RegisterCoinScenePool(common.GameId_TienLen_yl, local) RegisterCoinScenePool(common.GameId_TienLen_toend, local) RegisterCoinScenePool(common.GameId_TienLen_yl_toend, local) - RegisterCoinScenePool(common.GameId_TaLa, local) - RegisterCoinScenePool(common.GameId_SamLoc, local) RegisterCoinScenePool(common.GameID_ThirteenFree, local) RegisterCoinScenePool(common.GameID_ThirteenFreeLaiZi, local) + //RegisterCoinScenePool(common.GameId_TaLa, local) + //RegisterCoinScenePool(common.GameId_SamLoc, local) } type CoinScenePoolLocal struct { @@ -187,14 +187,7 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { gameId := int(pool.dbGameFree.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Errorf("Get %v game min session failed.", gameId) - return nil - } - sceneId := SceneMgrSingleton.GenOneCoinSceneId() - params := pool.dbGameRule.GetParams() limitPlatform := PlatformMgrSingleton.GetPlatform(pool.platform) if limitPlatform == nil || !limitPlatform.Isolated { @@ -203,7 +196,6 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { //根据携带金额取可创房间 DB_Createroom baseScore := int32(0) - gameSite := 0 playerTakeCoin := p.Coin var dbCreateRoom *serverproto.DB_Createroom arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr @@ -225,26 +217,26 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { } if len(dbCreateRoom.GetBetRange()) != 0 && dbCreateRoom.GetBetRange()[0] != 0 { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) - gameSite = int(dbCreateRoom.GetGameSite()) } if baseScore == 0 { logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! baseScore==0") return nil } - - scene := SceneMgrSingleton.CreateLocalGameScene(p.SnId, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, 0, pool.dbGameFree, baseScore, 0, pool.ID()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: common.CopySliceInt32ToInt64(params), + GS: nil, + Platform: limitPlatform, + GF: pool.dbGameFree, + BaseScore: baseScore, + }) return scene } func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { gameId := int(pool.dbGameRule.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("Get %v game min session failed.", gameId) - return nil - } - sceneId := SceneMgrSingleton.GenOneCoinSceneId() params := pool.dbGameRule.GetParams() @@ -261,7 +253,6 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { } //根据SceneType随机可创房间 DB_Createroom baseScore := int32(0) - gameSite := 0 var dbCreateRooms []*serverproto.DB_Createroom arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr for i := len(arrs) - 1; i >= 0; i-- { @@ -281,13 +272,19 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { dbCreateRoom := dbCreateRooms[randIdx] if len(dbCreateRoom.GetBetRange()) != 0 && dbCreateRoom.GetBetRange()[0] != 0 { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) - gameSite = int(dbCreateRoom.GetGameSite()) } if baseScore != 0 { - scene = SceneMgrSingleton.CreateLocalGameScene(0, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, playerNum, pool.dbGameFree, baseScore, 0, pool.ID()) + scene = SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: common.CopySliceInt32ToInt64(params), + Platform: limitPlatform, + GF: pool.dbGameFree, + PlayerNum: int32(playerNum), + BaseScore: baseScore, + }) if scene != nil { - logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.gameSite, baseScore, randIdx) + logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) } } } diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 51d5c27..d78a051 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -141,7 +141,7 @@ func init() { }) PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ Platform: "1", - Id: 1, + Id: 2, Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", RoomType: 1, On: 1, diff --git a/worldsrv/gameconfig.go b/worldsrv/gameconfig.go index c2c33b0..18440e5 100644 --- a/worldsrv/gameconfig.go +++ b/worldsrv/gameconfig.go @@ -124,11 +124,7 @@ func UpdateGameConfigPolicy(fullPath string) error { } if err == nil && spd.Init() { for _, m := range spd.GameMode { - //logger.Logger.Info("New game config ver:", spd.ConfigVer) - if !CheckGameConfigVer(spd.ConfigVer, spd.GameId, m) { - //TeaHouseMgr.UpdateGameConfigVer(spd.ConfigVer, spd.GameId, m) - } - RegisteScenePolicy(int(spd.GameId), int(m), spd) + RegisterScenePolicy(int(spd.GameId), int(m), spd) } } return err diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 2d28dd5..872056f 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -160,56 +160,24 @@ func (this *GameSession) AddScene(s *Scene) { GameMode: proto.Int(s.gameMode), SceneMode: proto.Int(s.sceneMode), Params: s.params, - ParamsEx: s.paramsEx, Creator: proto.Int32(s.creator), - Agentor: proto.Int32(s.agentor), HallId: proto.Int32(s.hallId), ReplayCode: proto.String(s.replayCode), GroupId: proto.Int32(s.groupId), TotalOfGames: proto.Int32(s.totalRound), BaseScore: proto.Int32(s.BaseScore), PlayerNum: proto.Int(s.playerNum), - } - var platform *Platform - if s.limitPlatform != nil { - msg.Platform = proto.String(s.limitPlatform.IdStr) - platform = s.limitPlatform - } else { - msg.Platform = proto.String(DefaultPlatform) - platform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - } - if s.dbGameFree != nil { - msg.DBGameFree = s.dbGameFree - } else if platform != nil { - gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, s.paramsEx[0]) - if gps != nil { - if gps.GroupId == 0 { - msg.DBGameFree = gps.DbGameFree - } else { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - msg.DBGameFree = pgg.DbGameFree - } - } - } + DBGameFree: s.dbGameFree, + Platform: s.limitPlatform.IdStr, } if s.IsCoinScene() { if sp, ok := s.sp.(*ScenePolicyData); ok { msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) } } - //if s.ClubId > 0 { - // msg.Club = proto.Int32(s.ClubId) - // msg.ClubRoomId = proto.String(s.clubRoomID) - // msg.ClubRoomPos = proto.Int32(s.clubRoomPos) - // msg.ClubRate = proto.Int32(s.clubRoomTax) - //} - if s.IsHundredScene() { - //msg.RealCtrl = WBCtrlCfgMgr.GetRealCtrl(s.limitPlatform.IdStr) - } // 象棋游戏添加段位配置 - if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess && platform != nil { - msg.ChessRank = ChessRankMgrSington.GetChessRankArr(platform.Name, int32(s.gameId)) + if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess { + msg.ChessRank = ChessRankMgrSington.GetChessRankArr(s.limitPlatform.Name, int32(s.gameId)) } proto.SetDefaults(msg) this.Send(int(server_proto.SSPacketID_PACKET_WG_CREATESCENE), msg) diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index aaedd3c..e7e5d77 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -201,22 +201,22 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl dbGameRule := srvdata.PBDB_GameRuleMgr.GetData(dbGameFree.GetGameRule()) if dbGameRule != nil { gameId := int(dbGameRule.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs != nil { - sceneId := SceneMgrSingleton.GenOneHundredSceneId() - gameMode := dbGameRule.GetGameMode() - params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, 1, -1, params, gs, limitPlatform, groupId, dbGameFree, id) - if scene != nil { - logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) - scene.hallId = id - scene.hp = this - return scene - } else { - logger.Logger.Errorf("Create hundred scene %v-%v failed.", gameId, sceneId) - } + sceneId := SceneMgrSingleton.GenOneHundredSceneId() + params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: params, + Platform: limitPlatform, + GF: dbGameFree, + }) + if scene != nil { + logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) + scene.hallId = id + scene.hp = this + return scene } else { - logger.Logger.Errorf("Game %v server session no found.", gameId) + logger.Logger.Errorf("Create hundred scene %v-%v failed.", gameId, sceneId) } } else { logger.Logger.Errorf("Game rule data %v no found.", dbGameFree.GetGameRule()) diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 1016408..c2c38cf 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -23,20 +23,12 @@ type MatchSceneMgr struct { // isFinals 是否决赛 // round 第几轮 func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scene { - sceneId := SceneMgrSingleton.GenOneMatchSceneId() - gameId := int(tm.dbGameFree.GameId) - gameMode := tm.dbGameFree.GetGameMode() - // 获取游戏服务器 - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warn("not found game server, gameid: ", gameId) - return nil - } // 平台 limitPlatform := PlatformMgrSingleton.GetPlatform(tm.Platform) if limitPlatform == nil || !limitPlatform.Isolated { limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) } + sceneId := SceneMgrSingleton.GenOneMatchSceneId() // 是否决赛 finals := int32(0) if isFinals { @@ -54,13 +46,16 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen nextNeed = tm.gmd.MatchPromotion[round] } } - groupId := PlatformMgrSingleton.GetGameFreeGroup(tm.Platform, tm.dbGameFree.Id) // 建房参数 // 比赛唯一索引,是否决赛,第几轮,本轮总人数,下一轮总人数,赛制类型 params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)} - - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Match, 1, - 0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Match, + Params: params, + Platform: limitPlatform, + GF: tm.dbGameFree, + }) if scene != nil { scene.matchId = tm.SortId return scene diff --git a/worldsrv/platform.go b/worldsrv/platform.go index e7106ab..d71d19f 100644 --- a/worldsrv/platform.go +++ b/worldsrv/platform.go @@ -48,50 +48,48 @@ type ClubConfig struct { GiveCoinRate []int64 //会长充值额外赠送比例 } type Platform struct { - Id int32 // 平台ID - IdStr string // 字符id - Name string // 平台名称 - Isolated bool // 是否孤立(别的平台看不到) - Disable bool // 是否禁用 - Halls map[int32]*PlatformGameHall //厅 - GamePlayerNum map[int32]*PlatformGamePlayerNum //游戏人数 - dirty bool // - ServiceUrl string //客服地址 - BindOption int32 //绑定选项 - ServiceFlag bool //客服标记 是否支持浏览器跳转 false否 true是 - UpgradeAccountGiveCoin int32 //升级账号奖励金币 - NewAccountGiveCoin int32 //新账号奖励金币 - PerBankNoLimitAccount int32 //同一银行卡号绑定用户数量限制 - ExchangeMin int32 //最低兑换金额 - ExchangeLimit int32 //兑换后身上保留最低余额 - ExchangeTax int32 //兑换税收(万分比) - ExchangeFlow int32 //兑换流水比例 - ExchangeForceTax int32 //强制兑换税收 - ExchangeGiveFlow int32 //赠送兑换流水 - ExchangeFlag int32 //兑换标记 二进制 第一位:兑换税收 第二位:流水比例 - ExchangeVer int32 //兑换版本号 - ExchangeMultiple int32 //兑换基数(只能兑换此数的整数倍) - VipRange []int32 //VIP充值区间 - OtherParams string //其他参数json串 - SpreadConfig int32 //0:等级返点 1:保底返佣 - RankSwitch RankSwitch //排行榜开关 - ClubConfig *ClubConfig //俱乐部配置 - VerifyCodeType int32 //注册账号使用验证码方式 0:短信验证码 1:随机字符串 2:滑块验证码 3:不使用 - RegisterVerifyCodeSwitch bool // 关闭注册验证码 - ThirdGameMerchant map[int32]int32 //三方游戏平台状态 - CustomType int32 //客服类型 0:live800 1:美洽 2:cc - NeedDeviceInfo bool //需要获取设备信息 - NeedSameName bool //绑定的银行卡和支付宝用户名字需要相同 - ExchangeBankMax int32 //银行卡最大兑换金额 0不限制 - ExchangeAlipayMax int32 //支付宝最大兑换金额 0不限制 - DgHboConfig int32 //dg hbo配置,默认0,dg 1 hbo 2 - PerBankNoLimitName int32 //银行卡和支付宝 相同名字最大数量 - IsCanUserBindPromoter bool //是否允许用户手动绑定推广员 - UserBindPromoterPrize int32 //手动绑定奖励 - SpreadWinLose bool //是否打开客损开关 - GameConfig *GameList //平台游戏配置 - MerchantKey string //商户秘钥 - BindTelReward map[int32]int64 // 绑定手机号奖励 + Id int32 // 平台ID + IdStr string // 字符id + Name string // 平台名称 + Isolated bool // 是否孤立(别的平台看不到) + Disable bool // 是否禁用 + dirty bool // + ServiceUrl string //客服地址 + BindOption int32 //绑定选项 + ServiceFlag bool //客服标记 是否支持浏览器跳转 false否 true是 + UpgradeAccountGiveCoin int32 //升级账号奖励金币 + NewAccountGiveCoin int32 //新账号奖励金币 + PerBankNoLimitAccount int32 //同一银行卡号绑定用户数量限制 + ExchangeMin int32 //最低兑换金额 + ExchangeLimit int32 //兑换后身上保留最低余额 + ExchangeTax int32 //兑换税收(万分比) + ExchangeFlow int32 //兑换流水比例 + ExchangeForceTax int32 //强制兑换税收 + ExchangeGiveFlow int32 //赠送兑换流水 + ExchangeFlag int32 //兑换标记 二进制 第一位:兑换税收 第二位:流水比例 + ExchangeVer int32 //兑换版本号 + ExchangeMultiple int32 //兑换基数(只能兑换此数的整数倍) + VipRange []int32 //VIP充值区间 + OtherParams string //其他参数json串 + SpreadConfig int32 //0:等级返点 1:保底返佣 + RankSwitch RankSwitch //排行榜开关 + ClubConfig *ClubConfig //俱乐部配置 + VerifyCodeType int32 //注册账号使用验证码方式 0:短信验证码 1:随机字符串 2:滑块验证码 3:不使用 + RegisterVerifyCodeSwitch bool // 关闭注册验证码 + ThirdGameMerchant map[int32]int32 //三方游戏平台状态 + CustomType int32 //客服类型 0:live800 1:美洽 2:cc + NeedDeviceInfo bool //需要获取设备信息 + NeedSameName bool //绑定的银行卡和支付宝用户名字需要相同 + ExchangeBankMax int32 //银行卡最大兑换金额 0不限制 + ExchangeAlipayMax int32 //支付宝最大兑换金额 0不限制 + DgHboConfig int32 //dg hbo配置,默认0,dg 1 hbo 2 + PerBankNoLimitName int32 //银行卡和支付宝 相同名字最大数量 + IsCanUserBindPromoter bool //是否允许用户手动绑定推广员 + UserBindPromoterPrize int32 //手动绑定奖励 + SpreadWinLose bool //是否打开客损开关 + GameConfig *GameList //平台游戏配置 + MerchantKey string //商户秘钥 + BindTelReward map[int32]int64 // 绑定手机号奖励 } type GameList struct { @@ -179,12 +177,10 @@ func CompareGameFreeConfigChanged(oldCfg, newCfg *webapiproto.GameFree) bool { func NewPlatform(id int32, isolated bool) *Platform { p := &Platform{ - Id: id, - IdStr: strconv.Itoa(int(id)), - Isolated: isolated, - Halls: make(map[int32]*PlatformGameHall), - GamePlayerNum: make(map[int32]*PlatformGamePlayerNum), - ClubConfig: &ClubConfig{}, + Id: id, + IdStr: strconv.Itoa(int(id)), + Isolated: isolated, + ClubConfig: &ClubConfig{}, GameConfig: &GameList{ gameFreeId: make(map[int32]*webapiproto.GameFree), gameId: make(map[int32][]*webapiproto.GameFree), diff --git a/worldsrv/platformgamehall.go b/worldsrv/platformgamehall.go deleted file mode 100644 index dd73000..0000000 --- a/worldsrv/platformgamehall.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -import ( - "mongo.games.com/game/proto" - "mongo.games.com/game/protocol/gamehall" - "mongo.games.com/game/protocol/server" -) - -type PlatformGameHall struct { - HallId int32 //游戏厅id - Scenes map[int]*Scene //游戏房间列表 - Players map[int32]*Player //大厅中的玩家 - p *Platform //所属平台 - dbGameFree *server.DB_GameFree //厅配置数据(这里都是模板值,非后台实例数据) - dbGameRule *server.DB_GameRule //游戏配置数据(这里都是模板值,非后台实例数据) -} - -func (pgh *PlatformGameHall) PlayerLeave(p *Player) { - delete(pgh.Players, p.SnId) - if p.hallId == pgh.HallId { - p.hallId = 0 - } -} - -func (p *Player) CreateRoomPlayerInfoProtocol() *gamehall.RoomPlayerInfo { - pack := &gamehall.RoomPlayerInfo{ - SnId: proto.Int32(p.SnId), - Head: proto.Int32(p.Head), - Sex: proto.Int32(p.Sex), - Name: proto.String(p.Name), - Pos: proto.Int(p.pos), - Flag: proto.Int32(p.flag), - HeadOutLine: proto.Int32(p.HeadOutLine), - VIP: proto.Int32(p.VIP), - } - return pack -} - -func (pgh *PlatformGameHall) OnPlayerEnterScene(scene *Scene, player *Player) { - delete(pgh.Players, player.SnId) - pack := &gamehall.SCRoomPlayerEnter{ - RoomId: proto.Int(scene.sceneId), - Player: player.CreateRoomPlayerInfoProtocol(), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERENTER), pack, player.SnId) -} - -func (pgh *PlatformGameHall) OnPlayerLeaveScene(scene *Scene, player *Player) { - pack := &gamehall.SCRoomPlayerLeave{ - RoomId: proto.Int(scene.sceneId), - Pos: proto.Int(player.pos), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERLEAVE), pack, player.SnId) -} - -func (pgh *PlatformGameHall) OnDestroyScene(scene *Scene) { - delete(pgh.Scenes, scene.sceneId) - pack := &gamehall.SCDestroyRoom{ - RoomId: proto.Int(scene.sceneId), - OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, - IsForce: proto.Int(1), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_DESTROYROOM), pack, 0) -} - -func (pgh *PlatformGameHall) Broadcast(packetid int, packet interface{}, exclude int32) { - PlatformMgrSingleton.Broadcast(packetid, packet, pgh.Players, exclude) -} diff --git a/worldsrv/player.go b/worldsrv/player.go index bcc7c3e..752df54 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -2415,23 +2415,6 @@ func (this *Player) GetIP() string { return this.Ip } -func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64, - dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32) (*Scene, hallproto.OpResultCode_Game) { - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("(this *Player) CreateLocalGameScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId) - return nil, hallproto.OpResultCode_Game_OPRC_SceneServerMaintain_Game - } - - s := SceneMgrSingleton.CreateLocalGameScene(this.SnId, sceneId, gameId, gameSite, sceneMode, 1, params, gs, - this.GetPlatform(), playerNum, dbGameFree, baseScore, groupId, dbGameFree.GetId()) - if s == nil { - logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId) - return nil, hallproto.OpResultCode_Game_OPRC_Error_Game - } - return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game -} - func (this *Player) ReturnScene(isLoaded bool) *Scene { logger.Logger.Tracef("(this *Player) ReturnScene %v", this.SnId) if this.scene == nil { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 8412ba9..d4af7f6 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -1,7 +1,6 @@ package main import ( - "math" "math/rand" "strconv" "time" @@ -19,15 +18,10 @@ import ( "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) -const ( - MatchSceneState_Waiting = iota //等待状态 - MatchSceneState_Running //进行状态 - MatchSceneState_Billed //结算状态 -) - const ( // PlayerHistoryModel . PlayerHistoryModel = iota + 1 @@ -45,158 +39,141 @@ type PlayerGameCtx struct { totalConvertibleFlow int64 //进房时玩家身上的总流水 } +// MatchParams 比赛场配置 +type MatchParams struct { + MatchId int64 // 比赛场id +} + +// CustomParams 房卡场配置 +type CustomParams struct { + RoomType *webapiproto.RoomType // 房卡场房间类型id + RoomConfig *webapiproto.RoomConfig // 房卡场房间配置id + RoomCostType int // 房卡收费方式 +} + // Scene 场景(房间) +// todo 结构优化 type Scene struct { - sceneId int //场景id - gameId int //游戏id - gameMode int //游戏模式(玩法) - sceneMode int //房间模式,参考common.SceneMode_XXX - params []int64 //场景参数 - paramsEx []int32 //其他扩展参数 - playerNum int //房间最大人数 - robotNum int //机器人数量 - robotLimit int //最大限制机器人数量 - preInviteRobNum int //准备邀请机器人的数量 - creator int32 //创建者账号id - agentor int32 //代理者id - replayCode string //回放码 - currRound int32 //当前第几轮 - totalRound int32 //总共几轮 - clycleTimes int32 //循环次数 - deleting bool //正在删除 - starting bool //正在开始 - closed bool //房间已关闭 - force bool //强制删除 - hadCost bool //是否已经扣过房卡 - inTeahourse bool //是否在棋牌馆 - players map[int32]*Player //玩家 - audiences map[int32]*Player //观众 - seats [9]*Player //座位 - gameSess *GameSession //所在gameserver - sp ScenePolicy //场景上的一些业务策略 - createTime time.Time //创建时间 - lastTime time.Time //最后活跃时间 - startTime time.Time //开始时间 - dirty bool //脏标记 - applyTimes map[int32]int32 //申请坐下次数 - limitPlatform *Platform //限制平台 - groupId int32 //组id - hallId int32 //厅id - state int32 //场景当前状态 - fishing int32 //渔场的鱼潮状态 - gameCtx map[int32]*PlayerGameCtx //进入房间的环境 - dbGameFree *serverproto.DB_GameFree // - ClubId int32 - clubRoomID string //俱乐部包间ID - clubRoomPos int32 // - clubRoomTax int32 // - createFee int32 //创建房间的费用 - GameLog []int32 //游戏服务器同步的录单 - JackPotFund int64 //游戏服务器同步的奖池 - State int32 //当前游戏状态,后期放到ScenePolicy里去处理 - StateTs int64 //切换到当前状态的时间 - StateSec int32 //押注状态的秒数 - BankerListNum int32 //庄家列表数量 - matchParams []int32 //比赛参数 - matchState int //比赛状态 - quitMatchSnids []int32 //退赛玩家id - gameSite int //tienlen游戏场次区分 1.初级 2.中级 3.高级场 - BaseScore int32 //tienlen游戏底分 - matchId int64 //比赛场id + sceneId int // 场景id + gameId int // 游戏id + gameMode int // 游戏模式(玩法) + sceneMode int // 房间模式,参考common.SceneMode_XXX + params []int64 // 场景参数 + playerNum int // 房间最大人数 + robotNum int // 机器人数量 + robotLimit int // 最大限制机器人数量 + preInviteRobNum int // 准备邀请机器人的数量 + creator int32 // 创建者账号id + replayCode string // 回放码 + currRound int32 // 当前第几轮 + totalRound int32 // 总共几轮,小于等于0表示无限轮 + cycleTimes int32 // 循环次数 + deleting bool // 正在删除 + starting bool // 正在开始 + closed bool // 房间已关闭 + force bool // 强制删除 + players map[int32]*Player // 玩家 + audiences map[int32]*Player // 观众 + seats [9]*Player // 座位 + gameSess *GameSession // 所在gameserver + sp ScenePolicy // 场景上的一些业务策略 + createTime time.Time // 创建时间 + lastTime time.Time // 最后活跃时间 + startTime time.Time // 开始时间 + applyTimes map[int32]int32 // 申请坐下次数 + limitPlatform *Platform // 限制平台 + groupId int32 // 组id + hallId int32 // 厅id + dbGameFree *serverproto.DB_GameFree // 场次配置 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 + SceneState int32 // 房间当前状态 + State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 + StateTs int64 // 切换到当前状态的时间 + StateSec int32 // 押注状态的秒数 + password string // 密码 + channel []string // 渠道,房卡场有渠道限制 + voice int32 // 是否开启语音 1开启 + + matchId int64 // 比赛场id + fishing int32 // 渔场的鱼潮状态 + GameLog []int32 // 游戏服务器同步的录单 + BankerListNum int32 // 庄家列表数量 + matchParams []int32 // 比赛参数 + matchState int // 比赛状态 + + CustomParams // 房卡场参数 csp *CoinScenePool // 所在场景池 hp *HundredSceneMgr // 百人场房间池 } // NewScene 创建房间 -func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycleTimes, numOfGames int32, params []int64, - gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree, paramsEx ...int32) *Scene { +func NewScene(args *CreateSceneParam) *Scene { + gameId := int(args.GF.GetGameId()) + gameMode := int(args.GF.GetGameMode()) + gameFreeId := args.GF.GetId() + sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode) return nil } + s := &Scene{ - sceneId: id, - hallId: dbGameFree.Id, - playerNum: 0, - creator: creator, - agentor: agentor, + sceneId: args.RoomId, + hallId: gameFreeId, + playerNum: int(args.PlayerNum), + creator: args.CreateId, gameId: gameId, gameMode: gameMode, - sceneMode: sceneMode, - params: params, - paramsEx: paramsEx, - clycleTimes: clycleTimes, + sceneMode: args.SceneMode, + params: args.Params, + cycleTimes: int32(args.CycleTimes), players: make(map[int32]*Player), audiences: make(map[int32]*Player), - gameSess: gs, + gameSess: args.GS, sp: sp, createTime: time.Now(), - limitPlatform: limitPlatform, - groupId: groupId, + limitPlatform: args.Platform, + groupId: 0, gameCtx: make(map[int32]*PlayerGameCtx), //进入房间的环境 - dbGameFree: dbGameFree, + dbGameFree: args.GF, currRound: 0, - totalRound: numOfGames, + totalRound: int32(args.TotalRound), + password: args.Password, + voice: args.Voice, + channel: args.Channel, + BaseScore: args.BaseScore, + CustomParams: CustomParams{ + RoomType: args.RoomType, + RoomConfig: args.RoomConfig, + RoomCostType: args.RoomCostType, + }, + } + // 最大房间人数 + if s.playerNum <= 0 { + s.playerNum = sp.GetPlayerNum() + } + // 底分 + if s.BaseScore <= 0 { + s.BaseScore = int32(sp.GetBaseScore()) + } + if s.BaseScore <= 0 { + s.BaseScore = s.dbGameFree.GetBaseScore() + } + if s.cycleTimes <= 0 { + s.cycleTimes = 1 + } + if s.totalRound <= 0 { + s.totalRound = 1 } - // 从房间配置参数获取,最大房间人数 - s.playerNum = int(sp.GetPlayerNum(s)) s.lastTime = s.createTime + s.replayCode = SceneMgrSingleton.AllocReplayCode() - if s.IsCoinScene() { - code := SceneMgrSingleton.AllocReplayCode() - s.replayCode = code - } if s.dbGameFree.GetMatchMode() == 0 { s.RandRobotCnt() } - if s.IsMatchScene() { - s.BaseScore = 10 - } - s.sp.OnStart(s) - return s -} - -func NewLocalGameScene(creator int32, sceneId, gameId, gameSite, sceneMode int, clycleTimes int32, params []int64, - gs *GameSession, limitPlatform *Platform, playerNum int, dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32, paramsEx ...int32) *Scene { - sp := GetScenePolicy(gameId, 0) - if sp == nil { - logger.Logger.Errorf("NewLocalGameScene sp == nil, gameId=%v ", gameId) - return nil - } - s := &Scene{ - sceneId: sceneId, - hallId: dbGameFree.Id, - playerNum: playerNum, - creator: creator, - gameId: gameId, - sceneMode: sceneMode, - params: params, - paramsEx: paramsEx, - clycleTimes: clycleTimes, - players: make(map[int32]*Player), - audiences: make(map[int32]*Player), - gameSess: gs, - sp: sp, - createTime: time.Now(), - limitPlatform: limitPlatform, - groupId: groupId, - gameCtx: make(map[int32]*PlayerGameCtx), //进入房间的环境 - dbGameFree: dbGameFree, - gameSite: gameSite, - BaseScore: baseScore, - } - if s.playerNum <= 0 { - s.playerNum = int(sp.GetPlayerNum(s)) - } - if s.BaseScore <= 0 { - s.BaseScore = int32(sp.GetBaseCoin(s)) - } - s.lastTime = s.createTime - - code := SceneMgrSingleton.AllocReplayCode() - s.replayCode = code s.sp.OnStart(s) return s } @@ -205,9 +182,6 @@ func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { if this.creator == oldSnId { this.creator = newSnId } - if this.agentor == oldSnId { - this.agentor = newSnId - } if p, exist := this.players[oldSnId]; exist { delete(this.players, oldSnId) this.players[newSnId] = p @@ -234,18 +208,16 @@ func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { return nil } +// PlayerEnter 玩家进入场景 +// todo 优化 func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos) - if p.IsRob { - if this.robotLimit != 0 { - if !model.GameParamData.IsRobFightTest { - //增加所有机器人对战场的 - if this.robotNum+1 > this.robotLimit { - logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v) robot num limit(%v)", this.sceneId, p.SnId, this.robotLimit) - return false - } - } + // 机器人数量限制 + if p.IsRobot() && this.robotLimit != 0 { + if this.robotNum+1 > this.robotLimit { + logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v) robot num limit(%v)", this.sceneId, p.SnId, this.robotLimit) + return false } } @@ -275,10 +247,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } - p.scene = this - this.players[p.SnId] = p - this.gameSess.AddPlayer(p) - // 如果正在等待比赛,退赛 if !this.IsMatchScene() { isWaiting, tmid := TournamentMgr.IsMatchWaiting(p.Platform, p.SnId) @@ -287,10 +255,14 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } + p.scene = this + this.players[p.SnId] = p + this.gameSess.AddPlayer(p) + takeCoin := p.Coin leaveCoin := int64(0) gameTimes := rand.Int31n(100) - matchParams := []int32{} //排名、段位、假snid、假角色、假皮肤 + var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 if this.IsMatchScene() && p.matchCtx != nil { takeCoin = int64(p.matchCtx.grade) @@ -303,144 +275,106 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { matchParams = append(matchParams, p.matchCtx.copySnid) //假snid matchParams = append(matchParams, p.matchCtx.copyRoleId) //假RoleId matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId - } else { - if p.IsRob { - if len(this.paramsEx) > 0 { //机器人携带金币动态调整 - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) - if gps != nil { - dbGameFree := gps.DbGameFree - if gps.GroupId != 0 { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - dbGameFree = pgg.DbGameFree + } + + if this.IsCustom() { + takeCoin = 1000 + } + + if p.IsRob && !this.IsMatchScene() && !this.IsCustom() { + if this.dbGameFree != nil { //机器人携带金币动态调整 + gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.dbGameFree.GetId()) + if gps != nil { + dbGameFree := gps.DbGameFree + flag := false + if common.IsLocalGame(this.gameId) { + baseScore := this.BaseScore + arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr + tmpIds := []int32{} + for i := 0; i < len(arrs); i++ { + arr := arrs[i] + if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { + betRange := arr.GetBetRange() + if len(betRange) == 0 { + continue + } + for j := 0; j < len(betRange); j++ { + if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { + tmpIds = append(tmpIds, arr.GetId()) + break + } + } } } - - flag := false - if common.IsLocalGame(this.gameId) { - baseScore := this.BaseScore - arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr - tmpIds := []int32{} - for i := 0; i < len(arrs); i++ { - arr := arrs[i] - if int(arr.GameId) == this.gameId && int(arr.GameSite) == this.gameSite { - betRange := arr.GetBetRange() - if len(betRange) == 0 { - continue - } - for j := 0; j < len(betRange); j++ { - if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { - tmpIds = append(tmpIds, arr.GetId()) - break - } + if len(tmpIds) > 0 { + randId := common.RandInt32Slice(tmpIds) + crData := srvdata.PBDB_CreateroomMgr.GetData(randId) + if crData != nil { + goldRange := crData.GetGoldRange() + if len(goldRange) == 2 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) + flag = true + } else if len(goldRange) == 1 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) + flag = true + } + leaveCoin = int64(goldRange[0]) + for _, id := range tmpIds { + tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() + if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { + leaveCoin = int64(tmp[0]) } } } - if len(tmpIds) > 0 { - randId := common.RandInt32Slice(tmpIds) - crData := srvdata.PBDB_CreateroomMgr.GetData(randId) - if crData != nil { - goldRange := crData.GetGoldRange() - if len(goldRange) == 2 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) - flag = true - } else if len(goldRange) == 1 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) - flag = true - } - leaveCoin = int64(goldRange[0]) - for _, id := range tmpIds { - tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() - if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { - leaveCoin = int64(tmp[0]) - } - } - } - } else { - logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.gameSite, " baseScore: ", baseScore) - } - if leaveCoin > takeCoin { - logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) - } - if takeCoin > p.Coin { - p.Coin = takeCoin - } + } else { + logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " baseScore: ", baseScore) } - //if !flag && this.IsCoinScene() && !this.IsTestScene() { - // if expectEnterCoin, expectLeaveCoin, ExpectGameTime, ok := RobotCarryMgrEx.RandOneCarry(dbGameFree.GetId()); ok && expectEnterCoin > dbGameFree.GetLimitCoin() && expectEnterCoin < dbGameFree.GetMaxCoinLimit() { - // takeCoin = int64(expectEnterCoin) - // leaveCoin = int64(expectLeaveCoin) - // //如果带入金币和离开金币比较接近,就调整离开金币值 - // var delta = takeCoin - leaveCoin - // if math.Abs(float64(delta)) < float64(takeCoin/50) { - // if leaveCoin = takeCoin + delta*(10+rand.Int63n(50)); leaveCoin < 0 { - // leaveCoin = 0 - // } - // } - // gameTimes = ExpectGameTime * 2 - // flag = true - // } - //} - - if !flag { - takerng := dbGameFree.GetRobotTakeCoin() - if len(takerng) >= 2 && takerng[1] > takerng[0] { - if takerng[0] < dbGameFree.GetLimitCoin() { - takerng[0] = dbGameFree.GetLimitCoin() - } - takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) - } else { - maxlimit := int64(dbGameFree.GetMaxCoinLimit()) - if maxlimit != 0 && p.Coin > maxlimit { - logger.Logger.Trace("Player coin:", p.Coin) - //在下限和上限之间随机,并对其的100的整数倍 - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - if maxlimit == 0 && this.IsCoinScene() { - maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - } - takeCoin = takeCoin / 100 * 100 - //离场金币 - leaverng := dbGameFree.GetRobotLimitCoin() - if len(leaverng) >= 2 { - leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) - } - } - - // 象棋积分 - chessScore := dbGameFree.GetChessScoreParams() - if len(chessScore) == 2 { - p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) - } - - bankerLimit := this.dbGameFree.GetBanker() - if bankerLimit != 0 { - //上庄AI携带 - if /*this.gameId == common.GameId_HundredBull ||*/ - this.gameId == common.GameId_RollCoin || - this.gameId == common.GameId_RollAnimals || - this.gameId == common.GameId_DragonVsTiger || - this.gameId == common.GameId_Baccarat { - if this.BankerListNum < 3 { - if rand.Intn(100) < 5 { - randCoin := int64(math.Floor(float64(bankerLimit) * 1 / float64(this.dbGameFree.GetSceneType()))) - takeCoin = rand.Int63n(randCoin) + int64(bankerLimit) - if takeCoin > p.Coin { - //加钱速度慢 暂时不用 - //ExePMCmd(p.gateSess, fmt.Sprintf("%v%v%v", common.PMCmd_AddCoin, common.PMCmd_SplitToken, takeCoin)) - } - } - } - } + if leaveCoin > takeCoin { + logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) } if takeCoin > p.Coin { p.Coin = takeCoin } } + + if !flag { + takerng := dbGameFree.GetRobotTakeCoin() + if len(takerng) >= 2 && takerng[1] > takerng[0] { + if takerng[0] < dbGameFree.GetLimitCoin() { + takerng[0] = dbGameFree.GetLimitCoin() + } + takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) + } else { + maxlimit := int64(dbGameFree.GetMaxCoinLimit()) + if maxlimit != 0 && p.Coin > maxlimit { + logger.Logger.Trace("Player coin:", p.Coin) + //在下限和上限之间随机,并对其的100的整数倍 + takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + if maxlimit == 0 && this.IsCoinScene() { + maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) + takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + } + takeCoin = takeCoin / 100 * 100 + //离场金币 + leaverng := dbGameFree.GetRobotLimitCoin() + if len(leaverng) >= 2 { + leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) + } + } + + // 象棋积分 + chessScore := dbGameFree.GetChessScoreParams() + if len(chessScore) == 2 { + p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) + } + + if takeCoin > p.Coin { + p.Coin = takeCoin + } } } } @@ -464,13 +398,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { gateSid = sessionId.Get() } } - isQuMin := false - //if !p.IsRob { - // pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) - // if pt != nil && pt.SpreadTag == 1 { - // isQuMin = true - // } - //} msg := &serverproto.WGPlayerEnter{ Sid: proto.Int64(p.sid), SnId: proto.Int32(p.SnId), @@ -478,17 +405,9 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { SceneId: proto.Int(this.sceneId), PlayerData: data, IsLoaded: proto.Bool(ischangeroom), - IsQM: proto.Bool(isQuMin), IParams: p.MarshalIParam(), SParams: p.MarshalSParam(), CParams: p.MarshalCParam(), - } - //sa, err2 := p.MarshalSingleAdjustData(this.dbGameFree.Id) - //if err2 == nil && sa != nil { - // msg.SingleAdjust = sa - //} - if this.ClubId != 0 { - } p.takeCoin = takeCoin p.sceneCoin = takeCoin @@ -880,6 +799,14 @@ func (this *Scene) IsPrivateScene() bool { return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private } +// IsCustom 房卡场房间 +func (this *Scene) IsCustom() bool { + if this.dbGameFree == nil { + return false + } + return this.dbGameFree.IsCustom > 0 +} + // IsSceneMode 房间模式 func (this *Scene) IsSceneMode(mode int) bool { return this.sceneMode == mode @@ -898,12 +825,6 @@ func (this *Scene) IsTestScene() bool { if this.dbGameFree != nil { return this.dbGameFree.GetSceneType() == -1 } - if len(this.paramsEx) > 0 { - dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0]) - if dbGameFree != nil { - return dbGameFree.GetSceneType() == -1 - } - } return false } @@ -911,12 +832,6 @@ func (this *Scene) GetSceneName() string { if this.dbGameFree != nil { return this.dbGameFree.GetName() + this.dbGameFree.GetTitle() } - if len(this.paramsEx) > 0 { - dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0]) - if dbGameFree != nil { - return dbGameFree.GetName() + dbGameFree.GetTitle() - } - } return "[unknow scene name]" } @@ -935,30 +850,6 @@ func (this *Scene) RandRobotCnt() { } return } - - if len(this.paramsEx) > 0 { - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) - if gps != nil { - dbGameFree := gps.DbGameFree - if gps.GroupId != 0 { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - dbGameFree = pgg.DbGameFree - } - } - numrng := dbGameFree.GetRobotNumRng() - if len(numrng) >= 2 { - if numrng[1] == numrng[0] { - this.robotLimit = int(numrng[0]) - } else { - if numrng[1] < numrng[0] { - numrng[1], numrng[0] = numrng[0], numrng[1] - } - this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1) - } - } - } - } } func (this *Scene) IsPlatform(platform string) bool { @@ -1075,21 +966,6 @@ func (this *Scene) IsPreCreateScene() bool { return this.dbGameFree.GetCreateRoomNum() > 0 } -func (this *Scene) GetParamEx(idx int) int32 { - if idx < 0 || idx > len(this.paramsEx) { - return -1 - } - - return this.paramsEx[idx] -} - -func (this *Scene) SetParamEx(idx int, val int32) { - cnt := len(this.paramsEx) - if idx >= 0 && idx < cnt { - this.paramsEx[idx] = val - } -} - func (this *Scene) TryForceDeleteMatchInfo() { if !this.IsMatchScene() { return diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index f86165e..2453f51 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -2,7 +2,9 @@ package main import ( "math" + "slices" "sort" + "strconv" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/srvlib" @@ -24,6 +26,7 @@ var SceneMgrSingleton = &SceneMgr{ matchAutoId: common.MatchSceneStartId, coinSceneAutoId: common.CoinSceneStartId, hundredSceneAutoId: common.HundredSceneStartId, + password: make(map[string]struct{}), } // SceneMgr 房间管理器 @@ -31,10 +34,11 @@ type SceneMgr struct { BaseClockSinker // 驱动时间事件 scenes map[int]*Scene // 房间id: Scene - privateAutoId int // 私人房房间号 - matchAutoId int // 比赛场房间号 - coinSceneAutoId int // 金币场房间号 - hundredSceneAutoId int // 百人场房间号 + privateAutoId int // 私人房房间号 + matchAutoId int // 比赛场房间号 + coinSceneAutoId int // 金币场房间号 + hundredSceneAutoId int // 百人场房间号 + password map[string]struct{} // 密码 } // AllocReplayCode 获取回访码 @@ -79,6 +83,29 @@ func (m *SceneMgr) GenOneMatchSceneId() int { return m.matchAutoId } +func (m *SceneMgr) GenPassword() string { + for i := 0; i < 100; i++ { + s := strconv.Itoa(common.RandInt(10000, 100000)) + if _, ok := m.password[s]; !ok { + m.password[s] = struct{}{} + return s + } + } + return "" +} + +func (m *SceneMgr) GenPasswordInt32() int32 { + for i := 0; i < 100; i++ { + s := strconv.Itoa(common.RandInt(10000, 100000)) + if _, ok := m.password[s]; !ok { + m.password[s] = struct{}{} + n, _ := strconv.Atoi(s) + return int32(n) + } + } + return 0 +} + func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { s := m.GetScene(sceneId) if s != nil && s.limitPlatform != nil { @@ -145,7 +172,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes)) var isNeedFindAll = false if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 && - gameMode == 0 && sceneId == -1 && groupId == 0 && clubId == 0 && sceneMode == 0 { + gameMode == 0 && sceneId == -1 && groupId == 0 && sceneMode == 0 { p := PlayerMgrSington.GetPlayerBySnId(snId) if p != nil && p.Platform == platform { isNeedFindAll = true @@ -155,7 +182,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode if (((s.limitPlatform != nil && s.limitPlatform.IdStr == platform) || platform == "") && ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && - (s.ClubId == int32(clubId) || clubId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && + (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll { var platformName string if s.limitPlatform != nil { @@ -170,19 +197,13 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode SceneMode: int32(s.sceneMode), GroupId: s.groupId, Creator: s.creator, - Agentor: s.agentor, ReplayCode: s.replayCode, Params: common.CopySliceInt64ToInt32(s.params), PlayerCnt: int32(len(s.players) - s.robotNum), RobotCnt: int32(s.robotNum), CreateTime: s.createTime.Unix(), BaseScore: s.dbGameFree.BaseScore, - } - if common.IsLocalGame(s.gameId) { - si.BaseScore = s.BaseScore - } - if s.paramsEx != nil && len(s.paramsEx) > 0 { - si.GameFreeId = s.paramsEx[0] + GameFreeId: s.dbGameFree.GetId(), } if s.starting { si.Start = 1 @@ -264,54 +285,138 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode return nil, 0, int32(roomSum) } -// CreateScene 创建房间 -func (m *SceneMgr) CreateScene(agentor, creator int32, sceneId, gameId, gameMode, sceneMode int, clycleTimes int32, - numOfGames int32, params []int64, gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree, - paramsEx ...int32) *Scene { - logger.Logger.Trace("(this *SceneMgr) CreateScene ") - // 创建房间 - s := NewScene(agentor, creator, sceneId, gameId, gameMode, sceneMode, clycleTimes, numOfGames, params, gs, limitPlatform, groupId, - dbGameFree, paramsEx...) - if s == nil { - return nil - } - m.scenes[sceneId] = s - - // 创建水池 - if !s.IsMatchScene() && dbGameFree != nil && limitPlatform != nil { - //平台水池设置 - gs.DetectCoinPoolSetting(limitPlatform.IdStr, dbGameFree.GetId(), s.groupId) - } - - // 添加到游戏服记录中 - gs.AddScene(s) - var platformName string - if limitPlatform != nil { - platformName = limitPlatform.IdStr - } - logger.Logger.Infof("(this *SceneMgr) CreateScene (gameId=%v, mode=%v), SceneId=%v groupid=%v platform=%v", - gameId, gameMode, sceneId, groupId, platformName) - return s +type FindRoomParam struct { + Platform string + GameId []int + GameMode []int + SceneMode []int + RoomId int32 + IsCustom int32 // 房卡场 + IsFree int32 // 自由桌 + GameFreeId []int32 // 场次id + SnId int32 // 玩家id + IsMatch bool // 比赛场 + IsRankMatch bool // 排位赛 + Channel []string // 渠道 } -// CreateLocalGameScene 创建本地游戏房间 -func (m *SceneMgr) CreateLocalGameScene(creator int32, sceneId, gameId, gameSite, sceneMode int, clycleTimes int32, params []int64, - gs *GameSession, limitPlatform *Platform, playerNum int, dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32, - paramsEx ...int32) *Scene { - logger.Logger.Trace("(this *SceneMgr) CreateLocalGameScene gameSite: ", gameSite, " sceneMode: ", sceneMode) - s := NewLocalGameScene(creator, sceneId, gameId, gameSite, sceneMode, clycleTimes, params, gs, limitPlatform, playerNum, dbGameFree, - baseScore, groupId, paramsEx...) +func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { + ret := make([]*Scene, 0) + for _, v := range m.scenes { + if args.Platform != "" && v.limitPlatform.IdStr != args.Platform { + continue + } + if len(args.GameId) > 0 { + if !slices.Contains(args.GameId, int(v.dbGameFree.GetGameId())) { + continue + } + } + if len(args.GameMode) > 0 { + if !slices.Contains(args.GameMode, int(v.dbGameFree.GetGameMode())) { + continue + } + } + if len(args.SceneMode) > 0 { + if !slices.Contains(args.SceneMode, v.sceneMode) { + continue + } + } + if args.RoomId > 0 && v.sceneId != int(args.RoomId) { + continue + } + if args.IsCustom == 1 && v.dbGameFree.GetIsCustom() != args.IsCustom { + continue + } + if args.IsFree == 1 && v.dbGameFree.GetFreeMode() != args.IsFree { + continue + } + if len(args.GameFreeId) > 0 { + if !slices.Contains(args.GameFreeId, v.dbGameFree.GetId()) { + continue + } + } + if args.SnId > 0 && v.GetPlayer(args.SnId) == nil { + continue + } + if args.IsMatch && !v.IsMatchScene() { + continue + } + if args.IsRankMatch && !v.IsRankMatch() { + continue + } + if len(args.Channel) > 0 { + has := false + for _, vv := range args.Channel { + if slices.Contains(v.channel, vv) { + has = true + break + } + } + if !has { + continue + } + } + + if v.deleting || v.closed || v.force { + continue + } + + ret = append(ret, v) + } + return ret +} + +type CreateSceneParam struct { + CreateId int32 // 创建者id + RoomId int // 房间id + SceneMode int // 公共,私人,赛事 + CycleTimes int // 循环次数 + TotalRound int // 总轮数 + Params []int64 // 房间参数 + GS *GameSession + Platform *Platform + GF *serverproto.DB_GameFree + PlayerNum int32 // 玩家最大数量 + Password string + Voice int32 // 1开启 + Channel []string + RoomType *webapiproto.RoomType + RoomConfig *webapiproto.RoomConfig + BaseScore int32 + RoomCostType int +} + +// CreateScene 创建房间 +func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { + logger.Logger.Tracef("SceneMgr NewScene %v", args) + if args.GF == nil { + return nil + } + if args.Platform == nil { + return nil + } + if args.GS == nil { + args.GS = GameSessMgrSington.GetMinLoadSess(int(args.GF.GetGameId())) + } + if args.GS == nil { + return nil + } + + // 创建房间 + s := NewScene(args) if s == nil { return nil } - m.scenes[sceneId] = s + m.scenes[args.RoomId] = s + // 添加到游戏服记录中 + args.GS.AddScene(s) + logger.Logger.Infof("SceneMgr NewScene Platform:%v %+v", args.Platform.IdStr, args) - gs.AddScene(s) - var platformName string - if limitPlatform != nil { - platformName = limitPlatform.IdStr + // 创建水池 + if !s.IsMatchScene() && s.dbGameFree != nil && s.limitPlatform != nil { + //平台水池设置 + args.GS.DetectCoinPoolSetting(s.limitPlatform.IdStr, s.dbGameFree.GetId(), s.groupId) } - logger.Logger.Infof("(this *SceneMgr) CreateScene (gameId=%v), SceneId=%v platform=%v", gameId, sceneId, platformName) return s } @@ -338,6 +443,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { s.gameSess.DelScene(s) s.OnClose() delete(m.scenes, s.sceneId) + delete(m.password, s.password) logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } diff --git a/worldsrv/scenepolicy.go b/worldsrv/scenepolicy.go index b475651..38d7630 100644 --- a/worldsrv/scenepolicy.go +++ b/worldsrv/scenepolicy.go @@ -1,50 +1,45 @@ package main -import "mongo.games.com/goserver/core/logger" +import "mongo.games.com/game/protocol/webapi" -// 根据不同的房间模式,选择不同的房间业务策略 -var ScenePolicyPool map[int]map[int]ScenePolicy = make(map[int]map[int]ScenePolicy) +// ScenePolicyPool 根据不同的房间模式,选择不同的房间业务策略 +var ScenePolicyPool = make(map[int]map[int]ScenePolicy) type ScenePolicy interface { - //场景开启事件 + // OnStart 场景开启事件 OnStart(s *Scene) - //场景关闭事件 + // OnStop 场景关闭事件 OnStop(s *Scene) - //场景心跳事件 + // OnTick 场景心跳事件 OnTick(s *Scene) - //玩家进入事件 + // OnPlayerEnter 玩家进入事件 OnPlayerEnter(s *Scene, p *Player) - //玩家离开事件 + // OnPlayerLeave 玩家离开事件 OnPlayerLeave(s *Scene, p *Player) - //系统维护关闭事件 + // OnShutdown 系统维护关闭事件 OnShutdown(s *Scene) - //获得场景的匹配因子(值越大越优先选择) - GetFitFactor(s *Scene, p *Player) int - //能否创建 - CanCreate(s *Scene, p *Player, mode, sceneType int, params []int32, isAgent bool) (bool, []int32) - //能否进入 + // OnSceneState 房间状态变更 + OnSceneState(s *Scene, state int) + // OnGameState 游戏状态变更 + OnGameState(s *Scene, state int) + + // CanEnter 能否进入 CanEnter(s *Scene, p *Player) int - //房间座位是否已满 - IsFull(s *Scene, p *Player, num int32) bool - //是否可以强制开始 - IsCanForceStart(s *Scene) bool - //结算房卡 - BilledRoomCard(s *Scene, snid []int32) - //需要几张房卡 - GetNeedRoomCardCnt(s *Scene) int32 - //房费模式 - GetRoomFeeMode(s *Scene) int32 - //游戏人数 - GetPlayerNum(s *Scene) int32 - //游戏底分 - GetBaseCoin(s *Scene) int - //游戏总局数 - GetTotalOfGames(s *Scene) int32 - // - GetNeedRoomCardCntDependentPlayerCnt(s *Scene) int32 - // + // GetBetState 获取下注状态 GetBetState() int32 - GetViewLogLen() int32 + // GetPlayerNum 获取玩家数量 + GetPlayerNum() int + // GetBaseScore 获取底分 + GetBaseScore() int + + // CostEnough 房费是否足够 + // costType 付费方式 + // playerNum 玩家数量 + // roomConfig 房间配置 + CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool + + // CostPayment 房费支付 + CostPayment(s *Scene, p *Player) bool } func GetScenePolicy(gameId, mode int) ScenePolicy { @@ -56,7 +51,7 @@ func GetScenePolicy(gameId, mode int) ScenePolicy { return nil } -func RegisteScenePolicy(gameId, mode int, sp ScenePolicy) { +func RegisterScenePolicy(gameId, mode int, sp ScenePolicy) { pool := ScenePolicyPool[gameId] if pool == nil { pool = make(map[int]ScenePolicy) @@ -66,21 +61,3 @@ func RegisteScenePolicy(gameId, mode int, sp ScenePolicy) { pool[mode] = sp } } - -func CheckGameConfigVer(ver int32, gameid int32, modeid int32) bool { - v := GetGameConfigVer(gameid, modeid) - logger.Logger.Info("Old game config ver:", v) - return ver == v -} - -func GetGameConfigVer(gameid int32, modeid int32) int32 { - sp := GetScenePolicy(int(gameid), int(modeid)) - if sp == nil { - return 0 - } - spd, ok := sp.(*ScenePolicyData) - if !ok { - return 0 - } - return spd.ConfigVer -} diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 2b03d6f..04d0275 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -1,158 +1,27 @@ package main import ( - "time" - + "math" "mongo.games.com/game/common" - hall_proto "mongo.games.com/game/protocol/gamehall" - "mongo.games.com/goserver/core/logger" + hallproto "mongo.games.com/game/protocol/gamehall" + "mongo.games.com/game/protocol/webapi" ) -const ( - SPDPCustomIndex_GamesOfCard int = iota //局数选项 - SPDPCustomIndex_PlayerNum //人数选项 - SPDPCustomIndex_RoomFeeMode //房费模式选项 - SPDPCustomIndex_LimitOption //新手限制选项 - SPDPCustomIndex_DoorOption //中途不可进选项 - SPDPCustomIndex_SameIPForbid //同IP不可进 - SPDPCustomIndex_BaseCoin //房间底分 -) - -// 创建房间选项 -const ( - CreateRoomParam_NumOfGames int = iota //局数选项 - CreateRoomParam_DoorOption //中途允许加入选项 - CreateRoomParam_SameIPForbid //同IP不可进 - CreateRoomParam_Max -) - -type ScenePolicyDataParam struct { - Name string - AliasName string - Desc string - Min int32 - Max int32 - Default int32 - Value []int32 - Value2 []int32 - CustomIndex int32 - index int -} - type ScenePolicyData struct { - GameName string - GameId int32 - GameMode []int32 - CanForceStart bool - MinPlayerCnt int32 - DefaultPlayerCnt int32 - MaxIndex int32 - TimeFreeStart int32 - TimeFreeEnd int32 - DependentPlayerCnt bool - EnterAfterStart bool - ConfigVer int32 - PerGameTakeCard int32 - ViewLogCnt int32 - BetState int32 - Params []ScenePolicyDataParam - nameMap map[string]*ScenePolicyDataParam - aliasNameMap map[string]*ScenePolicyDataParam - customIndexParams []*ScenePolicyDataParam + GameName string + GameId int32 + GameMode []int32 + DefaultPlayerCnt int32 + EnterAfterStart bool + BetState int32 + BaseScore int } func (spd *ScenePolicyData) Init() bool { - spd.nameMap = make(map[string]*ScenePolicyDataParam) - spd.aliasNameMap = make(map[string]*ScenePolicyDataParam) - if spd.MaxIndex > 0 { - spd.customIndexParams = make([]*ScenePolicyDataParam, spd.MaxIndex) - } - for i := 0; i < len(spd.Params); i++ { - spd.nameMap[spd.Params[i].Name] = &spd.Params[i] - spd.Params[i].index = i - spd.aliasNameMap[spd.Params[i].AliasName] = &spd.Params[i] - if spd.Params[i].CustomIndex >= 0 && spd.MaxIndex > 0 { - spd.customIndexParams[spd.Params[i].CustomIndex] = &spd.Params[i] - } - } return true } -func (spd *ScenePolicyData) GetParam(idx int) *ScenePolicyDataParam { - if idx >= 0 && idx < len(spd.Params) { - return &spd.Params[idx] - } - return nil -} - -func (spd *ScenePolicyData) GetParamByIndex(idx int) *ScenePolicyDataParam { - if idx >= 0 && idx < len(spd.customIndexParams) { - return spd.customIndexParams[idx] - } - return nil -} - -func (spd *ScenePolicyData) GetParamByName(name string) *ScenePolicyDataParam { - if spdp, exist := spd.nameMap[name]; exist { - return spdp - } - return nil -} - -func (spd *ScenePolicyData) GetParamByAliasName(name string) *ScenePolicyDataParam { - if spdp, exist := spd.aliasNameMap[name]; exist { - return spdp - } - return nil -} - -func (spd *ScenePolicyData) IsTimeFree(mode int) bool { - //是否限时免费 - ts := int32(time.Now().Unix()) - if ts >= spd.TimeFreeStart && ts < spd.TimeFreeEnd { - return true - } - return false -} - -func (spd *ScenePolicyData) IsEnoughRoomCardCnt(s *Scene, p *Player, roomFeeParam, needCardCnt, playerNum int32, isAgent bool) bool { - return true -} - -func (spd *ScenePolicyData) CostRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32, snid []int32) { -} - -func (spd *ScenePolicyData) UpRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32) { -} - -//ScenePolicy interface - -// 能否进入 -func (spd *ScenePolicyData) CanCreate(s *Scene, p *Player, mode, sceneType int, params []int32, isAgent bool) (bool, []int32) { - //参数容错处理 - if len(params) < len(spd.Params) { - logger.Logger.Infof("ScenePolicyData.CanCreate param count not enough, need:%v get:%v", len(spd.Params), len(params)) - for i := len(params); i < len(spd.Params); i++ { - params = append(params, spd.Params[i].Default) - } - } - - //确保参数正确 - for i := 0; i < len(params); i++ { - if params[i] < spd.Params[i].Min || params[i] > spd.Params[i].Max { - params[i] = spd.Params[i].Default - } - } - - return true, params -} - -func (spd *ScenePolicyData) OnStart(s *Scene) { - -} - -func (spd *ScenePolicyData) ReturnRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32) { -} +func (spd *ScenePolicyData) OnStart(s *Scene) {} // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { @@ -178,162 +47,100 @@ func (spd *ScenePolicyData) OnShutdown(s *Scene) { } -// 获得场景的匹配因子(值越大越优先选择) -func (spd *ScenePolicyData) GetFitFactor(s *Scene, p *Player) int { - return len(s.players) -} +func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { + s.SceneState = int32(state) + switch state { + case common.SceneStateWaite: + + case common.SceneStateStart: + if s.IsCustom() { + for _, v := range s.players { + spd.CostPayment(s, v) + } + } + + case common.SceneStateEnd: -// 是否满座了 -func (spd *ScenePolicyData) IsFull(s *Scene, p *Player, num int32) bool { - if s.HasPlayer(p) { - return false } - return s.GetPlayerCnt() >= int(num) } -// 是否可以强制开始 -func (spd *ScenePolicyData) IsCanForceStart(s *Scene) bool { - return spd.CanForceStart && s.GetPlayerCnt() >= int(spd.MinPlayerCnt) -} +func (spd *ScenePolicyData) OnGameState(s *Scene, state int) { -// 结算房卡 -func (spd *ScenePolicyData) BilledRoomCard(s *Scene, snid []int32) { - //spd.CostRoomCard(s, spd.GetRoomFeeMode(s), spd.GetNeedRoomCardCnt(s), int32(len(s.players)), snid) -} - -func (spd *ScenePolicyData) getNeedRoomCardCnt(params []int32) int32 { - return 0 -} - -// 需求房卡数量 -func (spd *ScenePolicyData) GetNeedRoomCardCnt(s *Scene) int32 { - return 0 -} - -//func (spd *ScenePolicyData) getRoomFeeMode(params []int32) int32 { -// //if len(params) > 0 { -// // param := spd.GetParamByIndex(SPDPCustomIndex_RoomFeeMode) -// // if param != nil && param.index >= 0 && param.index < len(params) { -// // return params[param.index] -// // } -// //} -// return common.RoomFee_Owner -//} - -// 收费方式(AA|房主付费) -func (spd *ScenePolicyData) GetRoomFeeMode(s *Scene) int32 { - //if s != nil { - // return spd.getRoomFeeMode(s.params) - //} - return 0 -} - -func (spd *ScenePolicyData) GetNeedRoomCardCntDependentPlayerCnt(s *Scene) int32 { - return 0 } // 能否进入 func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { - param := spd.GetParamByIndex(SPDPCustomIndex_SameIPForbid) - if param != nil && len(s.params) <= param.index { - logger.Logger.Errorf("game param len too long %v", s.gameId) - } - - if param != nil && len(s.params) > param.index && s.params[param.index] != 0 { - ip := p.GetIP() - for i := 0; i < s.playerNum; i++ { - pp := s.seats[i] - if pp != nil && pp.GetIP() == ip { - return int(hall_proto.OpResultCode_Game_OPRC_SameIpForbid_Game) - } - } - } - if !spd.EnterAfterStart { if s.starting { - return int(hall_proto.OpResultCode_Game_OPRC_GameStarting_Game) - } - } - - if spd.EnterAfterStart { - if s.starting { - param := spd.GetParamByIndex(SPDPCustomIndex_DoorOption) - if param != nil && s.params[param.index] != 0 { - return int(hall_proto.OpResultCode_Game_OPRC_GameStarting_Game) - //} else { - // return int(hall_proto.OpResultCode_OPRC_SceneEnterForWatcher) - } + return int(hallproto.OpResultCode_Game_OPRC_GameStarting_Game) } } return 0 } -// 人数 -func (spd *ScenePolicyData) getPlayerNum(params []int32) int32 { - if len(params) > 0 { - param := spd.GetParamByIndex(SPDPCustomIndex_PlayerNum) - if param != nil { - idx := int(params[param.index]) - if idx >= 0 && idx < len(param.Value) { - val := param.Value[idx] - return val +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*Item)) bool { + isEnough := true + var items []*Item + if costType == 1 { + // 房主 + for _, v := range roomConfig.GetCost() { + if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { + isEnough = false + break + } else { + items = append(items, &Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) + } + } + } else { + // AA + for _, v := range roomConfig.GetCost() { + n := int64(math.Ceil(float64(v.GetItemNum()) / float64(playerNum))) + if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < n { + isEnough = false + break + } else { + items = append(items, &Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) } } } - return spd.DefaultPlayerCnt -} - -func (spd *ScenePolicyData) GetPlayerNum(s *Scene) int32 { - if s != nil { - return spd.getPlayerNum(common.CopySliceInt64ToInt32(s.params)) + if isEnough { + f(items) } - return spd.DefaultPlayerCnt + return isEnough } -func (spd *ScenePolicyData) getBaseCoin(params []int32) int { - if len(params) > 0 { - param := spd.GetParamByIndex(SPDPCustomIndex_BaseCoin) - if param != nil { - idx := int(params[param.index]) - if idx >= 0 && idx < len(param.Value) { - val := param.Value[idx] - return int(val) - } - } - } - return 0 +func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { + return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*Item) {}) } -func (spd *ScenePolicyData) GetBaseCoin(s *Scene) int { - if s != nil { - return spd.getBaseCoin(common.CopySliceInt64ToInt32(s.params)) - } - return 0 -} - -// 局数 -func (spd *ScenePolicyData) GetTotalOfGames(s *Scene) int32 { - //if len(s.params) > 0 { - // param := spd.GetParamByIndex(SPDPCustomIndex_GamesOfCard) - // if param != nil { - // cardCostIdx := int(s.params[param.index]) - // if cardCostIdx >= 0 && cardCostIdx < len(param.Value) { - // costCardNum := param.Value[cardCostIdx] - // return costCardNum - // } else if int32(cardCostIdx) >= common.CUSTOM_PER_GAME_INDEX_BEG { //自定义局数 - // totalOfGames := int32(cardCostIdx) - common.CUSTOM_PER_GAME_INDEX_BEG + 1 - // return totalOfGames - // } - // } - //} - //return 4 - return s.totalRound +func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { + return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*Item) { + BagMgrSingleton.AddItemsV2(&ItemParam{ + P: p, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技馆进房费用", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + }) + }) } func (spd *ScenePolicyData) GetBetState() int32 { return spd.BetState } -func (spd *ScenePolicyData) GetViewLogLen() int32 { - return spd.ViewLogCnt +func (spd *ScenePolicyData) GetPlayerNum() int { + return int(spd.DefaultPlayerCnt) +} + +func (spd *ScenePolicyData) GetBaseScore() int { + return int(spd.BaseScore) } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 76435ab..8751c71 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1636,6 +1636,10 @@ func init() { pack.Msg = "no found" return common.ResponseTag_NoData, pack } else { + gameFreeId := int32(0) + if s.dbGameFree != nil { + gameFreeId = s.dbGameFree.GetId() + } si := &webapiproto.RoomInfo{ Platform: s.limitPlatform.Name, SceneId: int32(s.sceneId), @@ -1643,9 +1647,8 @@ func init() { GameMode: int32(s.gameMode), SceneMode: int32(s.sceneMode), GroupId: s.groupId, - GameFreeId: s.paramsEx[0], + GameFreeId: gameFreeId, Creator: s.creator, - Agentor: s.agentor, ReplayCode: s.replayCode, Params: common.CopySliceInt64ToInt32(s.params), PlayerCnt: int32(len(s.players) - s.robotNum), diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 1f92ae5..865c8ef 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -895,9 +895,9 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { GainWay: common.GainWaySign7Add, Operator: "system", Remark: "累计签到进阶奖励获得", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) } //通知客户端 diff --git a/xlsx/DB_GameRule.xlsx b/xlsx/DB_GameRule.xlsx index 67bd886dbafaa84c269f78b9947d3264d7b8a4e6..4c48f53274cd43a66add47b8280ccdde4e2ca704 100644 GIT binary patch delta 3613 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 delta 3617 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 From 1db69f8df37a632b321c41d7b8fd25d79a2b4a77 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 14:51:30 +0800 Subject: [PATCH 037/153] update excel --- data/DB_GameItem.dat | Bin 10431 -> 10677 bytes data/DB_GameItem.json | 66 +++++++++++++++++++++++++++++++++++++++ data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 8 +++-- data/DB_VIPShow.json | 15 +++++++-- xlsx/DB_GameItem.xlsx | Bin 25802 -> 26139 bytes xlsx/DB_VIP.xlsx | Bin 20885 -> 20811 bytes xlsx/DB_VIPShow.xlsx | Bin 14304 -> 14551 bytes 9 files changed, 85 insertions(+), 4 deletions(-) diff --git a/data/DB_GameItem.dat b/data/DB_GameItem.dat index 2e4f81d1ce711046e336be5948b6996d8134dbc9..3c06c168cb3acf75623f5e86e978e3564a9e440a 100644 GIT binary patch delta 268 zcmdlVxHWi#277%a$DtieLTt}E_CM`iD8566$LbhHUxAiV))<5f- c3^Cx@oLz7>LA$FtF19fX@jTybz}~M206wmPzyJUM delta 12 TcmdlQygzV*2K#0?j_Ha3B8UWu diff --git a/data/DB_GameItem.json b/data/DB_GameItem.json index b5a8de0..1c84607 100644 --- a/data/DB_GameItem.json +++ b/data/DB_GameItem.json @@ -435,6 +435,72 @@ "Location": "0", "Describe": "作用:用于报名冠军赛事;\n产出途径:参加任意锦标赛,获得冠军\n" }, + { + "Id": 40002, + "Name": "房卡", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 24, + "Effect0": [ + 0, + 0, + 0, + 0, + 0 + ], + "Effect": [ + 0, + 0, + 0, + 0, + 0 + ], + "SaleGold": 10000, + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "作用:用于参与竞技馆内玩法;\n产出途径:商城购买\n" + }, + { + "Id": 40003, + "Name": "娃娃卡", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 23, + "Effect0": [ + 0, + 0, + 0, + 0, + 0 + ], + "Effect": [ + 0, + 0, + 0, + 0, + 0 + ], + "SaleGold": 10000, + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "作用:用于抓娃娃机抓娃娃;\n产出途径:商城购买\n" + }, { "Id": 50001, "Name": "碎片礼盒", diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 72db3e8a73873ae51f1c0e2ac3e4d7c127881859..b21d46eed6509a8e084b7d70854523ecd9c93bbb 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIZ(|9%LDDjr5|Q5%w1snf$G8TQsM-=qhakM7Oq$h7OWn?WdY1!n1Oeo4u*Lc T>;WZqjzvI^eqrWfpe+OdW$HXN literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwf4)Pd!J_QLd|+XpiTY%jX|lsLieXjuD*g)5eW1;ybo3(z&v=oe-#2HHXZWimW9 diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 51cc1b583659bcaa00dac6101f25d501e9a8d27a..f44c75cbbea4d747927406e694afb854212dc533 100644 GIT binary patch delta 358 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl^J=}dxb9E*T#MlZPRCgvtapySQJ&ouciOPdgcE#k!qG5_=o#>u6u=1_x~U`F(^P2S6DG5I== z03*|6HntX^Hju?!P;CdMZDg7}hpl4rXKsVRsI*|*D^yGzH##qdJ$`#2tc>6>g$cyLkdOiim-1;d0(A*)-pJ3y3IG-EWS{^5 delta 321 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
4l-kv58Q8)0`Z;g^aVDy}Mwg4g66ne8Ptq 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 diff --git a/xlsx/DB_VIP.xlsx b/xlsx/DB_VIP.xlsx index eec2439fd383d43d8d9d0a9ad3bc3cc71946518f..91fd8872ad95555c86873515cfd2f8a418dc9445 100644 GIT binary patch delta 6453 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 delta 6531 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 delta 7550 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 TgdG4t@_Kc=KB2w+`}Y3;>(~qX From cbd00bf0f863a81b81590dabad7428361f38aba4 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 27 Aug 2024 15:13:32 +0800 Subject: [PATCH 038/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 2 +- gamesrv/clawdoll/player_clawdoll.go | 5 +++ gamesrv/clawdoll/scene_clawdoll.go | 49 +++++++++++++++------ gamesrv/clawdoll/scenepolicy_clawdoll.go | 55 ++++++++++++++++-------- 4 files changed, 79 insertions(+), 32 deletions(-) diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index abcd61a..9bdb60f 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -15,7 +15,7 @@ const ( const ( ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时 ClawDollSceneStartTimeout = time.Second * 5 //开始倒计时 - ClawDollScenePlayTimeout = time.Second * 30 //娃娃机下抓倒计时 + ClawDollScenePlayTimeout = time.Second * 10 //娃娃机下抓倒计时 ClawDollSceneBilledTimeout = time.Second * 2 //结算 ClawDollSceneWaitPayCoinimeout = time.Second * 10 //等待下一局投币 diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 68887da..ab0ff68 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -53,6 +53,11 @@ func (this *PlayerEx) CanGrab() bool { // 游戏新一局 设置数据 func (this *PlayerEx) ReStartGame() { this.ReDataStartGame() + + this.UnmarkFlag(base.PlayerState_WaitNext) + this.UnmarkFlag(base.PlayerState_GameBreak) + this.MarkFlag(base.PlayerState_Ready) + this.gainCoin = 0 this.taxCoin = 0 this.odds = 0 diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index d794269..b3423f4 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -58,7 +58,7 @@ type SceneEx struct { // 游戏是否能开始 func (this *SceneEx) CanStart() bool { //人数>=1自动开始 - if len(this.players) >= 0 && (this.GetRealPlayerNum() >= 0 || this.IsPreCreateScene()) { + if len(this.players) >= 1 && (this.GetRealPlayerNum() >= 1 || this.IsPreCreateScene() || this.IsHasPlaying()) { return true } return false @@ -67,7 +67,7 @@ func (this *SceneEx) CanStart() bool { // 从房间删除玩家 func (this *SceneEx) delPlayer(p *base.Player) { if p, exist := this.players[p.SnId]; exist { - this.seats[p.GetPos()] = nil + //this.seats[p.GetPos()] = nil delete(this.players, p.SnId) this.RemoveWaitPlayer(p.SnId) } @@ -162,7 +162,6 @@ func NewClawdollSceneData(s *base.Scene) *SceneEx { Scene: s, logic: new(rule.Logic), players: make(map[int32]*PlayerEx), - seats: make([]*PlayerEx, s.GetPlayerNum()), PlayerBackup: make(map[int32]*PlayerData), waitPlayers: list.New(), } @@ -175,9 +174,40 @@ func (this *SceneEx) init() bool { return true } -// 检查上分是否合法 -func (this *SceneEx) CheckPayOp(betVal int64, takeMul int64) bool { //游戏底分 - return true +// 检查上分投币是否合法 +func (this *SceneEx) CheckPayCoinOp(p *PlayerEx) bool { + if p == nil { + return false + } + + if p.SnId == this.playingSnid { + return true + } + return false +} + +// 检查移动是否合法 +func (this *SceneEx) CheckMoveOp(p *PlayerEx) bool { + if p == nil { + return false + } + + if p.SnId == this.playingSnid { + return true + } + return false +} + +// 下抓是否合法 +func (this *SceneEx) CheckGrapOp(p *PlayerEx) bool { + if p == nil { + return false + } + + if p.SnId == this.playingSnid { + return true + } + return false } func (this *SceneEx) Clear() { @@ -191,13 +221,6 @@ func (this *SceneEx) Clear() { p.Clear(0) } } - - for i := 0; i < this.GetPlayerNum(); i++ { - if this.seats[i] != nil { - this.seats[i].Clear(this.GetBaseScore()) - } - } - } // 是否有玩家正在玩 diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 64884fa..419b8ce 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -103,11 +103,12 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { playerEx.Clear(baseScore) if sceneEx.playingSnid == 0 { - p.MarkFlag(base.PlayerState_WaitNext) - p.UnmarkFlag(base.PlayerState_Ready) - sceneEx.playingSnid = p.GetSnId() + //sceneEx.playingSnid = p.GetSnId() } + p.MarkFlag(base.PlayerState_WaitNext) + p.UnmarkFlag(base.PlayerState_Ready) + sceneEx.AddWaitPlayer(playerEx) //给自己发送房间信息 @@ -247,6 +248,7 @@ func (this *PolicyClawdoll) CanChangeCoinScene(s *base.Scene, p *base.Player) bo func (this *PolicyClawdoll) SendRoomInfo(s *base.Scene, p *base.Player, sceneEx *SceneEx) { pack := sceneEx.ClawdollCreateRoomInfoPacket(s, p) + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMINFO), pack) } @@ -279,14 +281,14 @@ func (this *BaseState) CanChangeTo(s base.SceneState) bool { func (this *BaseState) CanChangeCoinScene(s *base.Scene, p *base.Player) bool { - //playerEx, ok := p.ExtraData.(*PlayerEx) - //if !ok { - // return false - //} - // - //if !playerEx.CanLeaveScene(s.GetSceneState().GetState()) { - // return false - //} + playerEx, ok := p.ExtraData.(*PlayerEx) + if !ok { + return false + } + + if !playerEx.CanLeaveScene(s.GetSceneState().GetState()) { + return false + } return true } @@ -335,17 +337,13 @@ func (this *StateWait) GetTimeout(s *base.Scene) int { func (this *StateWait) OnEnter(s *base.Scene) { this.BaseState.OnEnter(s) - if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if _, ok := s.ExtraData.(*SceneEx); ok { if s.Gaming { s.NotifySceneRoundPause() } s.Gaming = false ClawdollBroadcastRoomState(s, float32(0)) - - if sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStateStart) - } } } @@ -404,6 +402,7 @@ func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, par if sceneEx.CanStart() { s.ChangeSceneState(rule.ClawDollSceneStateStart) + sceneEx.playingSnid = playerEx.SnId } } @@ -425,6 +424,7 @@ func (this *StateStart) GetState() int { func (this *StateStart) CanChangeTo(s base.SceneState) bool { switch s.GetState() { case rule.ClawDollSceneStatePlayGame: + return true case rule.ClawDollSceneStateWait: return true } @@ -526,6 +526,11 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para switch opcode { case rule.ClawDollPlayerOpGo: + + if !sceneEx.CheckGrapOp(playerEx) { + return false + } + if !playerEx.CanGrab() { return false } @@ -537,6 +542,11 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) case rule.ClawDollPlayerOpMove: + + if !sceneEx.CheckMoveOp(playerEx) { + return false + } + if !playerEx.CanMove() { return false } @@ -581,7 +591,7 @@ func (this *StateBilled) GetState() int { func (this *StateBilled) CanChangeTo(s base.SceneState) bool { switch s.GetState() { - case rule.ClawDollSceneStateStart: + case rule.ClawDollSceneWaitPayCoin: return true } return false @@ -636,6 +646,7 @@ func (this *StateWaitPayCoin) GetState() int { func (this *StateWaitPayCoin) CanChangeTo(s base.SceneState) bool { switch s.GetState() { case rule.ClawDollSceneStateStart: + return true case rule.ClawDollSceneStateWait: return true } @@ -674,6 +685,8 @@ func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode i sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin) + playerEx.ReStartGame() + s.ChangeSceneState(rule.ClawDollSceneStateStart) //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) } @@ -703,7 +716,13 @@ func (this *StateWaitPayCoin) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*SceneEx); ok { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitPayCoinimeout { - // 时间到,重置scene数据 + // 先设置时间 + playingEx := sceneEx.players[sceneEx.playingSnid] + if playingEx != nil { + playingEx.ReStartGame() + } + + // 后重置scene数据 sceneEx.WaitNextPlayer() s.ChangeSceneState(rule.ClawDollSceneStateWait) From 0792e35863faade01e2287230049bb5948cbceaa Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 27 Aug 2024 16:03:07 +0800 Subject: [PATCH 039/153] =?UTF-8?q?=E5=BC=80=E5=90=AF=E7=94=A9=E6=8A=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/machinedoll/command.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index 26c0031..5ed8a95 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -409,7 +409,7 @@ var data = []byte{ 0x06, //25 放线长度占用位 0x00, //26 礼品下放高度 0x00, //27 礼品下放高度占用位 - 0x00, //28 甩抓长度 + 0x14, //28 甩抓长度 0x00, //29 甩抓保护 0x78, //30 甩抓电压 From 17c0817dabd36dea74dbb7dd14664d0a7d17ceb4 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 17:05:00 +0800 Subject: [PATCH 040/153] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=9C=8D=E9=81=93?= =?UTF-8?q?=E5=85=B7=E5=8F=98=E5=8C=96=E5=90=8C=E6=AD=A5=E5=88=B0=E5=A4=A7?= =?UTF-8?q?=E5=8E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + gamesrv/action/action_server.go | 29 + gamesrv/base/player.go | 219 +- gamesrv/base/scene.go | 118 +- gamesrv/tienlen/scenedata_tienlen.go | 2 + gamesrv/tienlen/scenepolicy_tienlen.go | 104 +- gamesrv/transact/trascate_gamesrv.go | 299 +- mgrsrv/api/webapi_gamesrv.go | 13 +- model/baginfo.go | 12 + model/itemdatalog.go | 26 +- protocol/server/pbdata.pb.go | 47 +- protocol/server/pbdata.proto | 8 +- protocol/server/server.pb.go | 3524 +++++++++++++----------- protocol/server/server.proto | 13 + protocol/tienlen/tienlen.pb.go | 696 +++-- protocol/tienlen/tienlen.proto | 16 +- protocol/webapi/common.pb.go | 1947 ++++++------- protocol/webapi/common.proto | 11 +- protocol/webapi/webapi.pb.go | 437 ++- protocol/webapi/webapi.proto | 22 + worldsrv/action_bag.go | 22 +- worldsrv/action_pets.go | 16 +- worldsrv/action_phonelottery.go | 12 +- worldsrv/action_player.go | 6 +- worldsrv/action_server.go | 64 +- worldsrv/action_welfare.go | 21 +- worldsrv/bagmgr.go | 33 +- worldsrv/gamesess.go | 8 + worldsrv/player.go | 14 +- worldsrv/scenepolicydata.go | 17 +- worldsrv/welfmgr.go | 12 +- 31 files changed, 4245 insertions(+), 3524 deletions(-) diff --git a/common/constant.go b/common/constant.go index 7f570f6..9302ef2 100644 --- a/common/constant.go +++ b/common/constant.go @@ -310,6 +310,7 @@ const ( GainWayGuide = 104 //新手引导奖励 GainWayVipGift9 = 105 //vip等级礼包 GainWayRoomCost = 106 //房费消耗 + GainWayRoomGain = 107 //房卡场获得 ) // 后台选择 金币变化类型 的充值 类型id号起始 diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 7089130..22b52b3 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -52,6 +52,27 @@ func HandleWGPlayerLeave(session *netlib.Session, packetId int, data interface{} return nil } +//func HandlePlayerChangeItems(session *netlib.Session, packetId int, data interface{}) error { +// logger.Logger.Tracef("receive PlayerChangeItems %v", data) +// msg, ok := data.(*server.PlayerChangeItems) +// if !ok { +// return nil +// } +// p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) +// if p == nil { +// return nil +// } +// var items []*model.Item +// for _, v := range msg.GetItems() { +// items = append(items, &model.Item{ +// ItemId: v.GetId(), +// ItemNum: v.GetNum(), +// }) +// } +// p.ReceiveAddItems(items) +// return nil +//} + func init() { //创建场景 netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} { @@ -95,6 +116,12 @@ func init() { scene.MatchType = scene.Params[5] } } + for _, v := range msg.GetItems() { + scene.Items = append(scene.Items, &base.ItemInfo{ + Id: v.GetId(), + Num: v.GetNum(), + }) + } scene.ClubId = msg.GetClub() scene.RoomId = msg.GetClubRoomId() scene.RoomPos = msg.GetClubRoomPos() @@ -582,4 +609,6 @@ func init() { netlib.Register(int(server.SSPacketID_PACKET_WG_BUYRECTIMEITEM), server.WGBuyRecTimeItem{}, HandleWGBuyRecTimeItem) // 修改皮肤 netlib.Register(int(server.SSPacketID_PACKET_WG_UpdateSkin), server.WGUpdateSkin{}, HandleWGUpdateSkin) + // 同步道具数量 + //netlib.Register(int(server.SSPacketID_PACKET_PlayerChangeItems), server.PlayerChangeItems{}, HandlePlayerChangeItems) } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index ddd273f..f45f35f 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -113,7 +113,7 @@ type Player struct { Iparams map[int]int64 //整形参数 sparams map[int]string //字符参数 IsLocal bool //是否本地player - Items map[int32]int64 //背包数据 + Items map[int32]int64 //背包数据, 不可直接修改,使用 AddItems 方法 MatchParams []int32 //比赛参数 排名、段位、假snid、假角色、假皮肤 MatchRobotGrades []MatchRobotGrade TestLog []string // 调试日志 @@ -439,7 +439,6 @@ func (this *Player) AddCoin(num int64, gainWay int32, syncFlag int, oper, remark return } this.Coin += num - this.Items[common.ItemIDCoin] = this.Coin if this.scene != nil { if !this.IsRob && !this.scene.Testing { //机器人log排除掉 log := model.NewCoinLogEx(&model.CoinLogParam{ @@ -521,7 +520,6 @@ func (this *Player) AddCoinAsync(num int64, gainWay int32, notifyC, broadcast bo return } this.Coin += num - this.Items[common.ItemIDCoin] = this.Coin if this.scene != nil { if !this.IsRob && !this.scene.Testing && writeLog { //机器人log排除掉 log := model.NewCoinLogEx(&model.CoinLogParam{ @@ -604,62 +602,6 @@ func (this *Player) AddRankScore(rankType int32, num int64) { } } -// 保存金币变动日志 -// 数据用途: 个人房间内牌局账变记录,后台部分报表使用,确保数据计算无误,否则可能影响月底对账 -// takeCoin: 牌局结算前玩家身上的金币 -// changecoin: 本局玩家输赢的钱,注意是税后 -// coin: 结算后玩家当前身上的金币余额 -// totalbet: 总下注额 -// taxcoin: 本局该玩家产生的税收,这里要包含俱乐部的税 -// wincoin: 本局赢取的金币,含税 wincoin==changecoin+taxcoin -// jackpotWinCoin: 从奖池中赢取的金币(拉霸类游戏) -// smallGameWinCoin: 小游戏赢取的金币(拉霸类游戏) -func (this *Player) SaveSceneCoinLog(takeCoin, changecoin, coin, totalbet, taxcoin, wincoin int64, jackpotWinCoin int64, smallGameWinCoin int64) { - if this.scene != nil { - if !this.IsRob && !this.scene.Testing && !this.scene.IsMatchScene() { //机器人log排除掉 - var eventType int64 //输赢事件值 默认值为0 - if coin-takeCoin > 0 { - eventType = 1 - } else if coin-takeCoin < 0 { - eventType = -1 - } - log := model.NewSceneCoinLogEx(this.SnId, changecoin, takeCoin, coin, eventType, - int64(this.scene.DbGameFree.GetBaseScore()), totalbet, int32(this.scene.GameId), this.PlayerData.Ip, - this.scene.GetGameFreeId(), this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), - this.scene.DbGameFree.GetGameMode(), this.scene.GetGameFreeId(), taxcoin, wincoin, - jackpotWinCoin, smallGameWinCoin, this.PackageID) - if log != nil { - LogChannelSingleton.WriteLog(log) - } - } - } -} - -// 需要关照 -func (this *Player) IsNeedCare() bool { - return false -} - -// 需要削弱 -func (this *Player) IsNeedWeaken() bool { - return false -} - -func (this *Player) GetCoinOverPercent() int32 { - return 0 -} - -func (this *Player) SyncCoin() { - pack := &player.SCPlayerCoinChange{ - SnId: proto.Int32(this.SnId), - AddCoin: proto.Int64(0), - RestCoin: proto.Int64(this.Coin), - } - proto.SetDefaults(pack) - this.SendToClient(int(player.PlayerPacketID_PACKET_SC_PLAYERCOINCHANGE), pack) - logger.Logger.Trace("(this *Player) SyncCoin SCPlayerCoinChange:", pack) -} - func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, in, out int64) { // 记录玩家 首次参与该场次的游戏时间 游戏次数 var gameFirstTime, gameFreeFirstTime time.Time @@ -685,19 +627,6 @@ func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, this.TelephonePromoter, this.DeviceId))) } -// 破产事件 -func (this *Player) ReportBankRuptcy(gameId, gameMode, gameFreeId int32) { - //if !this.IsRob { - // d, e := model.MarshalBankruptcyEvent(2, this.SnId, this.TelephonePromoter, this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.CreateTime, gameId, gameMode, gameFreeId) - // if e == nil { - // rmd := model.NewInfluxDBData("hj.player_bankruptcy", d) - // if rmd != nil { - // InfluxDBDataChannelSington.Write(rmd) - // } - // } - //} -} - // 汇总玩家该次游戏总产生的税收 // 数据用途: 平台和推广间分账用,确保数据计算无误, // 注意:该税收不包含俱乐部的抽水 @@ -711,30 +640,6 @@ func (this *Player) AddServiceFee(tax int64) { } } -//func (this *Player) SaveReportForm(showId, sceneMode int, keyGameId string, profitCoin, flow int64, validBet int64) { -// //个人报表统计 -// if this.TotalGameData == nil { -// this.TotalGameData = make(map[int][]*model.PlayerGameTotal) -// } -// if this.TotalGameData[showId] == nil { -// this.TotalGameData[showId] = []*model.PlayerGameTotal{new(model.PlayerGameTotal)} -// } -// td := this.TotalGameData[showId][len(this.TotalGameData[showId])-1] -// td.ProfitCoin += profitCoin -// td.BetCoin += validBet -// td.FlowCoin += flow -// ///////////////最多盈利 -// if pgs, exist := this.GDatas[keyGameId]; exist { -// if pgs.Statics.MaxSysOut < profitCoin { -// pgs.Statics.MaxSysOut = profitCoin -// } -// } else { -// gs := model.NewPlayerGameStatics() -// gs.MaxSysOut = profitCoin -// this.GDatas[keyGameId] = &model.PlayerGameInfo{FirstTime: time.Now(), Statics: *gs} -// } -//} - // Statics 弃用,使用 Scene.Statistics 方法 // 个人投入产出汇总,以游戏id为key存储 // 数据用途:计算玩家赔率用,数据确保计算无误,否则可能影响玩家手牌的调控 @@ -848,61 +753,18 @@ func (this *Player) Statics(keyGameId string, keyGameFreeId string, gain int64, ////} } -func (this *Player) SendTrusteeshipTips() { - pack := &player.SCTrusteeshipTips{ - Trusteeship: proto.Int32(this.Trusteeship), - TotalNum: proto.Int32(model.GameParamData.PlayerWatchNum), - } - proto.SetDefaults(pack) - logger.Logger.Trace("SCTrusteeshipTips: ", pack) - this.SendToClient(int(player.PlayerPacketID_PACKET_SC_TRUSTEESHIPTIPS), pack) -} - -func (this *Player) MarshalIParam() []*server.PlayerIParam { - var params []*server.PlayerIParam - for i, v := range this.Iparams { - params = append(params, &server.PlayerIParam{ - ParamId: proto.Int(i), - IntVal: proto.Int64(v), - }) - } - return params -} - func (this *Player) UnmarshalIParam(params []*server.PlayerIParam) { for _, p := range params { this.Iparams[int(p.GetParamId())] = p.GetIntVal() } } -func (this *Player) MarshalSParam() []*server.PlayerSParam { - var params []*server.PlayerSParam - for i, v := range this.sparams { - params = append(params, &server.PlayerSParam{ - ParamId: proto.Int(i), - StrVal: proto.String(v), - }) - } - return params -} - func (this *Player) UnmarshalSParam(params []*server.PlayerSParam) { for _, p := range params { this.sparams[int(p.GetParamId())] = p.GetStrVal() } } -func (this *Player) MarshalCParam() []*server.PlayerCParam { - var params []*server.PlayerCParam - for k, v := range this.cparams { - params = append(params, &server.PlayerCParam{ - StrKey: proto.String(k), - StrVal: proto.String(v), - }) - } - return params -} - func (this *Player) UnmarshalCParam(params []*server.PlayerCParam) { for _, p := range params { this.cparams[p.GetStrKey()] = p.GetStrVal() @@ -1216,17 +1078,6 @@ func (this *Player) NoviceOdds(gameId int) (int32, bool) { return int32(odds), b1 } -/*// 设置玩家捕鱼等级 -func (this *Player) SetFishLevel(level int64) { - data := srvdata.PBDB_PlayerExpMgr.GetData(int32(level)) - if data == nil { - logger.Logger.Errorf("设置玩家等级错误!snid = %v, lvel = %v", this.SnId, level) - return - } - this.FishLevel = level - this.FishExp = int64(data.Exp) -}*/ - // 增加玩家经验 func (this *Player) AddPlayerExp(exp int64) bool { this.Exp += exp @@ -1392,3 +1243,71 @@ func (this *Player) PetUseSkill() bool { func (this *Player) GetSkillAdd(id int32) int32 { return this.GetSkillAdd2(id, ConfigMgrInst) } + +// AddItems 添加道具 +// 增加或减少道具 +// 同步到 worldsrv +func (this *Player) AddItems(args *model.AddItemParam) { + pack := &server.PlayerChangeItems{ + SnId: args.P.SnId, + } + + for _, v := range args.Change { + item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId) + if item == nil { + continue + } + if v.ItemNum < 0 && this.Items[v.ItemId] < -v.ItemNum { + v.ItemNum = -this.Items[v.ItemId] + } + if v.ItemNum == 0 { + continue + } + this.Items[v.ItemId] += v.ItemNum + if !args.NoLog { + logType := 0 + if v.ItemNum < 0 { + logType = 1 + } + LogChannelSingleton.WriteLog(model.NewItemLogEx(model.ItemParam{ + Platform: this.Platform, + SnId: this.SnId, + LogType: int32(logType), + ItemId: v.ItemId, + ItemName: item.Name, + Count: v.ItemNum, + Remark: args.Remark, + TypeId: args.GainWay, + GameId: args.GameId, + GameFreeId: args.GameFreeId, + Cost: args.Cost, + })) + } + pack.Items = append(pack.Items, &server.Item{ + Id: v.ItemId, + Num: v.ItemNum, + }) + } + + if len(pack.Items) > 0 { + this.SendToWorld(int(server.SSPacketID_PACKET_PlayerChangeItems), pack) + logger.Logger.Tracef("PlayerChangeItems: %v", pack) + } +} + +//func (this *Player) ReceiveAddItems(items []*model.Item) { +// for _, v := range items { +// item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId) +// if item == nil { +// continue +// } +// if v.ItemNum < 0 && this.Items[v.ItemId] < -v.ItemNum { +// v.ItemNum = -this.Items[v.ItemId] +// } +// if v.ItemNum == 0 { +// continue +// } +// this.Items[v.ItemId] += v.ItemNum +// logger.Logger.Tracef("ReceiveAddItems snid:%v, item:%v, num:%v change:%v", this.SnId, v.ItemId, this.Items[v.ItemId], v.ItemNum) +// } +//} diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 56ea1fc..bd8eeee 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -37,10 +37,9 @@ type CanRebindSnId interface { RebindPlayerSnId(oldSnId, newSnId int32) } -// 房间比赛数据变化 -type SceneMatchChgData struct { - NextBaseScore int32 //底分 - NextOutScore int32 //淘汰分 +type ItemInfo struct { + Id int32 + Num int64 } type Scene struct { @@ -109,9 +108,9 @@ type Scene struct { timerRandomRobot int64 nogDismiss int //检查机器人离场时的局数(同一局只检查一次) //playerStatement map[int32]*webapi.PlayerStatement //玩家流水记录 - SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 - matchChgData *SceneMatchChgData //比赛变化数据 + SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 ChessRank []int32 + Items []*ItemInfo BaseScore int32 //tienlen游戏底分 MatchId int64 //标记本次比赛的id,并不是后台id @@ -382,12 +381,6 @@ func (this *Scene) GetGraceDestroy() bool { func (this *Scene) SetGraceDestroy(graceDestroy bool) { this.graceDestroy = graceDestroy } -func (this *Scene) GetMatchChgData() *SceneMatchChgData { - return this.matchChgData -} -func (this *Scene) SetMatchChgData(matchChgData *SceneMatchChgData) { - this.matchChgData = matchChgData -} func (this *Scene) GetCpControlled() bool { return this.CpControlled @@ -564,10 +557,10 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } } - pack.Items = make(map[int32]int64) - for id, num := range p.Items { - pack.Items[id] = num - } + //pack.Items = make(map[int32]int64) + //for id, num := range p.Items { + // pack.Items[id] = num + //} pack.RankScore = make(map[int32]int64) for k, v := range p.RankScore { pack.RankScore[k] = v @@ -2040,32 +2033,27 @@ func (this *Scene) TryBillExGameDrop(p *Player) { } dropInfo := srvdata.GameDropMgrSingleton.GetDropInfoByBaseScore(baseScore) - if dropInfo != nil && len(dropInfo) != 0 && p.Items != nil { + if dropInfo != nil && len(dropInfo) != 0 { realDrop := make(map[int32]int32) for _, drop := range dropInfo { - if _, ok := p.Items[drop.ItemId]; ok { - //概率 - randTmp := rand.Int31n(10000) - if randTmp < drop.Rate { - //个数 - num := drop.MinAmount - if drop.MaxAmount > drop.MinAmount { - num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount - } - oldNum := num - a := math.Max(float64(p.MoneyTotal), 50) * 10.0 / math.Max(float64(p.VCardCost), 500.0) - num = int32(float64(num) * math.Min(a, 1.5)) - if num == 0 { - // 50%概率给oldNum - if rand.Int31n(100) < 50 { - num = oldNum - } - } - p.Items[drop.ItemId] += int64(num) - realDrop[drop.ItemId] = num + //概率 + randTmp := rand.Int31n(10000) + if randTmp < drop.Rate { + //个数 + num := drop.MinAmount + if drop.MaxAmount > drop.MinAmount { + num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount } - } else { - logger.Logger.Error("itemid not exist! ", drop.ItemId) + oldNum := num + a := math.Max(float64(p.MoneyTotal), 50) * 10.0 / math.Max(float64(p.VCardCost), 500.0) + num = int32(float64(num) * math.Min(a, 1.5)) + if num == 0 { + // 50%概率给oldNum + if rand.Int31n(100) < 50 { + num = oldNum + } + } + realDrop[drop.ItemId] = num } } if realDrop != nil && len(realDrop) != 0 { @@ -2073,30 +2061,21 @@ func (this *Scene) TryBillExGameDrop(p *Player) { pack := &player.SCGameExDropItems{} pack.Items = make(map[int32]int32) for id, num := range realDrop { - remark := fmt.Sprintf("游戏掉落%v", id) pack.Items[id] = proto.Int32(num) itemData := srvdata.GameItemMgr.Get(p.Platform, id) if itemData != nil { - //logType 0获得 1消耗 - log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: 0, - ItemId: itemData.Id, - ItemName: itemData.Name, - Count: int64(num), - Remark: remark, - TypeId: common.GainWay_Game, + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: nil, + GainWay: common.GainWay_Game, + Operator: "system", + Remark: fmt.Sprintf("游戏掉落%v", id), GameId: int64(this.GameId), GameFreeId: int64(this.GetGameFreeId()), }) - if log != nil { - logger.Logger.Trace("WriteLog: ", log) - LogChannelSingleton.WriteLog(log) - } } } - if pack != nil && pack.Items != nil && len(pack.Items) != 0 { + if len(pack.Items) > 0 { p.SendToClient(int(player.PlayerPacketID_PACKET_SCGAMEEXDROPITEMS), pack) logger.Logger.Trace("SCGAMEEXDROPITEMS ", pack) } @@ -2121,28 +2100,23 @@ func (this *Scene) DropCollectBox(p *Player) { pack.Items = make(map[int32]int32) itemData := srvdata.GameItemMgr.Get(p.Platform, common.ItemIDCollectBox) if itemData != nil { - p.Items[itemData.Id] = p.Items[itemData.Id] + 1 pack.Items = map[int32]int32{itemData.Id: 1} - remark := fmt.Sprintf("游戏掉落%v", itemData.Id) - //logType 0获得 1消耗 - log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: 0, - ItemId: itemData.Id, - ItemName: itemData.Name, - Count: 1, - Remark: remark, - TypeId: common.GainWay_Game, + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: []*model.Item{ + { + ItemId: itemData.Id, + ItemNum: 1, + }, + }, + GainWay: common.GainWay_Game, + Operator: "system", + Remark: fmt.Sprintf("游戏掉落%v", itemData.Id), GameId: int64(this.GameId), GameFreeId: int64(this.GetGameFreeId()), }) - if log != nil { - logger.Logger.Trace("WriteLog: ", log) - LogChannelSingleton.WriteLog(log) - } } - if pack != nil && pack.Items != nil && len(pack.Items) != 0 { + if len(pack.Items) > 0 { p.SendToClient(int(player.PlayerPacketID_PACKET_SCGAMEEXDROPITEMS), pack) logger.Logger.Trace("SCGAMEEXDROPITEMS", pack) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index dd5ffad..22634d4 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -63,6 +63,8 @@ type TienLenSceneData struct { cardsKuId int32 //牌库ID ctrlType int // 1控赢 2控输 0不控 BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 + RoundEndTime []int64 // 每局结束时间 + RoundLogId []string // 每局牌局记录id } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 340402b..021df7d 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2534,35 +2534,85 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), pack, 0) logger.Logger.Trace("TienLenPacketID_PACKET_SCTienLenGameBilled gameFreeId:", sceneEx.GetGameFreeId(), ";pack:", pack) - for _, v := range tienlenType.PlayerData { - d := sceneEx.BilledList[v.UserId] - if d == nil { - arr := make([]*BilledInfo, 0) - d = &arr - sceneEx.BilledList[v.UserId] = d - } - *d = append(*d, &BilledInfo{ - Round: int32(sceneEx.NumOfGames), - ChangeScore: v.BillCoin, - Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), - }) - } - if sceneEx.NumOfGames >= sceneEx.TotalOfGames { - sceneEx.BilledList = make(map[int32]*[]*BilledInfo) - packBilled := &tienlen.SCTienLenCycleBilled{} - for snid, billedList := range sceneEx.BilledList { - info := &tienlen.TienLenCycleBilledInfo{ - SnId: snid, + if sceneEx.IsCustom() && sceneEx.TotalOfGames > 0 { + for _, v := range tienlenType.PlayerData { + d := sceneEx.BilledList[v.UserId] + if d == nil { + arr := make([]*BilledInfo, 0) + d = &arr + sceneEx.BilledList[v.UserId] = d } - for _, bill := range *billedList { - info.RoundScore = append(info.RoundScore, bill.ChangeScore) - info.Score = 1000 - } - packBilled.List = append(packBilled.List, info) + *d = append(*d, &BilledInfo{ + Round: int32(sceneEx.NumOfGames), + ChangeScore: v.BillCoin, + Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), + }) } - s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) - - if s.IsCustom() { + sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) + sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) + if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] + sceneEx.RoundLogId = sceneEx.RoundLogId[:0] + packBilled := &tienlen.SCTienLenCycleBilled{} + for snid, billedList := range sceneEx.BilledList { + info := &tienlen.TienLenCycleBilledInfo{ + SnId: snid, + TotalScore: 1000, + Score: 1000, + } + for _, bill := range *billedList { + info.RoundScore = append(info.RoundScore, bill.ChangeScore) + info.TotalScore += bill.ChangeScore + } + packBilled.List = append(packBilled.List, info) + } + sort.Slice(packBilled.List, func(i, j int) bool { + var a, b int64 + for _, v := range packBilled.List[i].RoundScore { + a += v + } + a += packBilled.List[i].Score + for _, v := range packBilled.List[j].RoundScore { + b += v + } + b += packBilled.List[j].Score + return a > b + }) + if len(packBilled.List) > 0 { + for _, v := range sceneEx.Items { + packBilled.List[0].Award = append(packBilled.List[0].Award, &tienlen.ItemInfo{ + Id: v.Id, + Num: v.Num, + }) + } + // 发奖品 + if len(sceneEx.Items) > 0 { + p := base.PlayerMgrSington.GetPlayerBySnId(packBilled.List[0].SnId) + if p != nil { + var items []*model.Item + for _, v := range packBilled.List[0].Award { + itemData := srvdata.GameItemMgr.Get(p.Platform, p.SnId) + if itemData != nil { + items = append(items, &model.Item{ + ItemId: v.GetId(), + ItemNum: v.GetNum(), + }) + } + } + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: items, + GainWay: common.GainWayRoomGain, + Operator: "system", + Remark: "房卡场奖励", + GameId: int64(sceneEx.GameId), + GameFreeId: int64(sceneEx.GetGameFreeId()), + }) + } + } + } + s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) s.SyncSceneState(common.SceneStateEnd) } } diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 6aa90b8..1149976 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -1,153 +1,150 @@ package transact -// -//import ( -// "errors" -// "fmt" -// "mongo.games.com/game/common" -// "mongo.games.com/game/gamesrv/base" -// "mongo.games.com/game/model" -// "mongo.games.com/game/proto" -// webapi_proto "mongo.games.com/game/protocol/webapi" -// "mongo.games.com/goserver/core/basic" -// "mongo.games.com/goserver/core/logger" -// "mongo.games.com/goserver/core/netlib" -// "mongo.games.com/goserver/core/task" -// "mongo.games.com/goserver/core/transact" -// "sync" -//) -// -//const __REQIP__ = "__REQIP__" -// -//var ( -// WebAPIErrParam = errors.New("param err") -// WebAPIErrNoPlayer = errors.New("player no find") -//) -// -//func init() { -// transact.RegisteHandler(common.TransType_GameSrvWebApi, &WebAPITranscateHandler{}) -//} -// -//var WebAPIHandlerMgrSingleton = &WebAPIHandlerMgr{wshMap: make(map[string]WebAPIHandler)} -// -//type WebAPITranscateHandler struct { -//} -// -//func (this *WebAPITranscateHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnExcute ") -// req := &common.M2GWebApiRequest{} -// err := netlib.UnmarshalPacketNoPackId(ud.([]byte), req) -// if err == nil { -// wsh := WebAPIHandlerMgrSingleton.GetWebAPIHandler(req.Path) -// if wsh == nil { -// logger.Logger.Error("WebAPITranscateHandler no registe WebAPIHandler ", req.Path) -// return transact.TransExeResult_Failed -// } -// tag, msg := wsh.Handler(tNode, req.Body) -// tNode.TransRep.RetFiels = msg -// switch tag { -// case common.ResponseTag_Ok: -// return transact.TransExeResult_Success -// case common.ResponseTag_TransactYield: -// return transact.TransExeResult_Yield -// } -// } -// logger.Logger.Error("WebAPITranscateHandler.OnExcute err:", err.Error()) -// return transact.TransExeResult_Failed -//} -// -//func (this *WebAPITranscateHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnCommit ") -// return transact.TransExeResult_Success -//} -// -//func (this *WebAPITranscateHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnRollBack ") -// return transact.TransExeResult_Success -//} -// -//func (this *WebAPITranscateHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID, retCode int, -// ud interface{}) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnChildTransRep ") -// return transact.TransExeResult_Success -//} -// -//type WebAPIHandler interface { -// Handler(*transact.TransNode, []byte) (int, proto.Message) -//} -// -//type WebAPIHandlerWrapper func(*transact.TransNode, []byte) (int, proto.Message) -// -//func (wshw WebAPIHandlerWrapper) Handler(tNode *transact.TransNode, params []byte) (int, proto.Message) { -// return wshw(tNode, params) -//} -// -//type WebAPIHandlerMgr struct { -// wshMap map[string]WebAPIHandler -// DataWaitList sync.Map -//} -// -//func (this *WebAPIHandlerMgr) RegisteWebAPIHandler(name string, wsh WebAPIHandler) { -// this.wshMap[name] = wsh -//} -// -//func (this *WebAPIHandlerMgr) GetWebAPIHandler(name string) WebAPIHandler { -// if wsh, exist := this.wshMap[name]; exist { -// return wsh -// } -// return nil -//} -// -//func init() { -// //单控 -// WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/game/SinglePlayerAdjust", WebAPIHandlerWrapper( -// func(tNode *transact.TransNode, params []byte) (int, proto.Message) { -// pack := &webapi_proto.SASinglePlayerAdjust{} -// msg := &webapi_proto.ASSinglePlayerAdjust{} -// err := proto.Unmarshal(params, msg) -// if err != nil { -// fmt.Printf("err:%v", err) -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "数据序列化失败" -// return common.ResponseTag_ParamError, pack -// } -// pack.Tag = webapi_proto.TagCode_SUCCESS -// switch msg.GetOpration() { -// case 1: -// psa := base.PlayerSingleAdjustMgr.AddNewSingleAdjust(msg.GetPlayerSingleAdjust()) -// if psa != nil { -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// return model.AddNewSingleAdjust(psa) -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data != nil { -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "insert err" + data.(error).Error() -// } -// tNode.TransRep.RetFiels = pack -// tNode.Resume() -// }), "AddNewSingleAdjust").Start() -// return common.ResponseTag_TransactYield, pack -// } -// case 2: -// base.PlayerSingleAdjustMgr.EditSingleAdjust(msg.GetPlayerSingleAdjust()) -// case 3: -// psa := msg.PlayerSingleAdjust -// if psa != nil { -// base.PlayerSingleAdjustMgr.DeleteSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) -// } -// case 4: -// ps := msg.PlayerSingleAdjust -// webp := base.PlayerSingleAdjustMgr.GetSingleAdjust(ps.Platform, ps.SnId, ps.GameFreeId) -// if webp == nil { -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = fmt.Sprintf("webp == nil %v %v %v", ps.Platform, ps.SnId, ps.GameFreeId) -// } -// pack.PlayerSingleAdjust = webp -// default: -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "Opration param is error!" -// return common.ResponseTag_ParamError, pack -// } -// return common.ResponseTag_Ok, pack -// })) -//} +import ( + "errors" + "sync" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/transact" + + "mongo.games.com/game/common" + "mongo.games.com/game/gamesrv/base" + "mongo.games.com/game/gamesrv/tienlen" + "mongo.games.com/game/proto" + webapiproto "mongo.games.com/game/protocol/webapi" +) + +const __REQIP__ = "__REQIP__" + +var ( + WebAPIErrParam = errors.New("param err") + WebAPIErrNoPlayer = errors.New("player no find") +) + +func init() { + transact.RegisteHandler(common.TransType_GameSrvWebApi, &WebAPITranscateHandler{}) +} + +var WebAPIHandlerMgrSingleton = &WebAPIHandlerMgr{wshMap: make(map[string]WebAPIHandler)} + +type WebAPITranscateHandler struct { +} + +func (this *WebAPITranscateHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnExcute ") + req := &common.M2GWebApiRequest{} + err := netlib.UnmarshalPacketNoPackId(ud.([]byte), req) + if err == nil { + wsh := WebAPIHandlerMgrSingleton.GetWebAPIHandler(req.Path) + if wsh == nil { + logger.Logger.Error("WebAPITranscateHandler no registe WebAPIHandler ", req.Path) + return transact.TransExeResult_Failed + } + tag, msg := wsh.Handler(tNode, req.Body) + tNode.TransRep.RetFiels = msg + switch tag { + case common.ResponseTag_Ok: + return transact.TransExeResult_Success + case common.ResponseTag_TransactYield: + return transact.TransExeResult_Yield + } + } + logger.Logger.Error("WebAPITranscateHandler.OnExcute err:", err.Error()) + return transact.TransExeResult_Failed +} + +func (this *WebAPITranscateHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnCommit ") + return transact.TransExeResult_Success +} + +func (this *WebAPITranscateHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnRollBack ") + return transact.TransExeResult_Success +} + +func (this *WebAPITranscateHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID, retCode int, + ud interface{}) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnChildTransRep ") + return transact.TransExeResult_Success +} + +type WebAPIHandler interface { + Handler(*transact.TransNode, []byte) (int, proto.Message) +} + +type WebAPIHandlerWrapper func(*transact.TransNode, []byte) (int, proto.Message) + +func (wshw WebAPIHandlerWrapper) Handler(tNode *transact.TransNode, params []byte) (int, proto.Message) { + return wshw(tNode, params) +} + +type WebAPIHandlerMgr struct { + wshMap map[string]WebAPIHandler + DataWaitList sync.Map +} + +func (this *WebAPIHandlerMgr) RegisteWebAPIHandler(name string, wsh WebAPIHandler) { + this.wshMap[name] = wsh +} + +func (this *WebAPIHandlerMgr) GetWebAPIHandler(name string) WebAPIHandler { + if wsh, exist := this.wshMap[name]; exist { + return wsh + } + return nil +} + +func init() { + // 对局详情 + WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/game/room_info", WebAPIHandlerWrapper( + func(tNode *transact.TransNode, params []byte) (int, proto.Message) { + pack := &webapiproto.SARoomInfo{} + msg := &webapiproto.ASRoomInfo{} + err := proto.Unmarshal(params, msg) + if err != nil { + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "数据序列化失败" + return common.ResponseTag_ParamError, pack + } + pack.Tag = webapiproto.TagCode_SUCCESS + + scene := base.SceneMgrSington.GetScene(int(msg.GetRoomId())) + if scene == nil || scene.ExtraData == nil { + pack.Tag = webapiproto.TagCode_NotFound + pack.Msg = "房间没找到" + return common.ResponseTag_NoFindRoom, pack + } + + switch d := scene.ExtraData.(type) { + case tienlen.TienLenSceneData: + for k := range d.BilledList { + pack.SnId = append(pack.SnId, k) + } + for k, v := range d.RoundLogId { + var score []int64 + for _, vv := range pack.SnId { + list := d.BilledList[vv] + if list == nil || len(*list) <= k { + score = append(score, 0) + continue + } + score = append(score, (*list)[k].ChangeScore) + } + item := &webapiproto.RoundInfo{ + Round: int32(k + 1), + Ts: d.RoundEndTime[k], + Score: score, + LogId: v, + } + pack.List = append(pack.List, item) + } + + default: + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "未实现" + } + return common.ResponseTag_Ok, pack + })) +} diff --git a/mgrsrv/api/webapi_gamesrv.go b/mgrsrv/api/webapi_gamesrv.go index 7bc77f0..e7eea62 100644 --- a/mgrsrv/api/webapi_gamesrv.go +++ b/mgrsrv/api/webapi_gamesrv.go @@ -9,6 +9,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/goserver/core" + "mongo.games.com/goserver/core/admin" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/transact" @@ -176,14 +177,6 @@ func init() { return transact.TransExeResult(retCode) }), }) - // //参数设置 - // admin.MyAdminApp.Route("/api/Param/CommonTax", GameSrvWebAPI) - // //捕鱼金币池查询 - // admin.MyAdminApp.Route("/api/CoinPool/FishingPool", GameSrvWebAPI) - // //通用金币池查询 - // admin.MyAdminApp.Route("/api/CoinPool/GamePool", GameSrvWebAPI) - // //捕鱼渔场保留金币 - // admin.MyAdminApp.Route("/api/CoinPool/GameFishsAllCoin", GameSrvWebAPI) - // //单控数据 - //admin.MyAdminApp.Route("/api/game/SinglePlayerAdjust", GameSrvWebAPI) + // 对局详情 + admin.MyAdminApp.Route("/api/game/room_info", GameSrvWebAPI) } diff --git a/model/baginfo.go b/model/baginfo.go index fc2e14e..00a1698 100644 --- a/model/baginfo.go +++ b/model/baginfo.go @@ -84,3 +84,15 @@ func SaveToDelBackupBagItem(args *BagInfo) error { } return nil } + +type AddItemParam struct { + P *PlayerData + Change []*Item // 道具变化数量 + Cost []*Item // 获得道具时消耗的道具数量 + Add int64 // 加成数量 + GainWay int32 // 记录类型 + Operator, Remark string // 操作人,备注 + GameId, GameFreeId int64 // 游戏id,场次id + NoLog bool // 是否不记录日志 + LogId string // 撤销的id,道具兑换失败 +} diff --git a/model/itemdatalog.go b/model/itemdatalog.go index 62d58b6..a6cd9ab 100644 --- a/model/itemdatalog.go +++ b/model/itemdatalog.go @@ -26,7 +26,7 @@ type ItemLog struct { TypeId int32 // 变化类型 GameId int32 // 游戏id,游戏中获得时有值 GameFreeId int32 // 场次id,游戏中获得时有值 - Cost []*ItemInfo // 消耗的道具 + Cost []*Item // 消耗的道具 Id string // 撤销的id,兑换失败 } @@ -36,18 +36,18 @@ func NewItemLog() *ItemLog { } type ItemParam struct { - Platform string // 平台 - SnId int32 // 玩家id - LogType int32 // 记录类型 0.获取 1.消耗 - ItemId int32 // 道具id - ItemName string // 道具名称 - Count int64 // 个数 - Remark string // 备注 - TypeId int32 // 变化类型 - GameId int64 // 游戏id,游戏中获得时有值 - GameFreeId int64 // 场次id,游戏中获得时有值 - Cost []*ItemInfo // 消耗的道具 - LogId string // 撤销的id,兑换失败 + Platform string // 平台 + SnId int32 // 玩家id + LogType int32 // 记录类型 0.获取 1.消耗 + ItemId int32 // 道具id + ItemName string // 道具名称 + Count int64 // 个数 + Remark string // 备注 + TypeId int32 // 变化类型 + GameId int64 // 游戏id,游戏中获得时有值 + GameFreeId int64 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + LogId string // 撤销的id,兑换失败 } func NewItemLogEx(param ItemParam) *ItemLog { diff --git a/protocol/server/pbdata.pb.go b/protocol/server/pbdata.pb.go index 1603684..8685ba9 100644 --- a/protocol/server/pbdata.pb.go +++ b/protocol/server/pbdata.pb.go @@ -10746,9 +10746,11 @@ type DB_VIPShow struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - SkinId int32 `protobuf:"varint,2,opt,name=SkinId,proto3" json:"SkinId,omitempty"` - VIPLevel int32 `protobuf:"varint,3,opt,name=VIPLevel,proto3" json:"VIPLevel,omitempty"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` + SkinId int32 `protobuf:"varint,3,opt,name=SkinId,proto3" json:"SkinId,omitempty"` + VIPLevel int32 `protobuf:"varint,4,opt,name=VIPLevel,proto3" json:"VIPLevel,omitempty"` + VIPDes string `protobuf:"bytes,5,opt,name=VIPDes,proto3" json:"VIPDes,omitempty"` } func (x *DB_VIPShow) Reset() { @@ -10790,6 +10792,13 @@ func (x *DB_VIPShow) GetId() int32 { return 0 } +func (x *DB_VIPShow) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + func (x *DB_VIPShow) GetSkinId() int32 { if x != nil { return x.SkinId @@ -10804,6 +10813,13 @@ func (x *DB_VIPShow) GetVIPLevel() int32 { return 0 } +func (x *DB_VIPShow) GetVIPDes() string { + if x != nil { + return x.VIPDes + } + return "" +} + type DB_VIPShowArray struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -12291,18 +12307,21 @@ var file_pbdata_proto_rawDesc = []byte{ 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, - 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x50, 0x0a, 0x0a, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, + 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x7c, 0x0a, 0x0a, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x56, - 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, - 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x37, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x56, 0x49, - 0x50, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x03, 0x41, 0x72, - 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x03, 0x41, 0x72, 0x72, - 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x56, 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x56, 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x56, + 0x49, 0x50, 0x44, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x56, 0x49, 0x50, + 0x44, 0x65, 0x73, 0x22, 0x37, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, + 0x77, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, + 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x03, 0x41, 0x72, 0x72, 0x42, 0x26, 0x5a, 0x24, + 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/server/pbdata.proto b/protocol/server/pbdata.proto index cbf781d..f288601 100644 --- a/protocol/server/pbdata.proto +++ b/protocol/server/pbdata.proto @@ -1757,9 +1757,13 @@ message DB_VIPShow { int32 Id = 1; - int32 SkinId = 2; + int32 Type = 2; - int32 VIPLevel = 3; + int32 SkinId = 3; + + int32 VIPLevel = 4; + + string VIPDes = 5; } diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 1233d89..7341ecd 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -123,6 +123,7 @@ const ( SSPacketID_PACKET_GW_ADDSINGLEADJUST SSPacketID = 1551 SSPacketID_PACKET_WG_BUYRECTIMEITEM SSPacketID = 1552 SSPacketID_PACKET_WG_UpdateSkin SSPacketID = 1553 // 修改皮肤id + SSPacketID_PACKET_PlayerChangeItems SSPacketID = 1554 // 修改玩家道具数量 ) // Enum value maps for SSPacketID. @@ -224,6 +225,7 @@ var ( 1551: "PACKET_GW_ADDSINGLEADJUST", 1552: "PACKET_WG_BUYRECTIMEITEM", 1553: "PACKET_WG_UpdateSkin", + 1554: "PACKET_PlayerChangeItems", } SSPacketID_value = map[string]int32{ "PACKET_SERVER_ZERO": 0, @@ -322,6 +324,7 @@ var ( "PACKET_GW_ADDSINGLEADJUST": 1551, "PACKET_WG_BUYRECTIMEITEM": 1552, "PACKET_WG_UpdateSkin": 1553, + "PACKET_PlayerChangeItems": 1554, } ) @@ -845,6 +848,61 @@ func (x *ServerNotice) GetText() string { return "" } +type Item struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` +} + +func (x *Item) Reset() { + *x = Item{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Item) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Item) ProtoMessage() {} + +func (x *Item) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Item.ProtoReflect.Descriptor instead. +func (*Item) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{8} +} + +func (x *Item) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Item) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + //PACKET_WG_CREATESCENE type WGCreateScene struct { state protoimpl.MessageState @@ -874,12 +932,13 @@ type WGCreateScene struct { PlayerNum int32 `protobuf:"varint,21,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` RealCtrl bool `protobuf:"varint,22,opt,name=RealCtrl,proto3" json:"RealCtrl,omitempty"` ChessRank []int32 `protobuf:"varint,23,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` + Items []*Item `protobuf:"bytes,24,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 } func (x *WGCreateScene) Reset() { *x = WGCreateScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[8] + mi := &file_server_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -892,7 +951,7 @@ func (x *WGCreateScene) String() string { func (*WGCreateScene) ProtoMessage() {} func (x *WGCreateScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[8] + mi := &file_server_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -905,7 +964,7 @@ func (x *WGCreateScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGCreateScene.ProtoReflect.Descriptor instead. func (*WGCreateScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{8} + return file_server_proto_rawDescGZIP(), []int{9} } func (x *WGCreateScene) GetSceneId() int32 { @@ -1069,6 +1128,13 @@ func (x *WGCreateScene) GetChessRank() []int32 { return nil } +func (x *WGCreateScene) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + //PACKET_WG_DESTROYSCENE type WGDestroyScene struct { state protoimpl.MessageState @@ -1082,7 +1148,7 @@ type WGDestroyScene struct { func (x *WGDestroyScene) Reset() { *x = WGDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1161,7 @@ func (x *WGDestroyScene) String() string { func (*WGDestroyScene) ProtoMessage() {} func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1174,7 @@ func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDestroyScene.ProtoReflect.Descriptor instead. func (*WGDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{9} + return file_server_proto_rawDescGZIP(), []int{10} } func (x *WGDestroyScene) GetIds() []int64 { @@ -1138,7 +1204,7 @@ type GWDestroyScene struct { func (x *GWDestroyScene) Reset() { *x = GWDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1217,7 @@ func (x *GWDestroyScene) String() string { func (*GWDestroyScene) ProtoMessage() {} func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1230,7 @@ func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyScene.ProtoReflect.Descriptor instead. func (*GWDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{10} + return file_server_proto_rawDescGZIP(), []int{11} } func (x *GWDestroyScene) GetSceneId() int64 { @@ -1193,7 +1259,7 @@ type RebateTask struct { func (x *RebateTask) Reset() { *x = RebateTask{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1206,7 +1272,7 @@ func (x *RebateTask) String() string { func (*RebateTask) ProtoMessage() {} func (x *RebateTask) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1219,7 +1285,7 @@ func (x *RebateTask) ProtoReflect() protoreflect.Message { // Deprecated: Use RebateTask.ProtoReflect.Descriptor instead. func (*RebateTask) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{11} + return file_server_proto_rawDescGZIP(), []int{12} } func (x *RebateTask) GetRebateSwitch() bool { @@ -1269,7 +1335,7 @@ type WGPlayerEnter struct { func (x *WGPlayerEnter) Reset() { *x = WGPlayerEnter{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1282,7 +1348,7 @@ func (x *WGPlayerEnter) String() string { func (*WGPlayerEnter) ProtoMessage() {} func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1295,7 +1361,7 @@ func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnter.ProtoReflect.Descriptor instead. func (*WGPlayerEnter) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{12} + return file_server_proto_rawDescGZIP(), []int{13} } func (x *WGPlayerEnter) GetSid() int64 { @@ -1461,7 +1527,7 @@ type WGAudienceSit struct { func (x *WGAudienceSit) Reset() { *x = WGAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1540,7 @@ func (x *WGAudienceSit) String() string { func (*WGAudienceSit) ProtoMessage() {} func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1553,7 @@ func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAudienceSit.ProtoReflect.Descriptor instead. func (*WGAudienceSit) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{13} + return file_server_proto_rawDescGZIP(), []int{14} } func (x *WGAudienceSit) GetSnId() int32 { @@ -1533,7 +1599,7 @@ type WGPlayerReturn struct { func (x *WGPlayerReturn) Reset() { *x = WGPlayerReturn{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1546,7 +1612,7 @@ func (x *WGPlayerReturn) String() string { func (*WGPlayerReturn) ProtoMessage() {} func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1559,7 +1625,7 @@ func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerReturn.ProtoReflect.Descriptor instead. func (*WGPlayerReturn) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{14} + return file_server_proto_rawDescGZIP(), []int{15} } func (x *WGPlayerReturn) GetPlayerId() int32 { @@ -1621,7 +1687,7 @@ type GWPlayerLeave struct { func (x *GWPlayerLeave) Reset() { *x = GWPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1634,7 +1700,7 @@ func (x *GWPlayerLeave) String() string { func (*GWPlayerLeave) ProtoMessage() {} func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1647,7 +1713,7 @@ func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeave.ProtoReflect.Descriptor instead. func (*GWPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{15} + return file_server_proto_rawDescGZIP(), []int{16} } func (x *GWPlayerLeave) GetRoomId() int32 { @@ -1796,7 +1862,7 @@ type WGPlayerDropLine struct { func (x *WGPlayerDropLine) Reset() { *x = WGPlayerDropLine{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1875,7 @@ func (x *WGPlayerDropLine) String() string { func (*WGPlayerDropLine) ProtoMessage() {} func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1888,7 @@ func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerDropLine.ProtoReflect.Descriptor instead. func (*WGPlayerDropLine) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{16} + return file_server_proto_rawDescGZIP(), []int{17} } func (x *WGPlayerDropLine) GetId() int32 { @@ -1854,7 +1920,7 @@ type WGPlayerRehold struct { func (x *WGPlayerRehold) Reset() { *x = WGPlayerRehold{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1933,7 @@ func (x *WGPlayerRehold) String() string { func (*WGPlayerRehold) ProtoMessage() {} func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +1946,7 @@ func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerRehold.ProtoReflect.Descriptor instead. func (*WGPlayerRehold) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{17} + return file_server_proto_rawDescGZIP(), []int{18} } func (x *WGPlayerRehold) GetId() int32 { @@ -1924,7 +1990,7 @@ type GWBilledRoomCard struct { func (x *GWBilledRoomCard) Reset() { *x = GWBilledRoomCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1937,7 +2003,7 @@ func (x *GWBilledRoomCard) String() string { func (*GWBilledRoomCard) ProtoMessage() {} func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1950,7 +2016,7 @@ func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { // Deprecated: Use GWBilledRoomCard.ProtoReflect.Descriptor instead. func (*GWBilledRoomCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{18} + return file_server_proto_rawDescGZIP(), []int{19} } func (x *GWBilledRoomCard) GetRoomId() int32 { @@ -1984,7 +2050,7 @@ type GGPlayerSessionBind struct { func (x *GGPlayerSessionBind) Reset() { *x = GGPlayerSessionBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1997,7 +2063,7 @@ func (x *GGPlayerSessionBind) String() string { func (*GGPlayerSessionBind) ProtoMessage() {} func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2010,7 +2076,7 @@ func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{19} + return file_server_proto_rawDescGZIP(), []int{20} } func (x *GGPlayerSessionBind) GetSid() int64 { @@ -2067,7 +2133,7 @@ type GGPlayerSessionUnBind struct { func (x *GGPlayerSessionUnBind) Reset() { *x = GGPlayerSessionUnBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2080,7 +2146,7 @@ func (x *GGPlayerSessionUnBind) String() string { func (*GGPlayerSessionUnBind) ProtoMessage() {} func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2159,7 @@ func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionUnBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionUnBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{20} + return file_server_proto_rawDescGZIP(), []int{21} } func (x *GGPlayerSessionUnBind) GetSid() int64 { @@ -2118,7 +2184,7 @@ type WGDayTimeChange struct { func (x *WGDayTimeChange) Reset() { *x = WGDayTimeChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2131,7 +2197,7 @@ func (x *WGDayTimeChange) String() string { func (*WGDayTimeChange) ProtoMessage() {} func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2144,7 +2210,7 @@ func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDayTimeChange.ProtoReflect.Descriptor instead. func (*WGDayTimeChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{21} + return file_server_proto_rawDescGZIP(), []int{22} } func (x *WGDayTimeChange) GetMinute() int32 { @@ -2200,7 +2266,7 @@ type ReplayPlayerData struct { func (x *ReplayPlayerData) Reset() { *x = ReplayPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2213,7 +2279,7 @@ func (x *ReplayPlayerData) String() string { func (*ReplayPlayerData) ProtoMessage() {} func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2226,7 +2292,7 @@ func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayPlayerData.ProtoReflect.Descriptor instead. func (*ReplayPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{22} + return file_server_proto_rawDescGZIP(), []int{23} } func (x *ReplayPlayerData) GetAccId() string { @@ -2302,7 +2368,7 @@ type ReplayRecord struct { func (x *ReplayRecord) Reset() { *x = ReplayRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2381,7 @@ func (x *ReplayRecord) String() string { func (*ReplayRecord) ProtoMessage() {} func (x *ReplayRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2394,7 @@ func (x *ReplayRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRecord.ProtoReflect.Descriptor instead. func (*ReplayRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{23} + return file_server_proto_rawDescGZIP(), []int{24} } func (x *ReplayRecord) GetTimeStamp() int64 { @@ -2384,7 +2450,7 @@ type ReplaySequene struct { func (x *ReplaySequene) Reset() { *x = ReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2397,7 +2463,7 @@ func (x *ReplaySequene) String() string { func (*ReplaySequene) ProtoMessage() {} func (x *ReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2410,7 +2476,7 @@ func (x *ReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaySequene.ProtoReflect.Descriptor instead. func (*ReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{24} + return file_server_proto_rawDescGZIP(), []int{25} } func (x *ReplaySequene) GetSequenes() []*ReplayRecord { @@ -2448,7 +2514,7 @@ type GRReplaySequene struct { func (x *GRReplaySequene) Reset() { *x = GRReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2461,7 +2527,7 @@ func (x *GRReplaySequene) String() string { func (*GRReplaySequene) ProtoMessage() {} func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2474,7 +2540,7 @@ func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRReplaySequene.ProtoReflect.Descriptor instead. func (*GRReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{25} + return file_server_proto_rawDescGZIP(), []int{26} } func (x *GRReplaySequene) GetName() string { @@ -2621,7 +2687,7 @@ type WRLoginRec struct { func (x *WRLoginRec) Reset() { *x = WRLoginRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2634,7 +2700,7 @@ func (x *WRLoginRec) String() string { func (*WRLoginRec) ProtoMessage() {} func (x *WRLoginRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2647,7 +2713,7 @@ func (x *WRLoginRec) ProtoReflect() protoreflect.Message { // Deprecated: Use WRLoginRec.ProtoReflect.Descriptor instead. func (*WRLoginRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{26} + return file_server_proto_rawDescGZIP(), []int{27} } func (x *WRLoginRec) GetSnId() int32 { @@ -2711,7 +2777,7 @@ type WRGameDetail struct { func (x *WRGameDetail) Reset() { *x = WRGameDetail{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2724,7 +2790,7 @@ func (x *WRGameDetail) String() string { func (*WRGameDetail) ProtoMessage() {} func (x *WRGameDetail) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2737,7 +2803,7 @@ func (x *WRGameDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use WRGameDetail.ProtoReflect.Descriptor instead. func (*WRGameDetail) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{27} + return file_server_proto_rawDescGZIP(), []int{28} } func (x *WRGameDetail) GetGameDetail() []byte { @@ -2760,7 +2826,7 @@ type WRPlayerData struct { func (x *WRPlayerData) Reset() { *x = WRPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2773,7 +2839,7 @@ func (x *WRPlayerData) String() string { func (*WRPlayerData) ProtoMessage() {} func (x *WRPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2786,7 +2852,7 @@ func (x *WRPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use WRPlayerData.ProtoReflect.Descriptor instead. func (*WRPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{28} + return file_server_proto_rawDescGZIP(), []int{29} } func (x *WRPlayerData) GetSid() int64 { @@ -2816,7 +2882,7 @@ type WTPlayerPay struct { func (x *WTPlayerPay) Reset() { *x = WTPlayerPay{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2829,7 +2895,7 @@ func (x *WTPlayerPay) String() string { func (*WTPlayerPay) ProtoMessage() {} func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2842,7 +2908,7 @@ func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { // Deprecated: Use WTPlayerPay.ProtoReflect.Descriptor instead. func (*WTPlayerPay) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{29} + return file_server_proto_rawDescGZIP(), []int{30} } func (x *WTPlayerPay) GetPlayerData() []byte { @@ -2875,7 +2941,7 @@ type PlayerGameRec struct { func (x *PlayerGameRec) Reset() { *x = PlayerGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2888,7 +2954,7 @@ func (x *PlayerGameRec) String() string { func (*PlayerGameRec) ProtoMessage() {} func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2901,7 +2967,7 @@ func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerGameRec.ProtoReflect.Descriptor instead. func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{30} + return file_server_proto_rawDescGZIP(), []int{31} } func (x *PlayerGameRec) GetId() int32 { @@ -2962,7 +3028,7 @@ type GWGameRec struct { func (x *GWGameRec) Reset() { *x = GWGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2975,7 +3041,7 @@ func (x *GWGameRec) String() string { func (*GWGameRec) ProtoMessage() {} func (x *GWGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2988,7 +3054,7 @@ func (x *GWGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameRec.ProtoReflect.Descriptor instead. func (*GWGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{31} + return file_server_proto_rawDescGZIP(), []int{32} } func (x *GWGameRec) GetRoomId() int32 { @@ -3041,7 +3107,7 @@ type GWSceneStart struct { func (x *GWSceneStart) Reset() { *x = GWSceneStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3054,7 +3120,7 @@ func (x *GWSceneStart) String() string { func (*GWSceneStart) ProtoMessage() {} func (x *GWSceneStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3067,7 +3133,7 @@ func (x *GWSceneStart) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneStart.ProtoReflect.Descriptor instead. func (*GWSceneStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{32} + return file_server_proto_rawDescGZIP(), []int{33} } func (x *GWSceneStart) GetRoomId() int32 { @@ -3110,7 +3176,7 @@ type PlayerCtx struct { func (x *PlayerCtx) Reset() { *x = PlayerCtx{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3123,7 +3189,7 @@ func (x *PlayerCtx) String() string { func (*PlayerCtx) ProtoMessage() {} func (x *PlayerCtx) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3136,7 +3202,7 @@ func (x *PlayerCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCtx.ProtoReflect.Descriptor instead. func (*PlayerCtx) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{33} + return file_server_proto_rawDescGZIP(), []int{34} } func (x *PlayerCtx) GetSnId() int32 { @@ -3172,7 +3238,7 @@ type FishRecord struct { func (x *FishRecord) Reset() { *x = FishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3185,7 +3251,7 @@ func (x *FishRecord) String() string { func (*FishRecord) ProtoMessage() {} func (x *FishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3198,7 +3264,7 @@ func (x *FishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use FishRecord.ProtoReflect.Descriptor instead. func (*FishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{34} + return file_server_proto_rawDescGZIP(), []int{35} } func (x *FishRecord) GetFishId() int32 { @@ -3228,7 +3294,7 @@ type GWFishRecord struct { func (x *GWFishRecord) Reset() { *x = GWFishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3241,7 +3307,7 @@ func (x *GWFishRecord) String() string { func (*GWFishRecord) ProtoMessage() {} func (x *GWFishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3254,7 +3320,7 @@ func (x *GWFishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use GWFishRecord.ProtoReflect.Descriptor instead. func (*GWFishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{35} + return file_server_proto_rawDescGZIP(), []int{36} } func (x *GWFishRecord) GetGameFreeId() int32 { @@ -3292,7 +3358,7 @@ type GWSceneState struct { func (x *GWSceneState) Reset() { *x = GWSceneState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3305,7 +3371,7 @@ func (x *GWSceneState) String() string { func (*GWSceneState) ProtoMessage() {} func (x *GWSceneState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3318,7 +3384,7 @@ func (x *GWSceneState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneState.ProtoReflect.Descriptor instead. func (*GWSceneState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{36} + return file_server_proto_rawDescGZIP(), []int{37} } func (x *GWSceneState) GetRoomId() int32 { @@ -3352,7 +3418,7 @@ type WRInviteRobot struct { func (x *WRInviteRobot) Reset() { *x = WRInviteRobot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3365,7 +3431,7 @@ func (x *WRInviteRobot) String() string { func (*WRInviteRobot) ProtoMessage() {} func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3378,7 +3444,7 @@ func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteRobot.ProtoReflect.Descriptor instead. func (*WRInviteRobot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{37} + return file_server_proto_rawDescGZIP(), []int{38} } func (x *WRInviteRobot) GetRoomId() int32 { @@ -3436,7 +3502,7 @@ type WRInviteCreateRoom struct { func (x *WRInviteCreateRoom) Reset() { *x = WRInviteCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3449,7 +3515,7 @@ func (x *WRInviteCreateRoom) String() string { func (*WRInviteCreateRoom) ProtoMessage() {} func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3462,7 +3528,7 @@ func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteCreateRoom.ProtoReflect.Descriptor instead. func (*WRInviteCreateRoom) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{38} + return file_server_proto_rawDescGZIP(), []int{39} } func (x *WRInviteCreateRoom) GetCnt() int32 { @@ -3494,7 +3560,7 @@ type WGAgentKickOutPlayer struct { func (x *WGAgentKickOutPlayer) Reset() { *x = WGAgentKickOutPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3507,7 +3573,7 @@ func (x *WGAgentKickOutPlayer) String() string { func (*WGAgentKickOutPlayer) ProtoMessage() {} func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3520,7 +3586,7 @@ func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAgentKickOutPlayer.ProtoReflect.Descriptor instead. func (*WGAgentKickOutPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{39} + return file_server_proto_rawDescGZIP(), []int{40} } func (x *WGAgentKickOutPlayer) GetRoomId() int32 { @@ -3564,7 +3630,7 @@ type WDDataAnalysis struct { func (x *WDDataAnalysis) Reset() { *x = WDDataAnalysis{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3577,7 +3643,7 @@ func (x *WDDataAnalysis) String() string { func (*WDDataAnalysis) ProtoMessage() {} func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3590,7 +3656,7 @@ func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { // Deprecated: Use WDDataAnalysis.ProtoReflect.Descriptor instead. func (*WDDataAnalysis) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{40} + return file_server_proto_rawDescGZIP(), []int{41} } func (x *WDDataAnalysis) GetDataType() int32 { @@ -3619,7 +3685,7 @@ type PlayerCard struct { func (x *PlayerCard) Reset() { *x = PlayerCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3632,7 +3698,7 @@ func (x *PlayerCard) String() string { func (*PlayerCard) ProtoMessage() {} func (x *PlayerCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3711,7 @@ func (x *PlayerCard) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCard.ProtoReflect.Descriptor instead. func (*PlayerCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{41} + return file_server_proto_rawDescGZIP(), []int{42} } func (x *PlayerCard) GetPos() int32 { @@ -3675,7 +3741,7 @@ type GNPlayerCards struct { func (x *GNPlayerCards) Reset() { *x = GNPlayerCards{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3688,7 +3754,7 @@ func (x *GNPlayerCards) String() string { func (*GNPlayerCards) ProtoMessage() {} func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3701,7 +3767,7 @@ func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerCards.ProtoReflect.Descriptor instead. func (*GNPlayerCards) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{42} + return file_server_proto_rawDescGZIP(), []int{43} } func (x *GNPlayerCards) GetSceneId() int32 { @@ -3740,7 +3806,7 @@ type RobotData struct { func (x *RobotData) Reset() { *x = RobotData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3753,7 +3819,7 @@ func (x *RobotData) String() string { func (*RobotData) ProtoMessage() {} func (x *RobotData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3766,7 +3832,7 @@ func (x *RobotData) ProtoReflect() protoreflect.Message { // Deprecated: Use RobotData.ProtoReflect.Descriptor instead. func (*RobotData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{43} + return file_server_proto_rawDescGZIP(), []int{44} } func (x *RobotData) GetTotalIn() int64 { @@ -3816,7 +3882,7 @@ type GNPlayerParam struct { func (x *GNPlayerParam) Reset() { *x = GNPlayerParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3829,7 +3895,7 @@ func (x *GNPlayerParam) String() string { func (*GNPlayerParam) ProtoMessage() {} func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3842,7 +3908,7 @@ func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerParam.ProtoReflect.Descriptor instead. func (*GNPlayerParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{44} + return file_server_proto_rawDescGZIP(), []int{45} } func (x *GNPlayerParam) GetSceneId() int32 { @@ -3873,7 +3939,7 @@ type GWRebuildScene struct { func (x *GWRebuildScene) Reset() { *x = GWRebuildScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3886,7 +3952,7 @@ func (x *GWRebuildScene) String() string { func (*GWRebuildScene) ProtoMessage() {} func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3899,7 +3965,7 @@ func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRebuildScene.ProtoReflect.Descriptor instead. func (*GWRebuildScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{45} + return file_server_proto_rawDescGZIP(), []int{46} } func (x *GWRebuildScene) GetSceneIds() []int32 { @@ -3929,7 +3995,7 @@ type WGRebindPlayerSnId struct { func (x *WGRebindPlayerSnId) Reset() { *x = WGRebindPlayerSnId{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3942,7 +4008,7 @@ func (x *WGRebindPlayerSnId) String() string { func (*WGRebindPlayerSnId) ProtoMessage() {} func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3955,7 +4021,7 @@ func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRebindPlayerSnId.ProtoReflect.Descriptor instead. func (*WGRebindPlayerSnId) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{46} + return file_server_proto_rawDescGZIP(), []int{47} } func (x *WGRebindPlayerSnId) GetOldSnId() int32 { @@ -3986,7 +4052,7 @@ type GWPlayerFlag struct { func (x *GWPlayerFlag) Reset() { *x = GWPlayerFlag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3999,7 +4065,7 @@ func (x *GWPlayerFlag) String() string { func (*GWPlayerFlag) ProtoMessage() {} func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4012,7 +4078,7 @@ func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerFlag.ProtoReflect.Descriptor instead. func (*GWPlayerFlag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{47} + return file_server_proto_rawDescGZIP(), []int{48} } func (x *GWPlayerFlag) GetSnId() int32 { @@ -4051,7 +4117,7 @@ type WGHundredOp struct { func (x *WGHundredOp) Reset() { *x = WGHundredOp{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4064,7 +4130,7 @@ func (x *WGHundredOp) String() string { func (*WGHundredOp) ProtoMessage() {} func (x *WGHundredOp) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4077,7 +4143,7 @@ func (x *WGHundredOp) ProtoReflect() protoreflect.Message { // Deprecated: Use WGHundredOp.ProtoReflect.Descriptor instead. func (*WGHundredOp) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{48} + return file_server_proto_rawDescGZIP(), []int{49} } func (x *WGHundredOp) GetSnid() int32 { @@ -4121,7 +4187,7 @@ type GWNewNotice struct { func (x *GWNewNotice) Reset() { *x = GWNewNotice{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4134,7 +4200,7 @@ func (x *GWNewNotice) String() string { func (*GWNewNotice) ProtoMessage() {} func (x *GWNewNotice) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4147,7 +4213,7 @@ func (x *GWNewNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use GWNewNotice.ProtoReflect.Descriptor instead. func (*GWNewNotice) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{49} + return file_server_proto_rawDescGZIP(), []int{50} } func (x *GWNewNotice) GetCh() string { @@ -4232,7 +4298,7 @@ type PlayerStatics struct { func (x *PlayerStatics) Reset() { *x = PlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4245,7 +4311,7 @@ func (x *PlayerStatics) String() string { func (*PlayerStatics) ProtoMessage() {} func (x *PlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4258,7 +4324,7 @@ func (x *PlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerStatics.ProtoReflect.Descriptor instead. func (*PlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{50} + return file_server_proto_rawDescGZIP(), []int{51} } func (x *PlayerStatics) GetSnId() int32 { @@ -4338,7 +4404,7 @@ type GWPlayerStatics struct { func (x *GWPlayerStatics) Reset() { *x = GWPlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4351,7 +4417,7 @@ func (x *GWPlayerStatics) String() string { func (*GWPlayerStatics) ProtoMessage() {} func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4364,7 +4430,7 @@ func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerStatics.ProtoReflect.Descriptor instead. func (*GWPlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{51} + return file_server_proto_rawDescGZIP(), []int{52} } func (x *GWPlayerStatics) GetRoomId() int32 { @@ -4411,7 +4477,7 @@ type WGResetCoinPool struct { func (x *WGResetCoinPool) Reset() { *x = WGResetCoinPool{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4424,7 +4490,7 @@ func (x *WGResetCoinPool) String() string { func (*WGResetCoinPool) ProtoMessage() {} func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4437,7 +4503,7 @@ func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { // Deprecated: Use WGResetCoinPool.ProtoReflect.Descriptor instead. func (*WGResetCoinPool) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{52} + return file_server_proto_rawDescGZIP(), []int{53} } func (x *WGResetCoinPool) GetPlatform() string { @@ -4499,7 +4565,7 @@ type WGSetPlayerBlackLevel struct { func (x *WGSetPlayerBlackLevel) Reset() { *x = WGSetPlayerBlackLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4512,7 +4578,7 @@ func (x *WGSetPlayerBlackLevel) String() string { func (*WGSetPlayerBlackLevel) ProtoMessage() {} func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4525,7 +4591,7 @@ func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSetPlayerBlackLevel.ProtoReflect.Descriptor instead. func (*WGSetPlayerBlackLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{53} + return file_server_proto_rawDescGZIP(), []int{54} } func (x *WGSetPlayerBlackLevel) GetSnId() int32 { @@ -4588,7 +4654,7 @@ type GWAutoRelieveWBLevel struct { func (x *GWAutoRelieveWBLevel) Reset() { *x = GWAutoRelieveWBLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4601,7 +4667,7 @@ func (x *GWAutoRelieveWBLevel) String() string { func (*GWAutoRelieveWBLevel) ProtoMessage() {} func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4614,7 +4680,7 @@ func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAutoRelieveWBLevel.ProtoReflect.Descriptor instead. func (*GWAutoRelieveWBLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{54} + return file_server_proto_rawDescGZIP(), []int{55} } func (x *GWAutoRelieveWBLevel) GetSnId() int32 { @@ -4640,7 +4706,7 @@ type GWScenePlayerLog struct { func (x *GWScenePlayerLog) Reset() { *x = GWScenePlayerLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4653,7 +4719,7 @@ func (x *GWScenePlayerLog) String() string { func (*GWScenePlayerLog) ProtoMessage() {} func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4666,7 +4732,7 @@ func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWScenePlayerLog.ProtoReflect.Descriptor instead. func (*GWScenePlayerLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{55} + return file_server_proto_rawDescGZIP(), []int{56} } func (x *GWScenePlayerLog) GetGameId() int32 { @@ -4712,7 +4778,7 @@ type GWPlayerForceLeave struct { func (x *GWPlayerForceLeave) Reset() { *x = GWPlayerForceLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4725,7 +4791,7 @@ func (x *GWPlayerForceLeave) String() string { func (*GWPlayerForceLeave) ProtoMessage() {} func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4738,7 +4804,7 @@ func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerForceLeave.ProtoReflect.Descriptor instead. func (*GWPlayerForceLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{56} + return file_server_proto_rawDescGZIP(), []int{57} } func (x *GWPlayerForceLeave) GetRoomId() int32 { @@ -4788,7 +4854,7 @@ type PlayerData struct { func (x *PlayerData) Reset() { *x = PlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4801,7 +4867,7 @@ func (x *PlayerData) String() string { func (*PlayerData) ProtoMessage() {} func (x *PlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4814,7 +4880,7 @@ func (x *PlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerData.ProtoReflect.Descriptor instead. func (*PlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{57} + return file_server_proto_rawDescGZIP(), []int{58} } func (x *PlayerData) GetSnId() int32 { @@ -4886,7 +4952,7 @@ type GWPlayerData struct { func (x *GWPlayerData) Reset() { *x = GWPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4899,7 +4965,7 @@ func (x *GWPlayerData) String() string { func (*GWPlayerData) ProtoMessage() {} func (x *GWPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4912,7 +4978,7 @@ func (x *GWPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerData.ProtoReflect.Descriptor instead. func (*GWPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{58} + return file_server_proto_rawDescGZIP(), []int{59} } func (x *GWPlayerData) GetDatas() []*PlayerData { @@ -4954,7 +5020,7 @@ type PlayerWinScore struct { func (x *PlayerWinScore) Reset() { *x = PlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4967,7 +5033,7 @@ func (x *PlayerWinScore) String() string { func (*PlayerWinScore) ProtoMessage() {} func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4980,7 +5046,7 @@ func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerWinScore.ProtoReflect.Descriptor instead. func (*PlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{59} + return file_server_proto_rawDescGZIP(), []int{60} } func (x *PlayerWinScore) GetSnId() int32 { @@ -5047,7 +5113,7 @@ type GWPlayerWinScore struct { func (x *GWPlayerWinScore) Reset() { *x = GWPlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5060,7 +5126,7 @@ func (x *GWPlayerWinScore) String() string { func (*GWPlayerWinScore) ProtoMessage() {} func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5073,7 +5139,7 @@ func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerWinScore.ProtoReflect.Descriptor instead. func (*GWPlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{60} + return file_server_proto_rawDescGZIP(), []int{61} } func (x *GWPlayerWinScore) GetGameFreeId() int32 { @@ -5122,7 +5188,7 @@ type WGPayerOnGameCount struct { func (x *WGPayerOnGameCount) Reset() { *x = WGPayerOnGameCount{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5135,7 +5201,7 @@ func (x *WGPayerOnGameCount) String() string { func (*WGPayerOnGameCount) ProtoMessage() {} func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5148,7 +5214,7 @@ func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPayerOnGameCount.ProtoReflect.Descriptor instead. func (*WGPayerOnGameCount) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{61} + return file_server_proto_rawDescGZIP(), []int{62} } func (x *WGPayerOnGameCount) GetDTCount() []int32 { @@ -5170,7 +5236,7 @@ type GRGameFreeData struct { func (x *GRGameFreeData) Reset() { *x = GRGameFreeData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5183,7 +5249,7 @@ func (x *GRGameFreeData) String() string { func (*GRGameFreeData) ProtoMessage() {} func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5196,7 +5262,7 @@ func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { // Deprecated: Use GRGameFreeData.ProtoReflect.Descriptor instead. func (*GRGameFreeData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{62} + return file_server_proto_rawDescGZIP(), []int{63} } func (x *GRGameFreeData) GetRoomId() int32 { @@ -5225,7 +5291,7 @@ type WGSyncPlayerSafeBoxCoin struct { func (x *WGSyncPlayerSafeBoxCoin) Reset() { *x = WGSyncPlayerSafeBoxCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5238,7 +5304,7 @@ func (x *WGSyncPlayerSafeBoxCoin) String() string { func (*WGSyncPlayerSafeBoxCoin) ProtoMessage() {} func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5251,7 +5317,7 @@ func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSyncPlayerSafeBoxCoin.ProtoReflect.Descriptor instead. func (*WGSyncPlayerSafeBoxCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{63} + return file_server_proto_rawDescGZIP(), []int{64} } func (x *WGSyncPlayerSafeBoxCoin) GetSnId() int32 { @@ -5283,7 +5349,7 @@ type WGClubMessage struct { func (x *WGClubMessage) Reset() { *x = WGClubMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5296,7 +5362,7 @@ func (x *WGClubMessage) String() string { func (*WGClubMessage) ProtoMessage() {} func (x *WGClubMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5309,7 +5375,7 @@ func (x *WGClubMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WGClubMessage.ProtoReflect.Descriptor instead. func (*WGClubMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{64} + return file_server_proto_rawDescGZIP(), []int{65} } func (x *WGClubMessage) GetClubId() int64 { @@ -5356,7 +5422,7 @@ type DWThirdRebateMessage struct { func (x *DWThirdRebateMessage) Reset() { *x = DWThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5369,7 +5435,7 @@ func (x *DWThirdRebateMessage) String() string { func (*DWThirdRebateMessage) ProtoMessage() {} func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5382,7 +5448,7 @@ func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRebateMessage.ProtoReflect.Descriptor instead. func (*DWThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{65} + return file_server_proto_rawDescGZIP(), []int{66} } func (x *DWThirdRebateMessage) GetTag() uint64 { @@ -5441,7 +5507,7 @@ type DWThirdRoundMessage struct { func (x *DWThirdRoundMessage) Reset() { *x = DWThirdRoundMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5454,7 +5520,7 @@ func (x *DWThirdRoundMessage) String() string { func (*DWThirdRoundMessage) ProtoMessage() {} func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5467,7 +5533,7 @@ func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRoundMessage.ProtoReflect.Descriptor instead. func (*DWThirdRoundMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{66} + return file_server_proto_rawDescGZIP(), []int{67} } func (x *DWThirdRoundMessage) GetTag() uint64 { @@ -5560,7 +5626,7 @@ type WDACKThirdRebateMessage struct { func (x *WDACKThirdRebateMessage) Reset() { *x = WDACKThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5573,7 +5639,7 @@ func (x *WDACKThirdRebateMessage) String() string { func (*WDACKThirdRebateMessage) ProtoMessage() {} func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5586,7 +5652,7 @@ func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WDACKThirdRebateMessage.ProtoReflect.Descriptor instead. func (*WDACKThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{67} + return file_server_proto_rawDescGZIP(), []int{68} } func (x *WDACKThirdRebateMessage) GetTag() uint64 { @@ -5617,7 +5683,7 @@ type GWGameStateLog struct { func (x *GWGameStateLog) Reset() { *x = GWGameStateLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5630,7 +5696,7 @@ func (x *GWGameStateLog) String() string { func (*GWGameStateLog) ProtoMessage() {} func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5643,7 +5709,7 @@ func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameStateLog.ProtoReflect.Descriptor instead. func (*GWGameStateLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{68} + return file_server_proto_rawDescGZIP(), []int{69} } func (x *GWGameStateLog) GetSceneId() int32 { @@ -5683,7 +5749,7 @@ type GWGameState struct { func (x *GWGameState) Reset() { *x = GWGameState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5696,7 +5762,7 @@ func (x *GWGameState) String() string { func (*GWGameState) ProtoMessage() {} func (x *GWGameState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5709,7 +5775,7 @@ func (x *GWGameState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameState.ProtoReflect.Descriptor instead. func (*GWGameState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{69} + return file_server_proto_rawDescGZIP(), []int{70} } func (x *GWGameState) GetSceneId() int32 { @@ -5766,7 +5832,7 @@ type GWGameJackList struct { func (x *GWGameJackList) Reset() { *x = GWGameJackList{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5779,7 +5845,7 @@ func (x *GWGameJackList) String() string { func (*GWGameJackList) ProtoMessage() {} func (x *GWGameJackList) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5792,7 +5858,7 @@ func (x *GWGameJackList) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackList.ProtoReflect.Descriptor instead. func (*GWGameJackList) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{70} + return file_server_proto_rawDescGZIP(), []int{71} } func (x *GWGameJackList) GetSnId() int32 { @@ -5864,7 +5930,7 @@ type GWGameJackCoin struct { func (x *GWGameJackCoin) Reset() { *x = GWGameJackCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5877,7 +5943,7 @@ func (x *GWGameJackCoin) String() string { func (*GWGameJackCoin) ProtoMessage() {} func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5890,7 +5956,7 @@ func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackCoin.ProtoReflect.Descriptor instead. func (*GWGameJackCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{71} + return file_server_proto_rawDescGZIP(), []int{72} } func (x *GWGameJackCoin) GetPlatform() []string { @@ -5920,7 +5986,7 @@ type WGNiceIdRebind struct { func (x *WGNiceIdRebind) Reset() { *x = WGNiceIdRebind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5933,7 +5999,7 @@ func (x *WGNiceIdRebind) String() string { func (*WGNiceIdRebind) ProtoMessage() {} func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5946,7 +6012,7 @@ func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { // Deprecated: Use WGNiceIdRebind.ProtoReflect.Descriptor instead. func (*WGNiceIdRebind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{72} + return file_server_proto_rawDescGZIP(), []int{73} } func (x *WGNiceIdRebind) GetUser() int32 { @@ -5976,7 +6042,7 @@ type PLAYERWINCOININFO struct { func (x *PLAYERWINCOININFO) Reset() { *x = PLAYERWINCOININFO{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5989,7 +6055,7 @@ func (x *PLAYERWINCOININFO) String() string { func (*PLAYERWINCOININFO) ProtoMessage() {} func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6002,7 +6068,7 @@ func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { // Deprecated: Use PLAYERWINCOININFO.ProtoReflect.Descriptor instead. func (*PLAYERWINCOININFO) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{73} + return file_server_proto_rawDescGZIP(), []int{74} } func (x *PLAYERWINCOININFO) GetSnId() int32 { @@ -6038,7 +6104,7 @@ type GWPLAYERWINCOIN struct { func (x *GWPLAYERWINCOIN) Reset() { *x = GWPLAYERWINCOIN{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6051,7 +6117,7 @@ func (x *GWPLAYERWINCOIN) String() string { func (*GWPLAYERWINCOIN) ProtoMessage() {} func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6064,7 +6130,7 @@ func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPLAYERWINCOIN.ProtoReflect.Descriptor instead. func (*GWPLAYERWINCOIN) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{74} + return file_server_proto_rawDescGZIP(), []int{75} } func (x *GWPLAYERWINCOIN) GetPlayer() []*PLAYERWINCOININFO { @@ -6087,7 +6153,7 @@ type GWPlayerAutoMarkTag struct { func (x *GWPlayerAutoMarkTag) Reset() { *x = GWPlayerAutoMarkTag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6100,7 +6166,7 @@ func (x *GWPlayerAutoMarkTag) String() string { func (*GWPlayerAutoMarkTag) ProtoMessage() {} func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6113,7 +6179,7 @@ func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerAutoMarkTag.ProtoReflect.Descriptor instead. func (*GWPlayerAutoMarkTag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{75} + return file_server_proto_rawDescGZIP(), []int{76} } func (x *GWPlayerAutoMarkTag) GetSnId() int32 { @@ -6144,7 +6210,7 @@ type WGInviteRobEnterCoinSceneQueue struct { func (x *WGInviteRobEnterCoinSceneQueue) Reset() { *x = WGInviteRobEnterCoinSceneQueue{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6157,7 +6223,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) String() string { func (*WGInviteRobEnterCoinSceneQueue) ProtoMessage() {} func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6170,7 +6236,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteRobEnterCoinSceneQueue.ProtoReflect.Descriptor instead. func (*WGInviteRobEnterCoinSceneQueue) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{76} + return file_server_proto_rawDescGZIP(), []int{77} } func (x *WGInviteRobEnterCoinSceneQueue) GetPlatform() string { @@ -6206,7 +6272,7 @@ type WGGameForceStart struct { func (x *WGGameForceStart) Reset() { *x = WGGameForceStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6219,7 +6285,7 @@ func (x *WGGameForceStart) String() string { func (*WGGameForceStart) ProtoMessage() {} func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6232,7 +6298,7 @@ func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameForceStart.ProtoReflect.Descriptor instead. func (*WGGameForceStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{77} + return file_server_proto_rawDescGZIP(), []int{78} } func (x *WGGameForceStart) GetSceneId() int32 { @@ -6257,7 +6323,7 @@ type ProfitControlGameCfg struct { func (x *ProfitControlGameCfg) Reset() { *x = ProfitControlGameCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6270,7 +6336,7 @@ func (x *ProfitControlGameCfg) String() string { func (*ProfitControlGameCfg) ProtoMessage() {} func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6283,7 +6349,7 @@ func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlGameCfg.ProtoReflect.Descriptor instead. func (*ProfitControlGameCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{78} + return file_server_proto_rawDescGZIP(), []int{79} } func (x *ProfitControlGameCfg) GetGameFreeId() int32 { @@ -6333,7 +6399,7 @@ type ProfitControlPlatformCfg struct { func (x *ProfitControlPlatformCfg) Reset() { *x = ProfitControlPlatformCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6346,7 +6412,7 @@ func (x *ProfitControlPlatformCfg) String() string { func (*ProfitControlPlatformCfg) ProtoMessage() {} func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6359,7 +6425,7 @@ func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlPlatformCfg.ProtoReflect.Descriptor instead. func (*ProfitControlPlatformCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{79} + return file_server_proto_rawDescGZIP(), []int{80} } func (x *ProfitControlPlatformCfg) GetPlatform() string { @@ -6388,7 +6454,7 @@ type WGProfitControlCorrect struct { func (x *WGProfitControlCorrect) Reset() { *x = WGProfitControlCorrect{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6401,7 +6467,7 @@ func (x *WGProfitControlCorrect) String() string { func (*WGProfitControlCorrect) ProtoMessage() {} func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6414,7 +6480,7 @@ func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { // Deprecated: Use WGProfitControlCorrect.ProtoReflect.Descriptor instead. func (*WGProfitControlCorrect) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{80} + return file_server_proto_rawDescGZIP(), []int{81} } func (x *WGProfitControlCorrect) GetCfg() []*ProfitControlPlatformCfg { @@ -6436,7 +6502,7 @@ type GWChangeSceneEvent struct { func (x *GWChangeSceneEvent) Reset() { *x = GWChangeSceneEvent{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6449,7 +6515,7 @@ func (x *GWChangeSceneEvent) String() string { func (*GWChangeSceneEvent) ProtoMessage() {} func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6462,7 +6528,7 @@ func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use GWChangeSceneEvent.ProtoReflect.Descriptor instead. func (*GWChangeSceneEvent) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{81} + return file_server_proto_rawDescGZIP(), []int{82} } func (x *GWChangeSceneEvent) GetSceneId() int32 { @@ -6484,7 +6550,7 @@ type PlayerIParam struct { func (x *PlayerIParam) Reset() { *x = PlayerIParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6497,7 +6563,7 @@ func (x *PlayerIParam) String() string { func (*PlayerIParam) ProtoMessage() {} func (x *PlayerIParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6510,7 +6576,7 @@ func (x *PlayerIParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerIParam.ProtoReflect.Descriptor instead. func (*PlayerIParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{82} + return file_server_proto_rawDescGZIP(), []int{83} } func (x *PlayerIParam) GetParamId() int32 { @@ -6539,7 +6605,7 @@ type PlayerSParam struct { func (x *PlayerSParam) Reset() { *x = PlayerSParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6552,7 +6618,7 @@ func (x *PlayerSParam) String() string { func (*PlayerSParam) ProtoMessage() {} func (x *PlayerSParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6565,7 +6631,7 @@ func (x *PlayerSParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerSParam.ProtoReflect.Descriptor instead. func (*PlayerSParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{83} + return file_server_proto_rawDescGZIP(), []int{84} } func (x *PlayerSParam) GetParamId() int32 { @@ -6594,7 +6660,7 @@ type PlayerCParam struct { func (x *PlayerCParam) Reset() { *x = PlayerCParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6607,7 +6673,7 @@ func (x *PlayerCParam) String() string { func (*PlayerCParam) ProtoMessage() {} func (x *PlayerCParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6620,7 +6686,7 @@ func (x *PlayerCParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCParam.ProtoReflect.Descriptor instead. func (*PlayerCParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{84} + return file_server_proto_rawDescGZIP(), []int{85} } func (x *PlayerCParam) GetStrKey() string { @@ -6649,7 +6715,7 @@ type PlayerMatchCoin struct { func (x *PlayerMatchCoin) Reset() { *x = PlayerMatchCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6662,7 +6728,7 @@ func (x *PlayerMatchCoin) String() string { func (*PlayerMatchCoin) ProtoMessage() {} func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6675,7 +6741,7 @@ func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerMatchCoin.ProtoReflect.Descriptor instead. func (*PlayerMatchCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{85} + return file_server_proto_rawDescGZIP(), []int{86} } func (x *PlayerMatchCoin) GetSnId() int32 { @@ -6707,7 +6773,7 @@ type GWPlayerMatchBilled struct { func (x *GWPlayerMatchBilled) Reset() { *x = GWPlayerMatchBilled{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6720,7 +6786,7 @@ func (x *GWPlayerMatchBilled) String() string { func (*GWPlayerMatchBilled) ProtoMessage() {} func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6733,7 +6799,7 @@ func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchBilled.ProtoReflect.Descriptor instead. func (*GWPlayerMatchBilled) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{86} + return file_server_proto_rawDescGZIP(), []int{87} } func (x *GWPlayerMatchBilled) GetSceneId() int32 { @@ -6781,7 +6847,7 @@ type GWPlayerMatchGrade struct { func (x *GWPlayerMatchGrade) Reset() { *x = GWPlayerMatchGrade{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6794,7 +6860,7 @@ func (x *GWPlayerMatchGrade) String() string { func (*GWPlayerMatchGrade) ProtoMessage() {} func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6807,7 +6873,7 @@ func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchGrade.ProtoReflect.Descriptor instead. func (*GWPlayerMatchGrade) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{87} + return file_server_proto_rawDescGZIP(), []int{88} } func (x *GWPlayerMatchGrade) GetSceneId() int32 { @@ -6867,7 +6933,7 @@ type WGPlayerQuitMatch struct { func (x *WGPlayerQuitMatch) Reset() { *x = WGPlayerQuitMatch{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6880,7 +6946,7 @@ func (x *WGPlayerQuitMatch) String() string { func (*WGPlayerQuitMatch) ProtoMessage() {} func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6893,7 +6959,7 @@ func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerQuitMatch.ProtoReflect.Descriptor instead. func (*WGPlayerQuitMatch) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{88} + return file_server_proto_rawDescGZIP(), []int{89} } func (x *WGPlayerQuitMatch) GetSnId() int32 { @@ -6934,7 +7000,7 @@ type WGSceneMatchBaseChange struct { func (x *WGSceneMatchBaseChange) Reset() { *x = WGSceneMatchBaseChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6947,7 +7013,7 @@ func (x *WGSceneMatchBaseChange) String() string { func (*WGSceneMatchBaseChange) ProtoMessage() {} func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6960,7 +7026,7 @@ func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSceneMatchBaseChange.ProtoReflect.Descriptor instead. func (*WGSceneMatchBaseChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{89} + return file_server_proto_rawDescGZIP(), []int{90} } func (x *WGSceneMatchBaseChange) GetSceneIds() []int32 { @@ -7013,7 +7079,7 @@ type SSRedirectToPlayer struct { func (x *SSRedirectToPlayer) Reset() { *x = SSRedirectToPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7026,7 +7092,7 @@ func (x *SSRedirectToPlayer) String() string { func (*SSRedirectToPlayer) ProtoMessage() {} func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7039,7 +7105,7 @@ func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use SSRedirectToPlayer.ProtoReflect.Descriptor instead. func (*SSRedirectToPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{90} + return file_server_proto_rawDescGZIP(), []int{91} } func (x *SSRedirectToPlayer) GetSnId() int32 { @@ -7086,7 +7152,7 @@ type WGInviteMatchRob struct { func (x *WGInviteMatchRob) Reset() { *x = WGInviteMatchRob{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7099,7 +7165,7 @@ func (x *WGInviteMatchRob) String() string { func (*WGInviteMatchRob) ProtoMessage() {} func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7112,7 +7178,7 @@ func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteMatchRob.ProtoReflect.Descriptor instead. func (*WGInviteMatchRob) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{91} + return file_server_proto_rawDescGZIP(), []int{92} } func (x *WGInviteMatchRob) GetPlatform() string { @@ -7163,7 +7229,7 @@ type GameInfo struct { func (x *GameInfo) Reset() { *x = GameInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7176,7 +7242,7 @@ func (x *GameInfo) String() string { func (*GameInfo) ProtoMessage() {} func (x *GameInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7189,7 +7255,7 @@ func (x *GameInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GameInfo.ProtoReflect.Descriptor instead. func (*GameInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{92} + return file_server_proto_rawDescGZIP(), []int{93} } func (x *GameInfo) GetGameId() int32 { @@ -7228,7 +7294,7 @@ type WGGameJackpot struct { func (x *WGGameJackpot) Reset() { *x = WGGameJackpot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7241,7 +7307,7 @@ func (x *WGGameJackpot) String() string { func (*WGGameJackpot) ProtoMessage() {} func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7254,7 +7320,7 @@ func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameJackpot.ProtoReflect.Descriptor instead. func (*WGGameJackpot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{93} + return file_server_proto_rawDescGZIP(), []int{94} } func (x *WGGameJackpot) GetSid() int64 { @@ -7304,7 +7370,7 @@ type BigWinHistoryInfo struct { func (x *BigWinHistoryInfo) Reset() { *x = BigWinHistoryInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7317,7 +7383,7 @@ func (x *BigWinHistoryInfo) String() string { func (*BigWinHistoryInfo) ProtoMessage() {} func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7330,7 +7396,7 @@ func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BigWinHistoryInfo.ProtoReflect.Descriptor instead. func (*BigWinHistoryInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{94} + return file_server_proto_rawDescGZIP(), []int{95} } func (x *BigWinHistoryInfo) GetSpinID() string { @@ -7410,7 +7476,7 @@ type WGPlayerEnterMiniGame struct { func (x *WGPlayerEnterMiniGame) Reset() { *x = WGPlayerEnterMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7423,7 +7489,7 @@ func (x *WGPlayerEnterMiniGame) String() string { func (*WGPlayerEnterMiniGame) ProtoMessage() {} func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7436,7 +7502,7 @@ func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnterMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerEnterMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{95} + return file_server_proto_rawDescGZIP(), []int{96} } func (x *WGPlayerEnterMiniGame) GetSid() int64 { @@ -7524,7 +7590,7 @@ type WGPlayerLeaveMiniGame struct { func (x *WGPlayerLeaveMiniGame) Reset() { *x = WGPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7537,7 +7603,7 @@ func (x *WGPlayerLeaveMiniGame) String() string { func (*WGPlayerLeaveMiniGame) ProtoMessage() {} func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7550,7 +7616,7 @@ func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{96} + return file_server_proto_rawDescGZIP(), []int{97} } func (x *WGPlayerLeaveMiniGame) GetSid() int64 { @@ -7593,7 +7659,7 @@ type WGPlayerLeave struct { func (x *WGPlayerLeave) Reset() { *x = WGPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7606,7 +7672,7 @@ func (x *WGPlayerLeave) String() string { func (*WGPlayerLeave) ProtoMessage() {} func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7619,7 +7685,7 @@ func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeave.ProtoReflect.Descriptor instead. func (*WGPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{97} + return file_server_proto_rawDescGZIP(), []int{98} } func (x *WGPlayerLeave) GetSnId() int32 { @@ -7645,7 +7711,7 @@ type GWPlayerLeaveMiniGame struct { func (x *GWPlayerLeaveMiniGame) Reset() { *x = GWPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7658,7 +7724,7 @@ func (x *GWPlayerLeaveMiniGame) String() string { func (*GWPlayerLeaveMiniGame) ProtoMessage() {} func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7671,7 +7737,7 @@ func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*GWPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{98} + return file_server_proto_rawDescGZIP(), []int{99} } func (x *GWPlayerLeaveMiniGame) GetSceneId() int32 { @@ -7721,7 +7787,7 @@ type GWDestroyMiniScene struct { func (x *GWDestroyMiniScene) Reset() { *x = GWDestroyMiniScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7734,7 +7800,7 @@ func (x *GWDestroyMiniScene) String() string { func (*GWDestroyMiniScene) ProtoMessage() {} func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7747,7 +7813,7 @@ func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyMiniScene.ProtoReflect.Descriptor instead. func (*GWDestroyMiniScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{99} + return file_server_proto_rawDescGZIP(), []int{100} } func (x *GWDestroyMiniScene) GetSceneId() int32 { @@ -7769,7 +7835,7 @@ type GRDestroyScene struct { func (x *GRDestroyScene) Reset() { *x = GRDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7782,7 +7848,7 @@ func (x *GRDestroyScene) String() string { func (*GRDestroyScene) ProtoMessage() {} func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7795,7 +7861,7 @@ func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRDestroyScene.ProtoReflect.Descriptor instead. func (*GRDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{100} + return file_server_proto_rawDescGZIP(), []int{101} } func (x *GRDestroyScene) GetSceneId() int32 { @@ -7817,7 +7883,7 @@ type RWAccountInvalid struct { func (x *RWAccountInvalid) Reset() { *x = RWAccountInvalid{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7830,7 +7896,7 @@ func (x *RWAccountInvalid) String() string { func (*RWAccountInvalid) ProtoMessage() {} func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7843,7 +7909,7 @@ func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { // Deprecated: Use RWAccountInvalid.ProtoReflect.Descriptor instead. func (*RWAccountInvalid) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{101} + return file_server_proto_rawDescGZIP(), []int{102} } func (x *RWAccountInvalid) GetAcc() string { @@ -7866,7 +7932,7 @@ type WGDTRoomInfo struct { func (x *WGDTRoomInfo) Reset() { *x = WGDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7879,7 +7945,7 @@ func (x *WGDTRoomInfo) String() string { func (*WGDTRoomInfo) ProtoMessage() {} func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7892,7 +7958,7 @@ func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDTRoomInfo.ProtoReflect.Descriptor instead. func (*WGDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{102} + return file_server_proto_rawDescGZIP(), []int{103} } func (x *WGDTRoomInfo) GetDataKey() string { @@ -7927,7 +7993,7 @@ type PlayerDTCoin struct { func (x *PlayerDTCoin) Reset() { *x = PlayerDTCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7940,7 +8006,7 @@ func (x *PlayerDTCoin) String() string { func (*PlayerDTCoin) ProtoMessage() {} func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7953,7 +8019,7 @@ func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerDTCoin.ProtoReflect.Descriptor instead. func (*PlayerDTCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{103} + return file_server_proto_rawDescGZIP(), []int{104} } func (x *PlayerDTCoin) GetNickName() string { @@ -8024,7 +8090,7 @@ type EResult struct { func (x *EResult) Reset() { *x = EResult{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8037,7 +8103,7 @@ func (x *EResult) String() string { func (*EResult) ProtoMessage() {} func (x *EResult) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8050,7 +8116,7 @@ func (x *EResult) ProtoReflect() protoreflect.Message { // Deprecated: Use EResult.ProtoReflect.Descriptor instead. func (*EResult) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{104} + return file_server_proto_rawDescGZIP(), []int{105} } func (x *EResult) GetIndex() string { @@ -8092,7 +8158,7 @@ type GWDTRoomInfo struct { func (x *GWDTRoomInfo) Reset() { *x = GWDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8105,7 +8171,7 @@ func (x *GWDTRoomInfo) String() string { func (*GWDTRoomInfo) ProtoMessage() {} func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8118,7 +8184,7 @@ func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDTRoomInfo.ProtoReflect.Descriptor instead. func (*GWDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{105} + return file_server_proto_rawDescGZIP(), []int{106} } func (x *GWDTRoomInfo) GetDataKey() string { @@ -8234,7 +8300,7 @@ type WGRoomResults struct { func (x *WGRoomResults) Reset() { *x = WGRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8247,7 +8313,7 @@ func (x *WGRoomResults) String() string { func (*WGRoomResults) ProtoMessage() {} func (x *WGRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8260,7 +8326,7 @@ func (x *WGRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRoomResults.ProtoReflect.Descriptor instead. func (*WGRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{106} + return file_server_proto_rawDescGZIP(), []int{107} } func (x *WGRoomResults) GetRoomId() int32 { @@ -8305,7 +8371,7 @@ type GWRoomResults struct { func (x *GWRoomResults) Reset() { *x = GWRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8318,7 +8384,7 @@ func (x *GWRoomResults) String() string { func (*GWRoomResults) ProtoMessage() {} func (x *GWRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8331,7 +8397,7 @@ func (x *GWRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRoomResults.ProtoReflect.Descriptor instead. func (*GWRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{107} + return file_server_proto_rawDescGZIP(), []int{108} } func (x *GWRoomResults) GetDataKey() string { @@ -8369,7 +8435,7 @@ type GWAddSingleAdjust struct { func (x *GWAddSingleAdjust) Reset() { *x = GWAddSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8382,7 +8448,7 @@ func (x *GWAddSingleAdjust) String() string { func (*GWAddSingleAdjust) ProtoMessage() {} func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8395,7 +8461,7 @@ func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAddSingleAdjust.ProtoReflect.Descriptor instead. func (*GWAddSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{108} + return file_server_proto_rawDescGZIP(), []int{109} } func (x *GWAddSingleAdjust) GetSnId() int32 { @@ -8433,7 +8499,7 @@ type WGSingleAdjust struct { func (x *WGSingleAdjust) Reset() { *x = WGSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8446,7 +8512,7 @@ func (x *WGSingleAdjust) String() string { func (*WGSingleAdjust) ProtoMessage() {} func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8459,7 +8525,7 @@ func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSingleAdjust.ProtoReflect.Descriptor instead. func (*WGSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{109} + return file_server_proto_rawDescGZIP(), []int{110} } func (x *WGSingleAdjust) GetSceneId() int32 { @@ -8500,7 +8566,7 @@ type WbCtrlCfg struct { func (x *WbCtrlCfg) Reset() { *x = WbCtrlCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8513,7 +8579,7 @@ func (x *WbCtrlCfg) String() string { func (*WbCtrlCfg) ProtoMessage() {} func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8526,7 +8592,7 @@ func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use WbCtrlCfg.ProtoReflect.Descriptor instead. func (*WbCtrlCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{110} + return file_server_proto_rawDescGZIP(), []int{111} } func (x *WbCtrlCfg) GetPlatform() string { @@ -8585,7 +8651,7 @@ type WGBuyRecTimeItem struct { func (x *WGBuyRecTimeItem) Reset() { *x = WGBuyRecTimeItem{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8598,7 +8664,7 @@ func (x *WGBuyRecTimeItem) String() string { func (*WGBuyRecTimeItem) ProtoMessage() {} func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8611,7 +8677,7 @@ func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { // Deprecated: Use WGBuyRecTimeItem.ProtoReflect.Descriptor instead. func (*WGBuyRecTimeItem) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{111} + return file_server_proto_rawDescGZIP(), []int{112} } func (x *WGBuyRecTimeItem) GetSnId() int32 { @@ -8648,7 +8714,7 @@ type WGUpdateSkin struct { func (x *WGUpdateSkin) Reset() { *x = WGUpdateSkin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8661,7 +8727,7 @@ func (x *WGUpdateSkin) String() string { func (*WGUpdateSkin) ProtoMessage() {} func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8674,7 +8740,7 @@ func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGUpdateSkin.ProtoReflect.Descriptor instead. func (*WGUpdateSkin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{112} + return file_server_proto_rawDescGZIP(), []int{113} } func (x *WGUpdateSkin) GetSnId() int32 { @@ -8691,6 +8757,62 @@ func (x *WGUpdateSkin) GetId() int32 { return 0 } +// PACKET_PlayerChangeItems +type PlayerChangeItems struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` + Items []*Item `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 道具变化数量 +} + +func (x *PlayerChangeItems) Reset() { + *x = PlayerChangeItems{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlayerChangeItems) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlayerChangeItems) ProtoMessage() {} + +func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[114] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlayerChangeItems.ProtoReflect.Descriptor instead. +func (*PlayerChangeItems) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{114} +} + +func (x *PlayerChangeItems) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *PlayerChangeItems) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + var File_server_proto protoreflect.FileDescriptor var file_server_proto_rawDesc = []byte{ @@ -8735,1135 +8857,1147 @@ var file_server_proto_rawDesc = []byte{ 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0xbc, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, - 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, - 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, - 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, - 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, - 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, - 0x73, 0x47, 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, - 0x47, 0x72, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, - 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, - 0x4d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, - 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, - 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0x28, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, + 0x75, 0x6d, 0x22, 0xe0, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, + 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, + 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, + 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, + 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, + 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, + 0x6b, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, + 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, + 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, + 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, + 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, + 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, + 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x73, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, - 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, + 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 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, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, - 0x47, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, - 0x65, 0x72, 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, - 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x46, 0x6c, 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, - 0x12, 0x2e, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, - 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, - 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, - 0x74, 0x65, 0x6d, 0x73, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x3c, 0x0a, 0x0e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, + 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, + 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, - 0x0a, 0x10, 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, - 0x01, 0x0a, 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x56, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, - 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, - 0x0a, 0x15, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x55, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, - 0x65, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, - 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0xae, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, - 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x65, 0x12, 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, - 0x03, 0x52, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x50, 0x6f, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, - 0x72, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, - 0x44, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x49, 0x44, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, - 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, - 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, - 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, - 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, - 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x3a, 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, - 0x47, 0x57, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, - 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, + 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, + 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, + 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, + 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, + 0x6d, 0x73, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, + 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, + 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, + 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, + 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, + 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, + 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, + 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, + 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, + 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, + 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, + 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, - 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, - 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, - 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, - 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, - 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, - 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, - 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, - 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, - 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, - 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, - 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, - 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, - 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, - 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, - 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, + 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, + 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, + 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, + 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, + 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, + 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, + 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, - 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, - 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, - 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, - 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, - 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, - 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, - 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, - 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, - 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, - 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, - 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, - 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, - 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, - 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, - 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, - 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, - 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, - 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, - 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, - 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, - 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, - 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, - 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, - 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, - 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, - 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, - 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, - 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, - 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, - 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, - 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, - 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, - 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, - 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, - 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, - 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, - 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, - 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, - 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, + 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, + 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, + 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, + 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, - 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, - 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, - 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, - 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, - 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, - 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, + 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, + 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, + 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, + 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, + 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, + 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, + 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, + 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, + 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, + 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, + 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, + 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, + 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, + 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, + 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, + 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, + 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, + 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, + 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, + 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, + 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, + 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, + 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, + 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, + 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, + 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, + 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, + 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, - 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, - 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, - 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, - 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, - 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, - 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, - 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, - 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, - 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, - 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, - 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, - 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, - 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, - 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, - 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, - 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, + 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, + 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, + 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, + 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, + 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, + 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, + 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, + 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, + 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, + 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, + 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, + 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, + 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, + 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, - 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, - 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, - 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, - 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, - 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, - 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, - 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, - 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, - 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, - 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, - 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, - 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, - 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, - 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, - 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, - 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, - 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, - 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, - 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, - 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, - 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, - 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, - 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, + 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, + 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, + 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, + 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, + 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, + 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, + 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, + 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, + 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, + 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, + 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, + 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, + 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, + 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, + 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, + 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, + 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, + 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, + 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, + 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, + 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, + 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, + 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, + 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, + 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, + 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, + 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, + 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, + 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, + 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, + 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, + 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, + 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, + 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, + 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, + 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, + 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, + 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, + 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, + 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, + 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, + 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, + 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, + 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, + 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, + 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, + 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, + 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, + 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, + 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, + 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, + 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, + 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, + 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, + 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, + 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, + 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, + 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, + 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, + 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, + 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, + 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, + 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, + 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, + 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, + 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, + 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, + 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, + 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, + 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, + 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, + 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, + 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, + 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, + 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, + 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, + 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, - 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, - 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, - 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, - 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, - 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, - 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, - 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, - 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, - 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, - 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, - 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, - 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, - 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, - 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, - 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, - 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, - 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, - 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, - 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, - 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, - 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, - 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, - 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, - 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, - 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, - 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, - 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, - 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, - 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, - 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, - 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, - 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, - 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, - 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, + 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, + 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, + 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, + 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, + 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, + 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, + 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, + 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, + 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, + 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, + 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, + 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, + 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, + 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, + 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, + 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, + 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, + 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, + 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, + 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, + 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, + 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, + 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, + 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, + 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, + 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, + 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, + 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, + 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, + 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, - 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, - 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, - 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, - 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, - 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, - 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, - 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, - 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, - 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, - 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, + 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, + 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, + 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, + 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, + 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, + 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, + 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9879,7 +10013,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 118) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 120) var file_server_proto_goTypes = []interface{}{ (SSPacketID)(0), // 0: server.SSPacketID (SGBindGroupTag_OpCode)(0), // 1: server.SGBindGroupTag.OpCode @@ -9891,155 +10025,159 @@ var file_server_proto_goTypes = []interface{}{ (*ServerState)(nil), // 7: server.ServerState (*ServerCtrl)(nil), // 8: server.ServerCtrl (*ServerNotice)(nil), // 9: server.ServerNotice - (*WGCreateScene)(nil), // 10: server.WGCreateScene - (*WGDestroyScene)(nil), // 11: server.WGDestroyScene - (*GWDestroyScene)(nil), // 12: server.GWDestroyScene - (*RebateTask)(nil), // 13: server.RebateTask - (*WGPlayerEnter)(nil), // 14: server.WGPlayerEnter - (*WGAudienceSit)(nil), // 15: server.WGAudienceSit - (*WGPlayerReturn)(nil), // 16: server.WGPlayerReturn - (*GWPlayerLeave)(nil), // 17: server.GWPlayerLeave - (*WGPlayerDropLine)(nil), // 18: server.WGPlayerDropLine - (*WGPlayerRehold)(nil), // 19: server.WGPlayerRehold - (*GWBilledRoomCard)(nil), // 20: server.GWBilledRoomCard - (*GGPlayerSessionBind)(nil), // 21: server.GGPlayerSessionBind - (*GGPlayerSessionUnBind)(nil), // 22: server.GGPlayerSessionUnBind - (*WGDayTimeChange)(nil), // 23: server.WGDayTimeChange - (*ReplayPlayerData)(nil), // 24: server.ReplayPlayerData - (*ReplayRecord)(nil), // 25: server.ReplayRecord - (*ReplaySequene)(nil), // 26: server.ReplaySequene - (*GRReplaySequene)(nil), // 27: server.GRReplaySequene - (*WRLoginRec)(nil), // 28: server.WRLoginRec - (*WRGameDetail)(nil), // 29: server.WRGameDetail - (*WRPlayerData)(nil), // 30: server.WRPlayerData - (*WTPlayerPay)(nil), // 31: server.WTPlayerPay - (*PlayerGameRec)(nil), // 32: server.PlayerGameRec - (*GWGameRec)(nil), // 33: server.GWGameRec - (*GWSceneStart)(nil), // 34: server.GWSceneStart - (*PlayerCtx)(nil), // 35: server.PlayerCtx - (*FishRecord)(nil), // 36: server.FishRecord - (*GWFishRecord)(nil), // 37: server.GWFishRecord - (*GWSceneState)(nil), // 38: server.GWSceneState - (*WRInviteRobot)(nil), // 39: server.WRInviteRobot - (*WRInviteCreateRoom)(nil), // 40: server.WRInviteCreateRoom - (*WGAgentKickOutPlayer)(nil), // 41: server.WGAgentKickOutPlayer - (*WDDataAnalysis)(nil), // 42: server.WDDataAnalysis - (*PlayerCard)(nil), // 43: server.PlayerCard - (*GNPlayerCards)(nil), // 44: server.GNPlayerCards - (*RobotData)(nil), // 45: server.RobotData - (*GNPlayerParam)(nil), // 46: server.GNPlayerParam - (*GWRebuildScene)(nil), // 47: server.GWRebuildScene - (*WGRebindPlayerSnId)(nil), // 48: server.WGRebindPlayerSnId - (*GWPlayerFlag)(nil), // 49: server.GWPlayerFlag - (*WGHundredOp)(nil), // 50: server.WGHundredOp - (*GWNewNotice)(nil), // 51: server.GWNewNotice - (*PlayerStatics)(nil), // 52: server.PlayerStatics - (*GWPlayerStatics)(nil), // 53: server.GWPlayerStatics - (*WGResetCoinPool)(nil), // 54: server.WGResetCoinPool - (*WGSetPlayerBlackLevel)(nil), // 55: server.WGSetPlayerBlackLevel - (*GWAutoRelieveWBLevel)(nil), // 56: server.GWAutoRelieveWBLevel - (*GWScenePlayerLog)(nil), // 57: server.GWScenePlayerLog - (*GWPlayerForceLeave)(nil), // 58: server.GWPlayerForceLeave - (*PlayerData)(nil), // 59: server.PlayerData - (*GWPlayerData)(nil), // 60: server.GWPlayerData - (*PlayerWinScore)(nil), // 61: server.PlayerWinScore - (*GWPlayerWinScore)(nil), // 62: server.GWPlayerWinScore - (*WGPayerOnGameCount)(nil), // 63: server.WGPayerOnGameCount - (*GRGameFreeData)(nil), // 64: server.GRGameFreeData - (*WGSyncPlayerSafeBoxCoin)(nil), // 65: server.WGSyncPlayerSafeBoxCoin - (*WGClubMessage)(nil), // 66: server.WGClubMessage - (*DWThirdRebateMessage)(nil), // 67: server.DWThirdRebateMessage - (*DWThirdRoundMessage)(nil), // 68: server.DWThirdRoundMessage - (*WDACKThirdRebateMessage)(nil), // 69: server.WDACKThirdRebateMessage - (*GWGameStateLog)(nil), // 70: server.GWGameStateLog - (*GWGameState)(nil), // 71: server.GWGameState - (*GWGameJackList)(nil), // 72: server.GWGameJackList - (*GWGameJackCoin)(nil), // 73: server.GWGameJackCoin - (*WGNiceIdRebind)(nil), // 74: server.WGNiceIdRebind - (*PLAYERWINCOININFO)(nil), // 75: server.PLAYERWINCOININFO - (*GWPLAYERWINCOIN)(nil), // 76: server.GWPLAYERWINCOIN - (*GWPlayerAutoMarkTag)(nil), // 77: server.GWPlayerAutoMarkTag - (*WGInviteRobEnterCoinSceneQueue)(nil), // 78: server.WGInviteRobEnterCoinSceneQueue - (*WGGameForceStart)(nil), // 79: server.WGGameForceStart - (*ProfitControlGameCfg)(nil), // 80: server.ProfitControlGameCfg - (*ProfitControlPlatformCfg)(nil), // 81: server.ProfitControlPlatformCfg - (*WGProfitControlCorrect)(nil), // 82: server.WGProfitControlCorrect - (*GWChangeSceneEvent)(nil), // 83: server.GWChangeSceneEvent - (*PlayerIParam)(nil), // 84: server.PlayerIParam - (*PlayerSParam)(nil), // 85: server.PlayerSParam - (*PlayerCParam)(nil), // 86: server.PlayerCParam - (*PlayerMatchCoin)(nil), // 87: server.PlayerMatchCoin - (*GWPlayerMatchBilled)(nil), // 88: server.GWPlayerMatchBilled - (*GWPlayerMatchGrade)(nil), // 89: server.GWPlayerMatchGrade - (*WGPlayerQuitMatch)(nil), // 90: server.WGPlayerQuitMatch - (*WGSceneMatchBaseChange)(nil), // 91: server.WGSceneMatchBaseChange - (*SSRedirectToPlayer)(nil), // 92: server.SSRedirectToPlayer - (*WGInviteMatchRob)(nil), // 93: server.WGInviteMatchRob - (*GameInfo)(nil), // 94: server.GameInfo - (*WGGameJackpot)(nil), // 95: server.WGGameJackpot - (*BigWinHistoryInfo)(nil), // 96: server.BigWinHistoryInfo - (*WGPlayerEnterMiniGame)(nil), // 97: server.WGPlayerEnterMiniGame - (*WGPlayerLeaveMiniGame)(nil), // 98: server.WGPlayerLeaveMiniGame - (*WGPlayerLeave)(nil), // 99: server.WGPlayerLeave - (*GWPlayerLeaveMiniGame)(nil), // 100: server.GWPlayerLeaveMiniGame - (*GWDestroyMiniScene)(nil), // 101: server.GWDestroyMiniScene - (*GRDestroyScene)(nil), // 102: server.GRDestroyScene - (*RWAccountInvalid)(nil), // 103: server.RWAccountInvalid - (*WGDTRoomInfo)(nil), // 104: server.WGDTRoomInfo - (*PlayerDTCoin)(nil), // 105: server.PlayerDTCoin - (*EResult)(nil), // 106: server.EResult - (*GWDTRoomInfo)(nil), // 107: server.GWDTRoomInfo - (*WGRoomResults)(nil), // 108: server.WGRoomResults - (*GWRoomResults)(nil), // 109: server.GWRoomResults - (*GWAddSingleAdjust)(nil), // 110: server.GWAddSingleAdjust - (*WGSingleAdjust)(nil), // 111: server.WGSingleAdjust - (*WbCtrlCfg)(nil), // 112: server.WbCtrlCfg - (*WGBuyRecTimeItem)(nil), // 113: server.WGBuyRecTimeItem - (*WGUpdateSkin)(nil), // 114: server.WGUpdateSkin - nil, // 115: server.WGPlayerEnter.ItemsEntry - nil, // 116: server.WGPlayerEnter.RankScoreEntry - nil, // 117: server.GWPlayerLeave.ItemsEntry - nil, // 118: server.GWPlayerLeave.MatchRobotGradesEntry - nil, // 119: server.GWPlayerLeave.RankScoreEntry - (*DB_GameFree)(nil), // 120: server.DB_GameFree + (*Item)(nil), // 10: server.Item + (*WGCreateScene)(nil), // 11: server.WGCreateScene + (*WGDestroyScene)(nil), // 12: server.WGDestroyScene + (*GWDestroyScene)(nil), // 13: server.GWDestroyScene + (*RebateTask)(nil), // 14: server.RebateTask + (*WGPlayerEnter)(nil), // 15: server.WGPlayerEnter + (*WGAudienceSit)(nil), // 16: server.WGAudienceSit + (*WGPlayerReturn)(nil), // 17: server.WGPlayerReturn + (*GWPlayerLeave)(nil), // 18: server.GWPlayerLeave + (*WGPlayerDropLine)(nil), // 19: server.WGPlayerDropLine + (*WGPlayerRehold)(nil), // 20: server.WGPlayerRehold + (*GWBilledRoomCard)(nil), // 21: server.GWBilledRoomCard + (*GGPlayerSessionBind)(nil), // 22: server.GGPlayerSessionBind + (*GGPlayerSessionUnBind)(nil), // 23: server.GGPlayerSessionUnBind + (*WGDayTimeChange)(nil), // 24: server.WGDayTimeChange + (*ReplayPlayerData)(nil), // 25: server.ReplayPlayerData + (*ReplayRecord)(nil), // 26: server.ReplayRecord + (*ReplaySequene)(nil), // 27: server.ReplaySequene + (*GRReplaySequene)(nil), // 28: server.GRReplaySequene + (*WRLoginRec)(nil), // 29: server.WRLoginRec + (*WRGameDetail)(nil), // 30: server.WRGameDetail + (*WRPlayerData)(nil), // 31: server.WRPlayerData + (*WTPlayerPay)(nil), // 32: server.WTPlayerPay + (*PlayerGameRec)(nil), // 33: server.PlayerGameRec + (*GWGameRec)(nil), // 34: server.GWGameRec + (*GWSceneStart)(nil), // 35: server.GWSceneStart + (*PlayerCtx)(nil), // 36: server.PlayerCtx + (*FishRecord)(nil), // 37: server.FishRecord + (*GWFishRecord)(nil), // 38: server.GWFishRecord + (*GWSceneState)(nil), // 39: server.GWSceneState + (*WRInviteRobot)(nil), // 40: server.WRInviteRobot + (*WRInviteCreateRoom)(nil), // 41: server.WRInviteCreateRoom + (*WGAgentKickOutPlayer)(nil), // 42: server.WGAgentKickOutPlayer + (*WDDataAnalysis)(nil), // 43: server.WDDataAnalysis + (*PlayerCard)(nil), // 44: server.PlayerCard + (*GNPlayerCards)(nil), // 45: server.GNPlayerCards + (*RobotData)(nil), // 46: server.RobotData + (*GNPlayerParam)(nil), // 47: server.GNPlayerParam + (*GWRebuildScene)(nil), // 48: server.GWRebuildScene + (*WGRebindPlayerSnId)(nil), // 49: server.WGRebindPlayerSnId + (*GWPlayerFlag)(nil), // 50: server.GWPlayerFlag + (*WGHundredOp)(nil), // 51: server.WGHundredOp + (*GWNewNotice)(nil), // 52: server.GWNewNotice + (*PlayerStatics)(nil), // 53: server.PlayerStatics + (*GWPlayerStatics)(nil), // 54: server.GWPlayerStatics + (*WGResetCoinPool)(nil), // 55: server.WGResetCoinPool + (*WGSetPlayerBlackLevel)(nil), // 56: server.WGSetPlayerBlackLevel + (*GWAutoRelieveWBLevel)(nil), // 57: server.GWAutoRelieveWBLevel + (*GWScenePlayerLog)(nil), // 58: server.GWScenePlayerLog + (*GWPlayerForceLeave)(nil), // 59: server.GWPlayerForceLeave + (*PlayerData)(nil), // 60: server.PlayerData + (*GWPlayerData)(nil), // 61: server.GWPlayerData + (*PlayerWinScore)(nil), // 62: server.PlayerWinScore + (*GWPlayerWinScore)(nil), // 63: server.GWPlayerWinScore + (*WGPayerOnGameCount)(nil), // 64: server.WGPayerOnGameCount + (*GRGameFreeData)(nil), // 65: server.GRGameFreeData + (*WGSyncPlayerSafeBoxCoin)(nil), // 66: server.WGSyncPlayerSafeBoxCoin + (*WGClubMessage)(nil), // 67: server.WGClubMessage + (*DWThirdRebateMessage)(nil), // 68: server.DWThirdRebateMessage + (*DWThirdRoundMessage)(nil), // 69: server.DWThirdRoundMessage + (*WDACKThirdRebateMessage)(nil), // 70: server.WDACKThirdRebateMessage + (*GWGameStateLog)(nil), // 71: server.GWGameStateLog + (*GWGameState)(nil), // 72: server.GWGameState + (*GWGameJackList)(nil), // 73: server.GWGameJackList + (*GWGameJackCoin)(nil), // 74: server.GWGameJackCoin + (*WGNiceIdRebind)(nil), // 75: server.WGNiceIdRebind + (*PLAYERWINCOININFO)(nil), // 76: server.PLAYERWINCOININFO + (*GWPLAYERWINCOIN)(nil), // 77: server.GWPLAYERWINCOIN + (*GWPlayerAutoMarkTag)(nil), // 78: server.GWPlayerAutoMarkTag + (*WGInviteRobEnterCoinSceneQueue)(nil), // 79: server.WGInviteRobEnterCoinSceneQueue + (*WGGameForceStart)(nil), // 80: server.WGGameForceStart + (*ProfitControlGameCfg)(nil), // 81: server.ProfitControlGameCfg + (*ProfitControlPlatformCfg)(nil), // 82: server.ProfitControlPlatformCfg + (*WGProfitControlCorrect)(nil), // 83: server.WGProfitControlCorrect + (*GWChangeSceneEvent)(nil), // 84: server.GWChangeSceneEvent + (*PlayerIParam)(nil), // 85: server.PlayerIParam + (*PlayerSParam)(nil), // 86: server.PlayerSParam + (*PlayerCParam)(nil), // 87: server.PlayerCParam + (*PlayerMatchCoin)(nil), // 88: server.PlayerMatchCoin + (*GWPlayerMatchBilled)(nil), // 89: server.GWPlayerMatchBilled + (*GWPlayerMatchGrade)(nil), // 90: server.GWPlayerMatchGrade + (*WGPlayerQuitMatch)(nil), // 91: server.WGPlayerQuitMatch + (*WGSceneMatchBaseChange)(nil), // 92: server.WGSceneMatchBaseChange + (*SSRedirectToPlayer)(nil), // 93: server.SSRedirectToPlayer + (*WGInviteMatchRob)(nil), // 94: server.WGInviteMatchRob + (*GameInfo)(nil), // 95: server.GameInfo + (*WGGameJackpot)(nil), // 96: server.WGGameJackpot + (*BigWinHistoryInfo)(nil), // 97: server.BigWinHistoryInfo + (*WGPlayerEnterMiniGame)(nil), // 98: server.WGPlayerEnterMiniGame + (*WGPlayerLeaveMiniGame)(nil), // 99: server.WGPlayerLeaveMiniGame + (*WGPlayerLeave)(nil), // 100: server.WGPlayerLeave + (*GWPlayerLeaveMiniGame)(nil), // 101: server.GWPlayerLeaveMiniGame + (*GWDestroyMiniScene)(nil), // 102: server.GWDestroyMiniScene + (*GRDestroyScene)(nil), // 103: server.GRDestroyScene + (*RWAccountInvalid)(nil), // 104: server.RWAccountInvalid + (*WGDTRoomInfo)(nil), // 105: server.WGDTRoomInfo + (*PlayerDTCoin)(nil), // 106: server.PlayerDTCoin + (*EResult)(nil), // 107: server.EResult + (*GWDTRoomInfo)(nil), // 108: server.GWDTRoomInfo + (*WGRoomResults)(nil), // 109: server.WGRoomResults + (*GWRoomResults)(nil), // 110: server.GWRoomResults + (*GWAddSingleAdjust)(nil), // 111: server.GWAddSingleAdjust + (*WGSingleAdjust)(nil), // 112: server.WGSingleAdjust + (*WbCtrlCfg)(nil), // 113: server.WbCtrlCfg + (*WGBuyRecTimeItem)(nil), // 114: server.WGBuyRecTimeItem + (*WGUpdateSkin)(nil), // 115: server.WGUpdateSkin + (*PlayerChangeItems)(nil), // 116: server.PlayerChangeItems + nil, // 117: server.WGPlayerEnter.ItemsEntry + nil, // 118: server.WGPlayerEnter.RankScoreEntry + nil, // 119: server.GWPlayerLeave.ItemsEntry + nil, // 120: server.GWPlayerLeave.MatchRobotGradesEntry + nil, // 121: server.GWPlayerLeave.RankScoreEntry + (*DB_GameFree)(nil), // 122: server.DB_GameFree } var file_server_proto_depIdxs = []int32{ 1, // 0: server.SGBindGroupTag.Code:type_name -> server.SGBindGroupTag.OpCode 4, // 1: server.ServerCtrl.Params:type_name -> server.OpResultParam - 120, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree - 84, // 3: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam - 85, // 4: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam - 86, // 5: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam - 115, // 6: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry - 116, // 7: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry - 117, // 8: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry - 118, // 9: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry - 119, // 10: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry - 25, // 11: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord - 26, // 12: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene - 24, // 13: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData - 32, // 14: server.GWGameRec.Datas:type_name -> server.PlayerGameRec - 36, // 15: server.GWFishRecord.FishRecords:type_name -> server.FishRecord - 43, // 16: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard - 45, // 17: server.GNPlayerParam.Playerdata:type_name -> server.RobotData - 52, // 18: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics - 59, // 19: server.GWPlayerData.Datas:type_name -> server.PlayerData - 61, // 20: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore - 120, // 21: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree - 120, // 22: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree - 75, // 23: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO - 80, // 24: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg - 81, // 25: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg - 87, // 26: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin - 87, // 27: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin - 94, // 28: server.WGGameJackpot.Info:type_name -> server.GameInfo - 105, // 29: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin - 106, // 30: server.GWDTRoomInfo.Results:type_name -> server.EResult - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 122, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree + 10, // 3: server.WGCreateScene.Items:type_name -> server.Item + 85, // 4: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam + 86, // 5: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam + 87, // 6: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam + 117, // 7: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry + 118, // 8: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry + 119, // 9: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry + 120, // 10: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry + 121, // 11: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry + 26, // 12: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord + 27, // 13: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene + 25, // 14: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData + 33, // 15: server.GWGameRec.Datas:type_name -> server.PlayerGameRec + 37, // 16: server.GWFishRecord.FishRecords:type_name -> server.FishRecord + 44, // 17: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard + 46, // 18: server.GNPlayerParam.Playerdata:type_name -> server.RobotData + 53, // 19: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics + 60, // 20: server.GWPlayerData.Datas:type_name -> server.PlayerData + 62, // 21: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore + 122, // 22: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree + 122, // 23: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree + 76, // 24: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO + 81, // 25: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg + 82, // 26: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg + 88, // 27: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin + 88, // 28: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin + 95, // 29: server.WGGameJackpot.Info:type_name -> server.GameInfo + 106, // 30: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin + 107, // 31: server.GWDTRoomInfo.Results:type_name -> server.EResult + 10, // 32: server.PlayerChangeItems.Items:type_name -> server.Item + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -10146,7 +10284,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGCreateScene); i { + switch v := v.(*Item); i { case 0: return &v.state case 1: @@ -10158,7 +10296,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDestroyScene); i { + switch v := v.(*WGCreateScene); i { case 0: return &v.state case 1: @@ -10170,7 +10308,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyScene); i { + switch v := v.(*WGDestroyScene); i { case 0: return &v.state case 1: @@ -10182,7 +10320,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RebateTask); i { + switch v := v.(*GWDestroyScene); i { case 0: return &v.state case 1: @@ -10194,7 +10332,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnter); i { + switch v := v.(*RebateTask); i { case 0: return &v.state case 1: @@ -10206,7 +10344,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAudienceSit); i { + switch v := v.(*WGPlayerEnter); i { case 0: return &v.state case 1: @@ -10218,7 +10356,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerReturn); i { + switch v := v.(*WGAudienceSit); i { case 0: return &v.state case 1: @@ -10230,7 +10368,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeave); i { + switch v := v.(*WGPlayerReturn); i { case 0: return &v.state case 1: @@ -10242,7 +10380,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerDropLine); i { + switch v := v.(*GWPlayerLeave); i { case 0: return &v.state case 1: @@ -10254,7 +10392,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerRehold); i { + switch v := v.(*WGPlayerDropLine); i { case 0: return &v.state case 1: @@ -10266,7 +10404,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWBilledRoomCard); i { + switch v := v.(*WGPlayerRehold); i { case 0: return &v.state case 1: @@ -10278,7 +10416,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionBind); i { + switch v := v.(*GWBilledRoomCard); i { case 0: return &v.state case 1: @@ -10290,7 +10428,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionUnBind); i { + switch v := v.(*GGPlayerSessionBind); i { case 0: return &v.state case 1: @@ -10302,7 +10440,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDayTimeChange); i { + switch v := v.(*GGPlayerSessionUnBind); i { case 0: return &v.state case 1: @@ -10314,7 +10452,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayPlayerData); i { + switch v := v.(*WGDayTimeChange); i { case 0: return &v.state case 1: @@ -10326,7 +10464,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayRecord); i { + switch v := v.(*ReplayPlayerData); i { case 0: return &v.state case 1: @@ -10338,7 +10476,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaySequene); i { + switch v := v.(*ReplayRecord); i { case 0: return &v.state case 1: @@ -10350,7 +10488,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRReplaySequene); i { + switch v := v.(*ReplaySequene); i { case 0: return &v.state case 1: @@ -10362,7 +10500,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRLoginRec); i { + switch v := v.(*GRReplaySequene); i { case 0: return &v.state case 1: @@ -10374,7 +10512,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRGameDetail); i { + switch v := v.(*WRLoginRec); i { case 0: return &v.state case 1: @@ -10386,7 +10524,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRPlayerData); i { + switch v := v.(*WRGameDetail); i { case 0: return &v.state case 1: @@ -10398,7 +10536,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WTPlayerPay); i { + switch v := v.(*WRPlayerData); i { case 0: return &v.state case 1: @@ -10410,7 +10548,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { + switch v := v.(*WTPlayerPay); i { case 0: return &v.state case 1: @@ -10422,7 +10560,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameRec); i { + switch v := v.(*PlayerGameRec); i { case 0: return &v.state case 1: @@ -10434,7 +10572,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneStart); i { + switch v := v.(*GWGameRec); i { case 0: return &v.state case 1: @@ -10446,7 +10584,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCtx); i { + switch v := v.(*GWSceneStart); i { case 0: return &v.state case 1: @@ -10458,7 +10596,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FishRecord); i { + switch v := v.(*PlayerCtx); i { case 0: return &v.state case 1: @@ -10470,7 +10608,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWFishRecord); i { + switch v := v.(*FishRecord); i { case 0: return &v.state case 1: @@ -10482,7 +10620,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneState); i { + switch v := v.(*GWFishRecord); i { case 0: return &v.state case 1: @@ -10494,7 +10632,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteRobot); i { + switch v := v.(*GWSceneState); i { case 0: return &v.state case 1: @@ -10506,7 +10644,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteCreateRoom); i { + switch v := v.(*WRInviteRobot); i { case 0: return &v.state case 1: @@ -10518,7 +10656,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAgentKickOutPlayer); i { + switch v := v.(*WRInviteCreateRoom); i { case 0: return &v.state case 1: @@ -10530,7 +10668,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDDataAnalysis); i { + switch v := v.(*WGAgentKickOutPlayer); i { case 0: return &v.state case 1: @@ -10542,7 +10680,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCard); i { + switch v := v.(*WDDataAnalysis); i { case 0: return &v.state case 1: @@ -10554,7 +10692,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerCards); i { + switch v := v.(*PlayerCard); i { case 0: return &v.state case 1: @@ -10566,7 +10704,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RobotData); i { + switch v := v.(*GNPlayerCards); i { case 0: return &v.state case 1: @@ -10578,7 +10716,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerParam); i { + switch v := v.(*RobotData); i { case 0: return &v.state case 1: @@ -10590,7 +10728,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRebuildScene); i { + switch v := v.(*GNPlayerParam); i { case 0: return &v.state case 1: @@ -10602,7 +10740,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRebindPlayerSnId); i { + switch v := v.(*GWRebuildScene); i { case 0: return &v.state case 1: @@ -10614,7 +10752,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerFlag); i { + switch v := v.(*WGRebindPlayerSnId); i { case 0: return &v.state case 1: @@ -10626,7 +10764,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGHundredOp); i { + switch v := v.(*GWPlayerFlag); i { case 0: return &v.state case 1: @@ -10638,7 +10776,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWNewNotice); i { + switch v := v.(*WGHundredOp); i { case 0: return &v.state case 1: @@ -10650,7 +10788,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerStatics); i { + switch v := v.(*GWNewNotice); i { case 0: return &v.state case 1: @@ -10662,7 +10800,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerStatics); i { + switch v := v.(*PlayerStatics); i { case 0: return &v.state case 1: @@ -10674,7 +10812,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGResetCoinPool); i { + switch v := v.(*GWPlayerStatics); i { case 0: return &v.state case 1: @@ -10686,7 +10824,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSetPlayerBlackLevel); i { + switch v := v.(*WGResetCoinPool); i { case 0: return &v.state case 1: @@ -10698,7 +10836,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAutoRelieveWBLevel); i { + switch v := v.(*WGSetPlayerBlackLevel); i { case 0: return &v.state case 1: @@ -10710,7 +10848,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWScenePlayerLog); i { + switch v := v.(*GWAutoRelieveWBLevel); i { case 0: return &v.state case 1: @@ -10722,7 +10860,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerForceLeave); i { + switch v := v.(*GWScenePlayerLog); i { case 0: return &v.state case 1: @@ -10734,7 +10872,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerData); i { + switch v := v.(*GWPlayerForceLeave); i { case 0: return &v.state case 1: @@ -10746,7 +10884,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerData); i { + switch v := v.(*PlayerData); i { case 0: return &v.state case 1: @@ -10758,7 +10896,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerWinScore); i { + switch v := v.(*GWPlayerData); i { case 0: return &v.state case 1: @@ -10770,7 +10908,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerWinScore); i { + switch v := v.(*PlayerWinScore); i { case 0: return &v.state case 1: @@ -10782,7 +10920,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPayerOnGameCount); i { + switch v := v.(*GWPlayerWinScore); i { case 0: return &v.state case 1: @@ -10794,7 +10932,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRGameFreeData); i { + switch v := v.(*WGPayerOnGameCount); i { case 0: return &v.state case 1: @@ -10806,7 +10944,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSyncPlayerSafeBoxCoin); i { + switch v := v.(*GRGameFreeData); i { case 0: return &v.state case 1: @@ -10818,7 +10956,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGClubMessage); i { + switch v := v.(*WGSyncPlayerSafeBoxCoin); i { case 0: return &v.state case 1: @@ -10830,7 +10968,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRebateMessage); i { + switch v := v.(*WGClubMessage); i { case 0: return &v.state case 1: @@ -10842,7 +10980,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRoundMessage); i { + switch v := v.(*DWThirdRebateMessage); i { case 0: return &v.state case 1: @@ -10854,7 +10992,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDACKThirdRebateMessage); i { + switch v := v.(*DWThirdRoundMessage); i { case 0: return &v.state case 1: @@ -10866,7 +11004,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameStateLog); i { + switch v := v.(*WDACKThirdRebateMessage); i { case 0: return &v.state case 1: @@ -10878,7 +11016,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameState); i { + switch v := v.(*GWGameStateLog); i { case 0: return &v.state case 1: @@ -10890,7 +11028,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackList); i { + switch v := v.(*GWGameState); i { case 0: return &v.state case 1: @@ -10902,7 +11040,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackCoin); i { + switch v := v.(*GWGameJackList); i { case 0: return &v.state case 1: @@ -10914,7 +11052,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGNiceIdRebind); i { + switch v := v.(*GWGameJackCoin); i { case 0: return &v.state case 1: @@ -10926,7 +11064,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PLAYERWINCOININFO); i { + switch v := v.(*WGNiceIdRebind); i { case 0: return &v.state case 1: @@ -10938,7 +11076,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPLAYERWINCOIN); i { + switch v := v.(*PLAYERWINCOININFO); i { case 0: return &v.state case 1: @@ -10950,7 +11088,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerAutoMarkTag); i { + switch v := v.(*GWPLAYERWINCOIN); i { case 0: return &v.state case 1: @@ -10962,7 +11100,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { + switch v := v.(*GWPlayerAutoMarkTag); i { case 0: return &v.state case 1: @@ -10974,7 +11112,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameForceStart); i { + switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { case 0: return &v.state case 1: @@ -10986,7 +11124,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlGameCfg); i { + switch v := v.(*WGGameForceStart); i { case 0: return &v.state case 1: @@ -10998,7 +11136,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlPlatformCfg); i { + switch v := v.(*ProfitControlGameCfg); i { case 0: return &v.state case 1: @@ -11010,7 +11148,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGProfitControlCorrect); i { + switch v := v.(*ProfitControlPlatformCfg); i { case 0: return &v.state case 1: @@ -11022,7 +11160,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWChangeSceneEvent); i { + switch v := v.(*WGProfitControlCorrect); i { case 0: return &v.state case 1: @@ -11034,7 +11172,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerIParam); i { + switch v := v.(*GWChangeSceneEvent); i { case 0: return &v.state case 1: @@ -11046,7 +11184,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerSParam); i { + switch v := v.(*PlayerIParam); i { case 0: return &v.state case 1: @@ -11058,7 +11196,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCParam); i { + switch v := v.(*PlayerSParam); i { case 0: return &v.state case 1: @@ -11070,7 +11208,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerMatchCoin); i { + switch v := v.(*PlayerCParam); i { case 0: return &v.state case 1: @@ -11082,7 +11220,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchBilled); i { + switch v := v.(*PlayerMatchCoin); i { case 0: return &v.state case 1: @@ -11094,7 +11232,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchGrade); i { + switch v := v.(*GWPlayerMatchBilled); i { case 0: return &v.state case 1: @@ -11106,7 +11244,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerQuitMatch); i { + switch v := v.(*GWPlayerMatchGrade); i { case 0: return &v.state case 1: @@ -11118,7 +11256,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSceneMatchBaseChange); i { + switch v := v.(*WGPlayerQuitMatch); i { case 0: return &v.state case 1: @@ -11130,7 +11268,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SSRedirectToPlayer); i { + switch v := v.(*WGSceneMatchBaseChange); i { case 0: return &v.state case 1: @@ -11142,7 +11280,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteMatchRob); i { + switch v := v.(*SSRedirectToPlayer); i { case 0: return &v.state case 1: @@ -11154,7 +11292,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameInfo); i { + switch v := v.(*WGInviteMatchRob); i { case 0: return &v.state case 1: @@ -11166,7 +11304,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameJackpot); i { + switch v := v.(*GameInfo); i { case 0: return &v.state case 1: @@ -11178,7 +11316,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BigWinHistoryInfo); i { + switch v := v.(*WGGameJackpot); i { case 0: return &v.state case 1: @@ -11190,7 +11328,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnterMiniGame); i { + switch v := v.(*BigWinHistoryInfo); i { case 0: return &v.state case 1: @@ -11202,7 +11340,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerEnterMiniGame); i { case 0: return &v.state case 1: @@ -11214,7 +11352,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeave); i { + switch v := v.(*WGPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11226,7 +11364,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerLeave); i { case 0: return &v.state case 1: @@ -11238,7 +11376,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyMiniScene); i { + switch v := v.(*GWPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11250,7 +11388,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRDestroyScene); i { + switch v := v.(*GWDestroyMiniScene); i { case 0: return &v.state case 1: @@ -11262,7 +11400,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RWAccountInvalid); i { + switch v := v.(*GRDestroyScene); i { case 0: return &v.state case 1: @@ -11274,7 +11412,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDTRoomInfo); i { + switch v := v.(*RWAccountInvalid); i { case 0: return &v.state case 1: @@ -11286,7 +11424,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerDTCoin); i { + switch v := v.(*WGDTRoomInfo); i { case 0: return &v.state case 1: @@ -11298,7 +11436,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EResult); i { + switch v := v.(*PlayerDTCoin); i { case 0: return &v.state case 1: @@ -11310,7 +11448,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDTRoomInfo); i { + switch v := v.(*EResult); i { case 0: return &v.state case 1: @@ -11322,7 +11460,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRoomResults); i { + switch v := v.(*GWDTRoomInfo); i { case 0: return &v.state case 1: @@ -11334,7 +11472,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRoomResults); i { + switch v := v.(*WGRoomResults); i { case 0: return &v.state case 1: @@ -11346,7 +11484,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAddSingleAdjust); i { + switch v := v.(*GWRoomResults); i { case 0: return &v.state case 1: @@ -11358,7 +11496,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSingleAdjust); i { + switch v := v.(*GWAddSingleAdjust); i { case 0: return &v.state case 1: @@ -11370,7 +11508,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WbCtrlCfg); i { + switch v := v.(*WGSingleAdjust); i { case 0: return &v.state case 1: @@ -11382,7 +11520,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGBuyRecTimeItem); i { + switch v := v.(*WbCtrlCfg); i { case 0: return &v.state case 1: @@ -11394,6 +11532,18 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGBuyRecTimeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WGUpdateSkin); i { case 0: return &v.state @@ -11405,6 +11555,18 @@ func file_server_proto_init() { return nil } } + file_server_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlayerChangeItems); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -11412,7 +11574,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 2, - NumMessages: 118, + NumMessages: 120, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index 3f5d54b..6ef0c23 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -108,6 +108,7 @@ enum SSPacketID { PACKET_GW_ADDSINGLEADJUST = 1551; PACKET_WG_BUYRECTIMEITEM = 1552; PACKET_WG_UpdateSkin = 1553; // 修改皮肤id + PACKET_PlayerChangeItems = 1554; // 修改玩家道具数量 } //PACKET_SG_BINDGROUPTAG @@ -161,6 +162,11 @@ message ServerNotice { string Text = 1; } +message Item { + int32 Id = 1; + int64 Num = 2; +} + //PACKET_WG_CREATESCENE message WGCreateScene { int32 SceneId = 1; @@ -186,6 +192,7 @@ message WGCreateScene { int32 PlayerNum = 21; bool RealCtrl = 22; repeated int32 ChessRank = 23; + repeated Item Items = 24; // 奖励道具 } //PACKET_WG_DESTROYSCENE @@ -998,4 +1005,10 @@ message WGBuyRecTimeItem{ message WGUpdateSkin{ int32 SnId = 1; int32 Id = 2; // 皮肤id +} + +// PACKET_PlayerChangeItems +message PlayerChangeItems{ + int32 SnId = 1; + repeated Item Items = 2; // 道具变化数量 } \ No newline at end of file diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index ae02080..b8ef2e9 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -654,6 +654,13 @@ type SCTienLenRoomInfo struct { OutCardRecord []int32 `protobuf:"varint,30,rep,packed,name=OutCardRecord,proto3" json:"OutCardRecord,omitempty"` //已打出去的牌 IsOutRecord bool `protobuf:"varint,31,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` //是否能用记牌器 ItemRecExpireTime int64 `protobuf:"varint,32,opt,name=ItemRecExpireTime,proto3" json:"ItemRecExpireTime,omitempty"` //记牌器到期时间 + // 房卡场配置 + RoomTypeId int32 `protobuf:"varint,33,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,34,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + NeedPassword int32 `protobuf:"varint,35,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,36,opt,name=CostType,proto3" json:"CostType,omitempty"` //房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,37,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 + Password string `protobuf:"bytes,38,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } func (x *SCTienLenRoomInfo) Reset() { @@ -891,6 +898,48 @@ func (x *SCTienLenRoomInfo) GetItemRecExpireTime() int64 { return 0 } +func (x *SCTienLenRoomInfo) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + //房间状态更新 type SCTienLenRoomState struct { state protoimpl.MessageState @@ -2294,20 +2343,77 @@ func (x *SCTienLenPetSkillRes) GetPetSkillRes() bool { return false } +type ItemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 道具ID + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 道具数量 +} + +func (x *ItemInfo) Reset() { + *x = ItemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemInfo) ProtoMessage() {} + +func (x *ItemInfo) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItemInfo.ProtoReflect.Descriptor instead. +func (*ItemInfo) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{24} +} + +func (x *ItemInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ItemInfo) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + type TienLenCycleBilledInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID - RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 - Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 + Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 + Award []*ItemInfo `protobuf:"bytes,4,rep,name=Award,proto3" json:"Award,omitempty"` // 奖励道具 + TotalScore int64 `protobuf:"varint,5,opt,name=TotalScore,proto3" json:"TotalScore,omitempty"` // 总分 } func (x *TienLenCycleBilledInfo) Reset() { *x = TienLenCycleBilledInfo{} if protoimpl.UnsafeEnabled { - mi := &file_tienlen_proto_msgTypes[24] + mi := &file_tienlen_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2320,7 +2426,7 @@ func (x *TienLenCycleBilledInfo) String() string { func (*TienLenCycleBilledInfo) ProtoMessage() {} func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { - mi := &file_tienlen_proto_msgTypes[24] + mi := &file_tienlen_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2333,7 +2439,7 @@ func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TienLenCycleBilledInfo.ProtoReflect.Descriptor instead. func (*TienLenCycleBilledInfo) Descriptor() ([]byte, []int) { - return file_tienlen_proto_rawDescGZIP(), []int{24} + return file_tienlen_proto_rawDescGZIP(), []int{25} } func (x *TienLenCycleBilledInfo) GetSnId() int32 { @@ -2357,6 +2463,20 @@ func (x *TienLenCycleBilledInfo) GetScore() int64 { return 0 } +func (x *TienLenCycleBilledInfo) GetAward() []*ItemInfo { + if x != nil { + return x.Award + } + return nil +} + +func (x *TienLenCycleBilledInfo) GetTotalScore() int64 { + if x != nil { + return x.TotalScore + } + return 0 +} + // PACKET_SCTienLenCycleBilled type SCTienLenCycleBilled struct { state protoimpl.MessageState @@ -2369,7 +2489,7 @@ type SCTienLenCycleBilled struct { func (x *SCTienLenCycleBilled) Reset() { *x = SCTienLenCycleBilled{} if protoimpl.UnsafeEnabled { - mi := &file_tienlen_proto_msgTypes[25] + mi := &file_tienlen_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2382,7 +2502,7 @@ func (x *SCTienLenCycleBilled) String() string { func (*SCTienLenCycleBilled) ProtoMessage() {} func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { - mi := &file_tienlen_proto_msgTypes[25] + mi := &file_tienlen_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2395,7 +2515,7 @@ func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use SCTienLenCycleBilled.ProtoReflect.Descriptor instead. func (*SCTienLenCycleBilled) Descriptor() ([]byte, []int) { - return file_tienlen_proto_rawDescGZIP(), []int{25} + return file_tienlen_proto_rawDescGZIP(), []int{26} } func (x *SCTienLenCycleBilled) GetList() []*TienLenCycleBilledInfo { @@ -2479,7 +2599,7 @@ var file_tienlen_proto_rawDesc = []byte{ 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54, + 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xe1, 0x08, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, @@ -2538,255 +2658,273 @@ var file_tienlen_proto_rawDesc = []byte{ 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, - 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, - 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, - 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, - 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, - 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, - 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, - 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, - 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, - 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, - 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, - 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, - 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, - 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, - 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, - 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, - 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, - 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, - 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, - 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, - 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, + 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, + 0x69, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x26, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x42, 0x0a, 0x12, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, + 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, + 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, + 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, + 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, + 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, + 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, + 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, + 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, + 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, + 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, + 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, + 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, + 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, + 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x22, + 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, + 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, + 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, + 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, + 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, + 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, + 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, + 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, + 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, + 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, + 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, + 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, + 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, + 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, + 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, - 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, - 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, - 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, - 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, - 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, - 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, - 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, - 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x16, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x75, - 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x52, - 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, - 0x4b, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, - 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, - 0x0f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, - 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, - 0x64, 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, - 0x73, 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, - 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, - 0x86, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, - 0x10, 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, - 0x88, 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, - 0x6e, 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, - 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, + 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, + 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, + 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, + 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, + 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, + 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, + 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, + 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, + 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, + 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, + 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, + 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, + 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, + 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, + 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, + 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, + 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, + 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, + 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, + 0xab, 0x01, 0x0a, 0x16, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x4b, 0x0a, + 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, 0x0f, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, + 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, + 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x10, + 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, + 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, + 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, + 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, 0x2a, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x87, + 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, 0x2a, + 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, + 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, + 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, - 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, 0x2a, 0x42, + 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2802,7 +2940,7 @@ func file_tienlen_proto_rawDescGZIP() []byte { } var file_tienlen_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_tienlen_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: tienlen.OpResultCode (TienLenPacketID)(0), // 1: tienlen.TienLenPacketID @@ -2830,13 +2968,14 @@ var file_tienlen_proto_goTypes = []interface{}{ (*SCTienLenPlayerThinkLongCnt)(nil), // 23: tienlen.SCTienLenPlayerThinkLongCnt (*SCTienLenPlayerFirstGiveItemItem)(nil), // 24: tienlen.SCTienLenPlayerFirstGiveItemItem (*SCTienLenPetSkillRes)(nil), // 25: tienlen.SCTienLenPetSkillRes - (*TienLenCycleBilledInfo)(nil), // 26: tienlen.TienLenCycleBilledInfo - (*SCTienLenCycleBilled)(nil), // 27: tienlen.SCTienLenCycleBilled - nil, // 28: tienlen.TienLenPlayerData.ItemsEntry - nil, // 29: tienlen.SCTienLenCardTest.GradesEntry + (*ItemInfo)(nil), // 26: tienlen.ItemInfo + (*TienLenCycleBilledInfo)(nil), // 27: tienlen.TienLenCycleBilledInfo + (*SCTienLenCycleBilled)(nil), // 28: tienlen.SCTienLenCycleBilled + nil, // 29: tienlen.TienLenPlayerData.ItemsEntry + nil, // 30: tienlen.SCTienLenCardTest.GradesEntry } var file_tienlen_proto_depIdxs = []int32{ - 28, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry + 29, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry 3, // 1: tienlen.TienLenPlayerData.SkillInfo:type_name -> tienlen.PetSkillInfo 4, // 2: tienlen.PetSkillInfo.SkillData:type_name -> tienlen.SkillInfo 2, // 3: tienlen.SCTienLenRoomInfo.Players:type_name -> tienlen.TienLenPlayerData @@ -2845,13 +2984,14 @@ var file_tienlen_proto_depIdxs = []int32{ 2, // 6: tienlen.SCTienLenPlayerEnter.Data:type_name -> tienlen.TienLenPlayerData 12, // 7: tienlen.TienLenPlayerGameBilled.AddItems:type_name -> tienlen.AddItem 13, // 8: tienlen.SCTienLenGameBilled.Datas:type_name -> tienlen.TienLenPlayerGameBilled - 29, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry - 26, // 10: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 30, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry + 26, // 10: tienlen.TienLenCycleBilledInfo.Award:type_name -> tienlen.ItemInfo + 27, // 11: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_tienlen_proto_init() } @@ -3149,7 +3289,7 @@ func file_tienlen_proto_init() { } } file_tienlen_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TienLenCycleBilledInfo); i { + switch v := v.(*ItemInfo); i { case 0: return &v.state case 1: @@ -3161,6 +3301,18 @@ func file_tienlen_proto_init() { } } file_tienlen_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TienLenCycleBilledInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tienlen_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCTienLenCycleBilled); i { case 0: return &v.state @@ -3179,7 +3331,7 @@ func file_tienlen_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tienlen_proto_rawDesc, NumEnums: 2, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index 57b169c..49568e2 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -117,6 +117,14 @@ message SCTienLenRoomInfo { repeated int32 OutCardRecord = 30 ;//已打出去的牌 bool IsOutRecord = 31;//是否能用记牌器 int64 ItemRecExpireTime = 32; //记牌器到期时间 + // 房卡场配置 + int32 RoomTypeId = 33; //房间类型id + int32 RoomConfigId = 34; //房间配置id + int32 NeedPassword = 35; //是否需要密码 1需要 + int32 CostType = 36; //房卡支付方式 1AA 2房主 + int32 Voice = 37; //是否开启语音 1开启 + string Password = 38; //房间密码 + // 房卡场配置 } //房间状态更新 @@ -268,11 +276,17 @@ message SCTienLenPetSkillRes{ bool PetSkillRes = 3; //true生效 } +message ItemInfo { + int32 Id = 1; // 道具ID + int64 Num = 2; // 道具数量 +} + message TienLenCycleBilledInfo { int32 SnId = 1; // 玩家ID repeated int64 RoundScore = 2; // 每轮得分 int64 Score = 3; // 基础分 - // 总积分 = RoundScore + Score + repeated ItemInfo Award = 4; // 奖励道具 + int64 TotalScore = 5; // 总分 } // PACKET_SCTienLenCycleBilled diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index d672d3c..a284f6a 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -1904,24 +1904,30 @@ type RoomInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` - SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` //场景id - GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id - GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 - SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` //房间模式,参考common.SceneMode_XXX - GroupId int32 `protobuf:"varint,6,opt,name=GroupId,proto3" json:"GroupId,omitempty"` //组id - GameFreeId int32 `protobuf:"varint,7,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - SrvId int32 `protobuf:"varint,8,opt,name=SrvId,proto3" json:"SrvId,omitempty"` //服务器id - Creator int32 `protobuf:"varint,9,opt,name=Creator,proto3" json:"Creator,omitempty"` //创建者账号id - Agentor int32 `protobuf:"varint,10,opt,name=Agentor,proto3" json:"Agentor,omitempty"` //代理者id - ReplayCode string `protobuf:"bytes,11,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` //回放码 - Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场景参数 - PlayerIds []int32 `protobuf:"varint,13,rep,packed,name=PlayerIds,proto3" json:"PlayerIds,omitempty"` //所有玩家id - PlayerCnt int32 `protobuf:"varint,14,opt,name=PlayerCnt,proto3" json:"PlayerCnt,omitempty"` //玩家数量 - RobotCnt int32 `protobuf:"varint,15,opt,name=RobotCnt,proto3" json:"RobotCnt,omitempty"` //AI数量 - Start int32 `protobuf:"varint,16,opt,name=Start,proto3" json:"Start,omitempty"` //0.等待 1.游戏中 - CreateTime int64 `protobuf:"varint,17,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间 - BaseScore int32 `protobuf:"varint,18,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` //底分 + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` //房间id + GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 + SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` //房间模式,参考common.SceneMode_XXX + GroupId int32 `protobuf:"varint,6,opt,name=GroupId,proto3" json:"GroupId,omitempty"` //组id + GameFreeId int32 `protobuf:"varint,7,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + SrvId int32 `protobuf:"varint,8,opt,name=SrvId,proto3" json:"SrvId,omitempty"` //服务器id + Creator int32 `protobuf:"varint,9,opt,name=Creator,proto3" json:"Creator,omitempty"` //创建者账号id + Agentor int32 `protobuf:"varint,10,opt,name=Agentor,proto3" json:"Agentor,omitempty"` //代理者id + ReplayCode string `protobuf:"bytes,11,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` //回放码 + Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场景参数 + PlayerIds []int32 `protobuf:"varint,13,rep,packed,name=PlayerIds,proto3" json:"PlayerIds,omitempty"` //所有玩家id + PlayerCnt int32 `protobuf:"varint,14,opt,name=PlayerCnt,proto3" json:"PlayerCnt,omitempty"` //玩家数量 + RobotCnt int32 `protobuf:"varint,15,opt,name=RobotCnt,proto3" json:"RobotCnt,omitempty"` //AI数量 + Start int32 `protobuf:"varint,16,opt,name=Start,proto3" json:"Start,omitempty"` //0.等待 1.游戏中 + CreateTime int64 `protobuf:"varint,17,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间 + BaseScore int32 `protobuf:"varint,18,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` //底分 + RoomConfigId int32 `protobuf:"varint,19,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + CurrRound int32 `protobuf:"varint,20,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前局数 + MaxRound int32 `protobuf:"varint,21,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最大局数 + Password string `protobuf:"bytes,22,opt,name=Password,proto3" json:"Password,omitempty"` // 密码 + CostType int32 `protobuf:"varint,23,opt,name=CostType,proto3" json:"CostType,omitempty"` // 付费方式 1房主 2AA + Voice int32 `protobuf:"varint,24,opt,name=Voice,proto3" json:"Voice,omitempty"` // 语音开关 1开启 } func (x *RoomInfo) Reset() { @@ -2082,6 +2088,48 @@ func (x *RoomInfo) GetBaseScore() int32 { return 0 } +func (x *RoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *RoomInfo) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *RoomInfo) GetMaxRound() int32 { + if x != nil { + return x.MaxRound + } + return 0 +} + +func (x *RoomInfo) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *RoomInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + type PlayerSingleAdjust struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8888,7 +8936,7 @@ var file_common_proto_rawDesc = []byte{ 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0xfa, 0x03, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0xa6, 0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, @@ -8920,943 +8968,954 @@ var file_common_proto_rawDesc = []byte{ 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x22, 0xb4, 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, - 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x42, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, - 0x65, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, - 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x42, 0x61, - 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x42, - 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, - 0x64, 0x4d, 0x61, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, - 0x4d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x72, 0x76, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x72, 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x72, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xfd, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x69, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x51, 0x75, 0x44, 0x75, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, - 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, - 0x61, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, - 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, - 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x43, - 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x74, 0x72, 0x6c, - 0x52, 0x61, 0x74, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x74, 0x72, 0x6c, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, - 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x49, - 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x44, 0x65, 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x44, 0x65, 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0xf5, 0x02, 0x0a, 0x0d, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x52, 0x61, 0x63, 0x65, 0x4c, 0x61, - 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, - 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x0d, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x63, 0x22, 0x39, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, - 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x43, 0x6e, 0x74, 0x22, 0xe5, 0x02, 0x0a, 0x0c, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, - 0x12, 0x2a, 0x0a, 0x10, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x41, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, - 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, - 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x13, - 0x54, 0x6f, 0x64, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x54, 0x6f, 0x64, 0x61, 0x79, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x36, - 0x0a, 0x16, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, - 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, - 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9a, 0x03, 0x0a, 0x0c, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, - 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, - 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x9b, 0x04, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, - 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x2c, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4e, 0x6f, 0x74, 0x56, - 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4e, 0x6f, 0x74, 0x56, - 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, - 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, - 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2a, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, - 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x83, - 0x05, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x41, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x41, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, - 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, - 0x07, 0x41, 0x64, 0x64, 0x41, 0x72, 0x65, 0x61, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, - 0x41, 0x64, 0x64, 0x41, 0x72, 0x65, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x72, 0x65, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x08, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x72, 0x65, 0x61, 0x12, 0x31, 0x0a, 0x05, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x18, - 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x46, - 0x69, 0x72, 0x73, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0c, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x50, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, - 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, - 0x6d, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb1, 0x07, 0x0a, 0x0d, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, - 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x53, 0x69, 0x67, - 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x53, - 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, - 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x0e, 0x53, 0x69, 0x67, - 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x12, - 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x48, 0x4d, 0x53, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, 0x12, 0x28, 0x0a, - 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, - 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, - 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, - 0x5a, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x64, 0x0a, 0x0b, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, - 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, - 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, - 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, - 0x61, 0x74, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x18, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, - 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x30, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, - 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, - 0x74, 0x65, 0x52, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x22, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, - 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, - 0x12, 0x31, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, - 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, - 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, - 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, - 0x0a, 0x10, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, - 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, - 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, - 0x74, 0x65, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, - 0x44, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x52, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, - 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, - 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, - 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, - 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x22, 0xdb, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, - 0x5f, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, - 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x8d, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0xb4, + 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, + 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, - 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, - 0xa8, 0x01, 0x0a, 0x1c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, - 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, - 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, - 0x49, 0x50, 0x63, 0x66, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x56, 0x69, 0x70, 0x45, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, - 0x45, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x38, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, - 0x69, 0x6e, 0x65, 0x49, 0x44, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, - 0x37, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, - 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, - 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, + 0x4d, 0x61, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x61, + 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x65, 0x4d, + 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, + 0x4c, 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x61, 0x6e, 0x6b, 0x65, + 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x42, + 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, + 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, + 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x78, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x78, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x57, + 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, + 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, + 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x72, 0x76, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x22, 0xfd, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x6e, + 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x49, + 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, 0x77, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x6f, + 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, 0x44, 0x75, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, 0x0a, 0x09, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1c, + 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, + 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x50, 0x6f, + 0x6f, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, + 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, + 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x4e, 0x6f, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x65, + 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x65, + 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x69, + 0x66, 0x74, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x47, 0x69, 0x66, 0x74, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xf5, 0x02, 0x0a, + 0x0d, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x52, 0x61, 0x63, 0x65, 0x4c, 0x61, 0x6d, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x6f, + 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x46, 0x6f, 0x6f, 0x74, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x53, 0x65, 0x63, 0x22, 0x39, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x22, + 0xe5, 0x02, 0x0a, 0x0c, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, + 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6f, 0x73, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, + 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, + 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x54, 0x6f, 0x64, 0x61, + 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x54, 0x6f, 0x64, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, + 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x53, 0x65, 0x76, 0x65, + 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x52, 0x09, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, + 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x4c, 0x6f, + 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, + 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, + 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x55, 0x72, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x9b, + 0x04, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x44, + 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x2c, 0x0a, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x56, 0x69, 0x70, + 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x4e, + 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, + 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x56, 0x69, 0x70, + 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, + 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x11, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, + 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x54, 0x65, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x0d, + 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x55, 0x72, 0x6c, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x43, 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x2a, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6c, 0x0a, 0x0a, + 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, + 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, + 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x83, 0x05, 0x0a, 0x08, 0x49, + 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x41, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x41, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, + 0x41, 0x72, 0x65, 0x61, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x41, 0x64, 0x64, 0x41, + 0x72, 0x65, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x41, 0x72, 0x65, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x41, 0x72, 0x65, 0x61, 0x12, 0x31, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x56, 0x69, 0x70, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, 0x69, 0x70, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x72, 0x73, 0x74, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x46, 0x69, 0x72, 0x73, 0x74, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x70, 0x0a, 0x0e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, - 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, - 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, - 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, - 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x22, 0x64, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, - 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, - 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x22, 0x50, 0x0a, 0x0c, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, + 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0x50, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, + 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, + 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x6f, 0x77, + 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x44, 0x6f, + 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb1, 0x07, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x75, + 0x6d, 0x65, 0x62, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x12, 0x2c, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x26, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, + 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, + 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, + 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, 0x12, 0x28, 0x0a, 0x0f, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, + 0x48, 0x4d, 0x53, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x54, + 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, + 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x53, 0x68, 0x6f, 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x17, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4e, 0x75, 0x6d, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x41, 0x75, 0x64, + 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x5a, 0x0a, 0x11, 0x47, + 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, - 0xb4, 0x03, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, - 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, - 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, - 0x44, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, - 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, - 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, - 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, - 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, - 0x79, 0x55, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, - 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xc8, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, + 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, - 0x6e, 0x48, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, - 0x75, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, - 0x20, 0x0a, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x22, 0x4f, 0x0a, 0x19, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, - 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x22, 0x4a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x0b, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, + 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, + 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, + 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, + 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x52, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x74, 0x65, 0x22, + 0xba, 0x01, 0x0a, 0x18, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, + 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, + 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x61, 0x0a, 0x10, + 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x12, 0x31, 0x0a, 0x09, + 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x22, + 0x48, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, 0x0a, 0x10, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, + 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x41, 0x64, 0x64, + 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, + 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, 0x44, 0x0a, 0x10, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, + 0x32, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, + 0xdb, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, + 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xa3, 0x01, + 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, + 0x78, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x69, + 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, + 0x70, 0x72, 0x65, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x56, 0x49, 0x50, 0x45, 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, + 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x17, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x1c, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, + 0x73, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, + 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, + 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, + 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, 0x49, 0x50, 0x63, 0x66, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x45, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x45, 0x78, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x33, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x37, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x50, + 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x12, 0x28, + 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, + 0x44, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, + 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, + 0x49, 0x64, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, + 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x12, 0x26, 0x0a, 0x0e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x39, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x39, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, + 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, + 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, + 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0e, 0x56, + 0x49, 0x50, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x95, 0x01, + 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x64, + 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x49, + 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, + 0x49, 0x74, 0x65, 0x6d, 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, + 0x6b, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xb4, 0x03, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x6f, 0x77, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, 0x44, 0x75, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, + 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, + 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x18, + 0x0a, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x69, 0x67, 0x68, + 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x69, 0x67, + 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x12, 0x18, 0x0a, 0x07, + 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, + 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, + 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x69, 0x61, 0x6e, + 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x22, 0xc8, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x12, 0x14, 0x0a, + 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, + 0x69, 0x4b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x46, + 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x22, 0x4f, 0x0a, + 0x19, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, + 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, - 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, - 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, - 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, - 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, - 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x32, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, - 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, - 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, - 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, - 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, - 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, - 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, - 0x61, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, - 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, - 0x65, 0x22, 0x68, 0x0a, 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, - 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, - 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, - 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x22, 0x70, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x4a, + 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, 0x0a, 0x13, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, + 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x41, + 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, + 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, + 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x41, + 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x31, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x31, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, + 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x11, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, - 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, - 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, - 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x22, 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, + 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x64, 0x0a, 0x10, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, - 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x35, 0x0a, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x2e, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x39, 0x0a, 0x0b, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 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, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, - 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, - 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, - 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, - 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, - 0x72, 0x61, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, - 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, 0x61, 0x79, 0x73, 0x12, + 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x22, 0x68, 0x0a, + 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, + 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x70, 0x0a, 0x14, + 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x53, + 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x61, + 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, + 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x4f, + 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, + 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, + 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x35, 0x0a, 0x06, 0x55, + 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x55, + 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x55, 0x70, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x39, 0x0a, 0x0b, + 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6e, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x55, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x49, 0x73, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, + 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, + 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, + 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, 0x47, 0x75, 0x69, 0x64, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, + 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, - 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, - 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, - 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, - 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, - 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, - 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, - 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, - 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, - 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, - 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, - 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, + 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index f02ef15..81526a1 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -225,12 +225,12 @@ message ModInfo { message RoomInfo{ string Platform = 1; - int32 SceneId = 2;//场景id + int32 SceneId = 2;//房间id int32 GameId = 3;//游戏id int32 GameMode = 4;//游戏模式 int32 SceneMode = 5;//房间模式,参考common.SceneMode_XXX int32 GroupId = 6;//组id - int32 GameFreeId = 7; + int32 GameFreeId = 7; // 场次id int32 SrvId = 8;//服务器id int32 Creator = 9;//创建者账号id int32 Agentor = 10;//代理者id @@ -242,7 +242,14 @@ message RoomInfo{ int32 Start = 16;//0.等待 1.游戏中 int64 CreateTime = 17;//创建时间 int32 BaseScore = 18;//底分 + int32 RoomConfigId = 19;//房间配置id + int32 CurrRound = 20;//当前局数 + int32 MaxRound = 21;//最大局数 + string Password = 22;// 密码 + int32 CostType = 23;// 付费方式 1房主 2AA + int32 Voice = 24;// 语音开关 1开启 } + message PlayerSingleAdjust{ string Id = 1; string Platform = 2; diff --git a/protocol/webapi/webapi.pb.go b/protocol/webapi/webapi.pb.go index 3182d25..2480f77 100644 --- a/protocol/webapi/webapi.pb.go +++ b/protocol/webapi/webapi.pb.go @@ -37,6 +37,7 @@ const ( TagCode_TelExist TagCode = 9 // 手机号已存在 TagCode_AccountNotFound TagCode = 10 // 账号未找到 TagCode_TelNotBind TagCode = 11 // 手机号未绑定 + TagCode_NotFound TagCode = 12 // 未找到 ) // Enum value maps for TagCode. @@ -54,6 +55,7 @@ var ( 9: "TelExist", 10: "AccountNotFound", 11: "TelNotBind", + 12: "NotFound", } TagCode_value = map[string]int32{ "UNKNOWN": 0, @@ -68,6 +70,7 @@ var ( "TelExist": 9, "AccountNotFound": 10, "TelNotBind": 11, + "NotFound": 12, } ) @@ -1804,17 +1807,19 @@ type ASListRoom struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - GroupId int32 `protobuf:"varint,4,opt,name=GroupId,proto3" json:"GroupId,omitempty"` - SnId int32 `protobuf:"varint,5,opt,name=SnId,proto3" json:"SnId,omitempty"` - SceneId int32 `protobuf:"varint,6,opt,name=SceneId,proto3" json:"SceneId,omitempty"` - PageNo int32 `protobuf:"varint,7,opt,name=PageNo,proto3" json:"PageNo,omitempty"` - PageSize int32 `protobuf:"varint,8,opt,name=PageSize,proto3" json:"PageSize,omitempty"` - ClubId int32 `protobuf:"varint,9,opt,name=ClubId,proto3" json:"ClubId,omitempty"` - RoomType int32 `protobuf:"varint,10,opt,name=RoomType,proto3" json:"RoomType,omitempty"` //roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 - GamefreeId int32 `protobuf:"varint,11,opt,name=GamefreeId,proto3" json:"GamefreeId,omitempty"` + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` + GroupId int32 `protobuf:"varint,4,opt,name=GroupId,proto3" json:"GroupId,omitempty"` + SnId int32 `protobuf:"varint,5,opt,name=SnId,proto3" json:"SnId,omitempty"` + SceneId int32 `protobuf:"varint,6,opt,name=SceneId,proto3" json:"SceneId,omitempty"` + PageNo int32 `protobuf:"varint,7,opt,name=PageNo,proto3" json:"PageNo,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=PageSize,proto3" json:"PageSize,omitempty"` + ClubId int32 `protobuf:"varint,9,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + RoomType int32 `protobuf:"varint,10,opt,name=RoomType,proto3" json:"RoomType,omitempty"` //roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 + GamefreeId int32 `protobuf:"varint,11,opt,name=GamefreeId,proto3" json:"GamefreeId,omitempty"` + IsCustom int32 `protobuf:"varint,12,opt,name=IsCustom,proto3" json:"IsCustom,omitempty"` // 房卡场 1是 + RoomConfigId int32 `protobuf:"varint,13,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` // 房间玩法id } func (x *ASListRoom) Reset() { @@ -1926,6 +1931,20 @@ func (x *ASListRoom) GetGamefreeId() int32 { return 0 } +func (x *ASListRoom) GetIsCustom() int32 { + if x != nil { + return x.IsCustom + } + return 0 +} + +func (x *ASListRoom) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + type SAListRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -9153,6 +9172,196 @@ func (x *WindowsInfo) GetGainNum() int32 { return 0 } +// 获取对局详情 /api/game/room_info +type ASRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id +} + +func (x *ASRoomInfo) Reset() { + *x = ASRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[134] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ASRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ASRoomInfo) ProtoMessage() {} + +func (x *ASRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[134] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ASRoomInfo.ProtoReflect.Descriptor instead. +func (*ASRoomInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{134} +} + +func (x *ASRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +type RoundInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Round int32 `protobuf:"varint,1,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` //结束时间 + Score []int64 `protobuf:"varint,3,rep,packed,name=Score,proto3" json:"Score,omitempty"` //分数 + LogId string `protobuf:"bytes,4,opt,name=LogId,proto3" json:"LogId,omitempty"` // 牌局记录id +} + +func (x *RoundInfo) Reset() { + *x = RoundInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoundInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoundInfo) ProtoMessage() {} + +func (x *RoundInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[135] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoundInfo.ProtoReflect.Descriptor instead. +func (*RoundInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{135} +} + +func (x *RoundInfo) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *RoundInfo) GetTs() int64 { + if x != nil { + return x.Ts + } + return 0 +} + +func (x *RoundInfo) GetScore() []int64 { + if x != nil { + return x.Score + } + return nil +} + +func (x *RoundInfo) GetLogId() string { + if x != nil { + return x.LogId + } + return "" +} + +type SARoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tag TagCode `protobuf:"varint,1,opt,name=Tag,proto3,enum=webapi.TagCode" json:"Tag,omitempty"` //错误码 + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` //错误信息 + SnId []int32 `protobuf:"varint,3,rep,packed,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + List []*RoundInfo `protobuf:"bytes,4,rep,name=List,proto3" json:"List,omitempty"` // 每局结算 +} + +func (x *SARoomInfo) Reset() { + *x = SARoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SARoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SARoomInfo) ProtoMessage() {} + +func (x *SARoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[136] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SARoomInfo.ProtoReflect.Descriptor instead. +func (*SARoomInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{136} +} + +func (x *SARoomInfo) GetTag() TagCode { + if x != nil { + return x.Tag + } + return TagCode_UNKNOWN +} + +func (x *SARoomInfo) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *SARoomInfo) GetSnId() []int32 { + if x != nil { + return x.SnId + } + return nil +} + +func (x *SARoomInfo) GetList() []*RoundInfo { + if x != nil { + return x.List + } + return nil +} + var File_webapi_proto protoreflect.FileDescriptor var file_webapi_proto_rawDesc = []byte{ @@ -9344,7 +9553,7 @@ var file_webapi_proto_rawDesc = []byte{ 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xac, 0x02, 0x0a, 0x0a, 0x41, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xec, 0x02, 0x0a, 0x0a, 0x41, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, @@ -9363,7 +9572,11 @@ var file_webapi_proto_rawDesc = []byte{ 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x0a, 0x53, 0x41, + 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x73, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x0a, 0x53, 0x41, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, @@ -10141,23 +10354,40 @@ var file_webapi_proto_rawDesc = []byte{ 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x2a, 0xce, 0x01, 0x0a, - 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, - 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, - 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, - 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, - 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, - 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x42, 0x26, 0x5a, - 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x24, 0x0a, 0x0a, + 0x41, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, + 0x6f, 0x67, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, + 0x64, 0x22, 0x7c, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, + 0xdc, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, + 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, + 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, + 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, + 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, + 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, + 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0c, 0x42, 0x26, + 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10173,7 +10403,7 @@ func file_webapi_proto_rawDescGZIP() []byte { } var file_webapi_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 134) +var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 137) var file_webapi_proto_goTypes = []interface{}{ (TagCode)(0), // 0: webapi.TagCode (*SAPlatformInfo)(nil), // 1: webapi.SAPlatformInfo @@ -10310,93 +10540,96 @@ var file_webapi_proto_goTypes = []interface{}{ (*ASPopUpWindowsConfig)(nil), // 132: webapi.ASPopUpWindowsConfig (*SAPopUpWindowsConfig)(nil), // 133: webapi.SAPopUpWindowsConfig (*WindowsInfo)(nil), // 134: webapi.WindowsInfo - (*Platform)(nil), // 135: webapi.Platform - (*PlatformGameConfig)(nil), // 136: webapi.PlatformGameConfig - (*GameConfigGroup)(nil), // 137: webapi.GameConfigGroup - (*GameConfigGlobal)(nil), // 138: webapi.GameConfigGlobal - (*PlatformDbConfig)(nil), // 139: webapi.PlatformDbConfig - (*CoinPoolSetting)(nil), // 140: webapi.CoinPoolSetting - (*RoomInfo)(nil), // 141: webapi.RoomInfo - (*PlayerSingleAdjust)(nil), // 142: webapi.PlayerSingleAdjust - (*PlayerData)(nil), // 143: webapi.PlayerData - (*HorseRaceLamp)(nil), // 144: webapi.HorseRaceLamp - (*MessageInfo)(nil), // 145: webapi.MessageInfo - (*ServerInfo)(nil), // 146: webapi.ServerInfo - (*OnlineReport)(nil), // 147: webapi.OnlineReport - (*ItemInfo)(nil), // 148: webapi.ItemInfo - (*ExchangeShop)(nil), // 149: webapi.ExchangeShop - (*ShopWeight)(nil), // 150: webapi.ShopWeight + (*ASRoomInfo)(nil), // 135: webapi.ASRoomInfo + (*RoundInfo)(nil), // 136: webapi.RoundInfo + (*SARoomInfo)(nil), // 137: webapi.SARoomInfo + (*Platform)(nil), // 138: webapi.Platform + (*PlatformGameConfig)(nil), // 139: webapi.PlatformGameConfig + (*GameConfigGroup)(nil), // 140: webapi.GameConfigGroup + (*GameConfigGlobal)(nil), // 141: webapi.GameConfigGlobal + (*PlatformDbConfig)(nil), // 142: webapi.PlatformDbConfig + (*CoinPoolSetting)(nil), // 143: webapi.CoinPoolSetting + (*RoomInfo)(nil), // 144: webapi.RoomInfo + (*PlayerSingleAdjust)(nil), // 145: webapi.PlayerSingleAdjust + (*PlayerData)(nil), // 146: webapi.PlayerData + (*HorseRaceLamp)(nil), // 147: webapi.HorseRaceLamp + (*MessageInfo)(nil), // 148: webapi.MessageInfo + (*ServerInfo)(nil), // 149: webapi.ServerInfo + (*OnlineReport)(nil), // 150: webapi.OnlineReport + (*ItemInfo)(nil), // 151: webapi.ItemInfo + (*ExchangeShop)(nil), // 152: webapi.ExchangeShop + (*ShopWeight)(nil), // 153: webapi.ShopWeight } var file_webapi_proto_depIdxs = []int32{ 0, // 0: webapi.ASPlatformInfo.Tag:type_name -> webapi.TagCode - 135, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform + 138, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform 0, // 2: webapi.ASGameConfig.Tag:type_name -> webapi.TagCode - 136, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig + 139, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig 0, // 4: webapi.ASGameConfigGroup.Tag:type_name -> webapi.TagCode - 137, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 140, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 6: webapi.ASGameConfigGlobal.Tag:type_name -> webapi.TagCode - 138, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 141, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 8: webapi.ASDbConfig.Tag:type_name -> webapi.TagCode - 139, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig - 135, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform + 142, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig + 138, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform 0, // 11: webapi.SAUpdatePlatform.Tag:type_name -> webapi.TagCode - 138, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 141, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 13: webapi.SAUpdateGameConfigGlobal.Tag:type_name -> webapi.TagCode - 136, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig + 139, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig 0, // 15: webapi.SAUpdateGameConfig.Tag:type_name -> webapi.TagCode - 137, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 140, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 17: webapi.SAUpdateGameConfigGroup.Tag:type_name -> webapi.TagCode 0, // 18: webapi.SAAddCoinById.Tag:type_name -> webapi.TagCode 0, // 19: webapi.SAResetGamePool.Tag:type_name -> webapi.TagCode - 140, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 21: webapi.SAUpdateGamePool.Tag:type_name -> webapi.TagCode 0, // 22: webapi.SAQueryGamePoolByGameId.Tag:type_name -> webapi.TagCode - 140, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting - 140, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 25: webapi.SAQueryAllGamePool.Tag:type_name -> webapi.TagCode 26, // 26: webapi.SAQueryAllGamePool.CoinPoolStatesInfo:type_name -> webapi.CoinPoolStatesInfo 0, // 27: webapi.SAListRoom.Tag:type_name -> webapi.TagCode - 141, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo + 144, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 29: webapi.SAGetRoom.Tag:type_name -> webapi.TagCode - 141, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo + 144, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 31: webapi.SADestroyRoom.Tag:type_name -> webapi.TagCode - 142, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 145, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 33: webapi.SASinglePlayerAdjust.Tag:type_name -> webapi.TagCode - 142, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 145, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 35: webapi.SAGetPlayerData.Tag:type_name -> webapi.TagCode - 143, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData + 146, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 37: webapi.SAMorePlayerData.Tag:type_name -> webapi.TagCode - 143, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData + 146, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 39: webapi.SAKickPlayer.Tag:type_name -> webapi.TagCode 42, // 40: webapi.ASUpdatePlayerElement.PlayerEleArgs:type_name -> webapi.PlayerEleArgs 0, // 41: webapi.SAUpdatePlayerElement.Tag:type_name -> webapi.TagCode 0, // 42: webapi.SAWhiteBlackControl.Tag:type_name -> webapi.TagCode 0, // 43: webapi.SAQueryHorseRaceLampList.Tag:type_name -> webapi.TagCode - 144, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 45: webapi.SACreateHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 46: webapi.SAGetHorseRaceLampById.Tag:type_name -> webapi.TagCode - 144, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp - 144, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 49: webapi.SAEditHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 50: webapi.SARemoveHorseRaceLampById.Tag:type_name -> webapi.TagCode 0, // 51: webapi.SABlackBySnId.Tag:type_name -> webapi.TagCode 0, // 52: webapi.SACreateShortMessage.Tag:type_name -> webapi.TagCode 0, // 53: webapi.SAQueryShortMessageList.Tag:type_name -> webapi.TagCode - 145, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo + 148, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo 0, // 55: webapi.SADeleteShortMessage.Tag:type_name -> webapi.TagCode 0, // 56: webapi.SAQueryOnlineReportList.Tag:type_name -> webapi.TagCode - 143, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData + 146, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData 0, // 58: webapi.SASrvCtrlClose.Tag:type_name -> webapi.TagCode 0, // 59: webapi.SASrvCtrlNotice.Tag:type_name -> webapi.TagCode 0, // 60: webapi.SASrvCtrlStartScript.Tag:type_name -> webapi.TagCode 0, // 61: webapi.SAListServerStates.Tag:type_name -> webapi.TagCode - 146, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo + 149, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo 0, // 63: webapi.SAServerStateSwitch.Tag:type_name -> webapi.TagCode 0, // 64: webapi.SAResetEtcdData.Tag:type_name -> webapi.TagCode 0, // 65: webapi.SAOnlineReportTotal.Tag:type_name -> webapi.TagCode - 147, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport + 150, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport 0, // 67: webapi.SAAddCoinByIdAndPT.Tag:type_name -> webapi.TagCode - 148, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo + 151, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo 83, // 69: webapi.ASCreateJYB.Award:type_name -> webapi.JybInfoAward 0, // 70: webapi.SACreateJYB.Tag:type_name -> webapi.TagCode 0, // 71: webapi.SAUpdateJYB.Tag:type_name -> webapi.TagCode @@ -10408,10 +10641,10 @@ var file_webapi_proto_depIdxs = []int32{ 94, // 77: webapi.SAGetExchangeOrder.OrderList:type_name -> webapi.ExchangeOrderInfo 0, // 78: webapi.SAUpExchangeStatus.Tag:type_name -> webapi.TagCode 0, // 79: webapi.SAGetExchangeShop.Tag:type_name -> webapi.TagCode - 149, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop - 150, // 81: webapi.SAGetExchangeShop.Weight:type_name -> webapi.ShopWeight + 152, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop + 153, // 81: webapi.SAGetExchangeShop.Weight:type_name -> webapi.ShopWeight 0, // 82: webapi.SAThdUpdatePlayerCoin.Tag:type_name -> webapi.TagCode - 148, // 83: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo + 151, // 83: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo 0, // 84: webapi.SACallbackPayment.Tag:type_name -> webapi.TagCode 0, // 85: webapi.SAResource.Tag:type_name -> webapi.TagCode 0, // 86: webapi.SASendSms.Tag:type_name -> webapi.TagCode @@ -10420,17 +10653,19 @@ var file_webapi_proto_depIdxs = []int32{ 0, // 89: webapi.SAGetImgVerify.Tag:type_name -> webapi.TagCode 0, // 90: webapi.SAPlayerDelete.Tag:type_name -> webapi.TagCode 0, // 91: webapi.SAPlayerInviteLink.Tag:type_name -> webapi.TagCode - 148, // 92: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo + 151, // 92: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo 0, // 93: webapi.SAAddItemById.Tag:type_name -> webapi.TagCode 130, // 94: webapi.SASMSConfig.Info:type_name -> webapi.SMSInfo 0, // 95: webapi.SASMSConfig.Tag:type_name -> webapi.TagCode 134, // 96: webapi.SAPopUpWindowsConfig.Info:type_name -> webapi.WindowsInfo 0, // 97: webapi.SAPopUpWindowsConfig.Tag:type_name -> webapi.TagCode - 98, // [98:98] is the sub-list for method output_type - 98, // [98:98] is the sub-list for method input_type - 98, // [98:98] is the sub-list for extension type_name - 98, // [98:98] is the sub-list for extension extendee - 0, // [0:98] is the sub-list for field type_name + 0, // 98: webapi.SARoomInfo.Tag:type_name -> webapi.TagCode + 136, // 99: webapi.SARoomInfo.List:type_name -> webapi.RoundInfo + 100, // [100:100] is the sub-list for method output_type + 100, // [100:100] is the sub-list for method input_type + 100, // [100:100] is the sub-list for extension type_name + 100, // [100:100] is the sub-list for extension extendee + 0, // [0:100] is the sub-list for field type_name } func init() { file_webapi_proto_init() } @@ -12048,6 +12283,42 @@ func file_webapi_proto_init() { return nil } } + file_webapi_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ASRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoundInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SARoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -12055,7 +12326,7 @@ func file_webapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_webapi_proto_rawDesc, NumEnums: 1, - NumMessages: 134, + NumMessages: 137, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/webapi.proto b/protocol/webapi/webapi.proto index d5aedaa..41d749d 100644 --- a/protocol/webapi/webapi.proto +++ b/protocol/webapi/webapi.proto @@ -35,6 +35,7 @@ enum TagCode { TelExist =9; // 手机号已存在 AccountNotFound =10; // 账号未找到 TelNotBind =11; // 手机号未绑定 + NotFound =12; // 未找到 } // =================================================== @@ -279,6 +280,8 @@ message ASListRoom{ int32 ClubId = 9; int32 RoomType = 10;//roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 int32 GamefreeId = 11; + int32 IsCustom = 12; // 房卡场 1是 + int32 RoomConfigId = 13; // 房间玩法id } message SAListRoom{ TagCode Tag = 1; //错误码 @@ -969,3 +972,22 @@ message WindowsInfo{ int32 PartNum = 4;//参与人数 int32 GainNum = 5;//领取人数 } + +// 获取对局详情 /api/game/room_info +message ASRoomInfo{ + int32 RoomId = 1; // 房间id +} + +message RoundInfo{ + int32 Round = 1; //局数 + int64 Ts = 2; //结束时间 + repeated int64 Score = 3; //分数 + string LogId = 4; // 牌局记录id +} + +message SARoomInfo{ + TagCode Tag = 1; //错误码 + string Msg = 2; //错误信息 + repeated int32 SnId = 3; // 玩家id + repeated RoundInfo List = 4; // 每局结算 +} \ No newline at end of file diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index 9058404..1975421 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -308,9 +308,9 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e send() return nil } - bagInfo, _, isF := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + bagInfo, _, isF := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: -1, @@ -333,9 +333,9 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e logger.Logger.Trace("道具分解", msg.ItemId) itemInfo := srvdata.GameItemMgr.Get(p.Platform, msg.ItemId) if msg.ItemNum > 0 && itemInfo != nil { - _, _, isF := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + _, _, isF := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: int64(-msg.GetItemNum()), @@ -348,19 +348,19 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess - var changeItems []*Item + var changeItems []*model.Item for k, v := range itemInfo.GetGain() { if v > 0 { - changeItems = append(changeItems, &Item{ + changeItems = append(changeItems, &model.Item{ ItemId: int32(k), ItemNum: v * int64(msg.GetItemNum()), }) } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: changeItems, - Cost: []*model.ItemInfo{ + Cost: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: int64(msg.GetItemNum()), diff --git a/worldsrv/action_pets.go b/worldsrv/action_pets.go index fe7c5b7..40af61f 100644 --- a/worldsrv/action_pets.go +++ b/worldsrv/action_pets.go @@ -529,7 +529,7 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) return nil } - var change []*Item + var change []*model.Item for _, v := range info.GetCost() { e := BagMgrSingleton.GetItem(p.SnId, v.GetId()) if e == nil || e.ItemNum < v.GetN() { @@ -538,13 +538,13 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) send() return nil } - change = append(change, &Item{ + change = append(change, &model.Item{ ItemId: v.GetId(), ItemNum: -v.GetN(), }) } - _, _, ok = BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + _, _, ok = BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: change, Add: 0, GainWay: common.GainWaySkinUpGrade, @@ -580,7 +580,7 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { return nil, pets.OpResultCode_OPRC_Error } - var change []*Item + var change []*model.Item if info.GetUnLockType() == common.SkinGetVip { if p.VIP < info.GetNeedVip() { logger.Logger.Errorf("CSSKinUnLock Unlock vip error") @@ -592,13 +592,13 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { if e == nil || e.ItemNum < v.GetN() { return nil, pets.OpResultCode_OPRC_NotEnough } - change = append(change, &Item{ + change = append(change, &model.Item{ ItemId: v.GetId(), ItemNum: -v.GetN(), }) } - _, _, ok := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + _, _, ok := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: change, Add: 0, GainWay: common.GainWaySkinUnLock, diff --git a/worldsrv/action_phonelottery.go b/worldsrv/action_phonelottery.go index 30591e1..f8f39e1 100644 --- a/worldsrv/action_phonelottery.go +++ b/worldsrv/action_phonelottery.go @@ -308,7 +308,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da } p.AddDiamond(-diamondNum, 0, common.GainWayDiamondLottery, "sys", "钻石抽奖") pack := &player_proto.SCDiamondLottery{} - var items []*Item + var items []*model.Item for i := 1; i <= int(count); i++ { weight := 0 for _, lotteryInfo := range config.Info { @@ -354,7 +354,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da for _, lotteryInfo := range config.Info { if lotteryInfo.Id == awardId { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: lotteryInfo.ItemId, // 物品id ItemNum: int64(lotteryInfo.Grade), // 数量 }) @@ -372,7 +372,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da value += int(lotteryInfo.Oddrate) if lotteryInfo.Type == 1 { if random <= value { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: lotteryInfo.ItemId, // 物品id ItemNum: int64(lotteryInfo.Grade), // 数量 }) @@ -389,10 +389,10 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da } } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, - Cost: []*model.ItemInfo{ + Cost: []*model.Item{ { ItemId: common.ItemIDDiamond, ItemNum: diamondNum, diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 025416e..d800fbe 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -3101,9 +3101,9 @@ func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid in send() // 获得10v卡 if p.GuideStep == 2 { - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: common.ItemIDVCard, ItemNum: 10, diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 429e3b5..6481acb 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -150,39 +150,6 @@ func init() { gameCoinTs := msg.GetGameCoinTs() if !p.IsRob && !scene.IsTestScene() { - // 同步背包数据 - diffItems := []*Item{} - dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) - if dbItemArr != nil { - items := msg.GetItems() - if items != nil { - for _, dbItem := range dbItemArr { - //todo 临时修复,正常应该道具需要使用事务同步 - switch dbItem.GetId() { - case common.ItemIDPermit, common.ItemIDWeekScore: - continue - } - if itemNum, exist := items[dbItem.Id]; exist { - oldItem := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) - diffNum := itemNum - if oldItem != nil { - diffNum = itemNum - oldItem.ItemNum - } - if diffNum != 0 { - item := &Item{ - ItemId: dbItem.Id, - ItemNum: diffNum, - } - diffItems = append(diffItems, item) - } - } - } - } - } - if diffItems != nil && len(diffItems) != 0 { - BagMgrSingleton.AddItems(p, diffItems, 0, 0, "", "", 0, 0, true) - } - //对账点同步 if p.GameCoinTs < gameCoinTs { p.GameCoinTs = gameCoinTs @@ -648,6 +615,37 @@ func init() { } return nil })) + + // 同步道具数量 + netlib.Register(int(serverproto.SSPacketID_PACKET_PlayerChangeItems), &serverproto.PlayerChangeItems{}, HandlePlayerChangeItems) +} + +func HandlePlayerChangeItems(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("HandlePlayerChangeItems recv %v", data) + msg, ok := data.(*serverproto.PlayerChangeItems) + if !ok { + return nil + } + p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) + if p == nil { + return nil + } + var items []*model.Item + for _, v := range msg.GetItems() { + items = append(items, &model.Item{ + ItemId: v.GetId(), + ItemNum: v.GetNum(), + }) + } + _, _, ok = BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + NoLog: true, + }) + if !ok { + logger.Logger.Errorf("HandlePlayerChangeItems add item failed %v", msg) + } + return nil } // 机器人服务器向worldsrv发送 diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index 5c8e874..b9b993f 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -13,7 +13,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - webapi_proto "mongo.games.com/game/protocol/webapi" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/protocol/welfare" "mongo.games.com/game/srvdata" "mongo.games.com/game/webapi" @@ -315,14 +315,14 @@ func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) var res []byte var err error task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - req := &webapi_proto.ASPlayerInviteLink{ + req := &webapiproto.ASPlayerInviteLink{ Platform: p.Platform, SnId: p.SnId, } res, err = webapi.ApiGetInviteLink(common.GetAppId(), req) return nil }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - info := webapi_proto.SAPlayerInviteLink{} + info := webapiproto.SAPlayerInviteLink{} if err != nil || res == nil { logger.Logger.Errorf("ApiGetInviteLink err %v or not return", err) } else { @@ -1029,7 +1029,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int } if isExchange { - var exchangeConfig *webapi_proto.PermitExchangeConfig + var exchangeConfig *webapiproto.PermitExchangeConfig for _, v := range channelConfig.GetExchangeConfig() { if v.GetId() == msg.GetId() { exchangeConfig = v @@ -1038,10 +1038,10 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int } if exchangeConfig != nil { // 检查背包是否足够 - var items []*Item + var items []*model.Item var costItems []*Item var cost, gain []model.AwardItem - var cost1 []*model.ItemInfo + var cost1 []*model.Item for _, v := range exchangeConfig.GetCost() { item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()) if item == nil || item.ItemNum < v.GetItemNum() { @@ -1059,7 +1059,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int Id: v.GetItemId(), Num: v.GetItemNum(), }) - cost1 = append(cost1, &model.ItemInfo{ + cost1 = append(cost1, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -1068,10 +1068,9 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int for _, v := range exchangeConfig.GetGain() { info := srvdata.GameItemMgr.Get(p.Platform, v.GetItemId()) if info != nil { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), - Name: info.Name, }) gain = append(gain, model.AwardItem{ Id: v.GetItemId(), @@ -1085,8 +1084,8 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int common.GainWayPermitExchangeCost, "system", "赛季通行证兑换消耗", 0, 0, false) } // 增加背包物品 - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Cost: cost1, Add: 0, diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 13ae7d7..e770f5f 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -155,13 +155,28 @@ type ItemParam struct { } type AddItemParam struct { - Cost []*model.ItemInfo // 获得道具时消耗的道具数量 + Cost []*model.Item // 获得道具时消耗的道具数量 LogId string } -func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, bool) { - return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ - Cost: args.Cost, +func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResultCode, bool) { + p := PlayerMgrSington.GetPlayerBySnId(args.P.SnId) + var items []*Item + var costs []*model.Item + for _, v := range args.Change { + items = append(items, &Item{ + ItemId: v.ItemId, + ItemNum: v.ItemNum, + }) + } + for _, v := range args.Cost { + costs = append(costs, &model.Item{ + ItemId: v.ItemId, + ItemNum: v.ItemNum, + }) + } + return this.AddItems(p, items, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ + Cost: costs, LogId: args.LogId, }) } @@ -177,7 +192,7 @@ func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, boo // Deprecated: use [ AddItemsV2 ] instead func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { - var cost []*model.ItemInfo + var cost []*model.Item var id string if len(params) > 0 { cost = params[0].Cost @@ -745,14 +760,14 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { if err != nil || res.GetCode() == "" || res.GetTag() != webapiproto.TagCode_SUCCESS { //返回道具 - items := make([]*Item, 0) - items = append(items, &Item{ + items := make([]*model.Item, 0) + items = append(items, &model.Item{ ItemId: itemId, // 物品id ItemNum: 1, // 数量 ObtainTime: time.Now().Unix(), }) - this.AddItemsV2(&ItemParam{ - P: p, + this.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Add: 0, GainWay: common.GainWayItemChange, diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 872056f..d7ad029 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -170,6 +170,14 @@ func (this *GameSession) AddScene(s *Scene) { DBGameFree: s.dbGameFree, Platform: s.limitPlatform.IdStr, } + if s.RoomConfig != nil { + for _, v := range s.RoomConfig.GetCost() { + msg.Items = append(msg.Items, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } + } if s.IsCoinScene() { if sp, ok := s.sp.(*ScenePolicyData); ok { msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) diff --git a/worldsrv/player.go b/worldsrv/player.go index 752df54..2ecf0cc 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3870,9 +3870,9 @@ func (this *Player) VIPDraw(id, vip int32) { this.AddMoneyPayTotal(addVipExp) pack.Award[common.ItemIDVipExp] = addVipExp default: - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: this, - Change: []*Item{ + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: this.PlayerData, + Change: []*model.Item{ { ItemId: int32(k), ItemNum: v, @@ -3893,18 +3893,18 @@ func (this *Player) VIPDraw(id, vip int32) { LogChannelSingleton.WriteLog(log) case 1: - var items []*Item + var items []*model.Item var itemInfo []model.ItemInfo for k, v := range data.Privilege9 { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: int32(k), ItemNum: v, }) itemInfo = append(itemInfo, model.ItemInfo{ItemId: int32(k), ItemNum: v}) pack.Award[k] = v } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: this, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: this.PlayerData, Change: items, GainWay: common.GainWayVipGift9, Operator: "system", diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 04d0275..bfe8748 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -3,6 +3,7 @@ package main import ( "math" "mongo.games.com/game/common" + "mongo.games.com/game/model" hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/webapi" ) @@ -78,9 +79,9 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { return 0 } -func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*Item)) bool { +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*model.Item)) bool { isEnough := true - var items []*Item + var items []*model.Item if costType == 1 { // 房主 for _, v := range roomConfig.GetCost() { @@ -88,7 +89,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba isEnough = false break } else { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -102,7 +103,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba isEnough = false break } else { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -116,13 +117,13 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba } func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { - return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*Item) {}) + return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { - return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*Item) { - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, GainWay: common.GainWayRoomCost, Operator: "system", diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 865c8ef..bf2db88 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -849,7 +849,7 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { } typeId := addUpDate2Type[0].Id addUpDate2Num := addUpDate2Type[0].Num - var cost []*model.ItemInfo + var cost []*model.Item if typeId == 1 { Num += 1 //看广告任务 @@ -865,7 +865,7 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { p.AddDiamond(int64(-addUpDate2Num), 0, common.GainWaySign7Con, "system", "累计签到进阶奖励钻石消耗") logger.Logger.Trace("累计签到进阶奖励,扣除钻石uid = ", p.SnId) EndTime = -1 - cost = append(cost, &model.ItemInfo{ + cost = append(cost, &model.Item{ ItemId: common.ItemIDDiamond, ItemNum: int64(addUpDate2Num), }) @@ -877,18 +877,18 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { } if EndTime == -1 { //发奖 - var items []*Item + var items []*model.Item for _, d2 := range addUpDate2 { for _, value := range d2.AddUpDate { - item := &Item{ + item := &model.Item{ ItemId: value.Item_Id, ItemNum: int64(value.Grade), } items = append(items, item) } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Cost: cost, Add: 0, From cae5536ed35b130de95133a529307da18c34bc3c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 09:12:01 +0800 Subject: [PATCH 041/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E6=B6=88=E8=80=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_itemlog.go | 2 ++ model/baginfo.go | 1 + model/itemdatalog.go | 55 +++++++++++++++++++------------------ worldsrv/bagmgr.go | 37 ++++++++++++++----------- worldsrv/scenepolicydata.go | 15 +++++----- 5 files changed, 61 insertions(+), 49 deletions(-) diff --git a/dbproxy/svc/l_itemlog.go b/dbproxy/svc/l_itemlog.go index 4fda8b7..49811bb 100644 --- a/dbproxy/svc/l_itemlog.go +++ b/dbproxy/svc/l_itemlog.go @@ -26,6 +26,8 @@ func ItemLogsCollection(plt string) *mongo.Collection { c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gameid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gamefreeid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"snid", "logtype", "itemid", "typeid"}, Background: true, Sparse: true}) + c_itemlog.EnsureIndex(mgo.Index{Key: []string{"roomconfigid"}, Background: true, Sparse: true}) + c_itemlog.EnsureIndex(mgo.Index{Key: []string{"typeid", "roomconfigid"}, Background: true, Sparse: true}) } return c_itemlog } diff --git a/model/baginfo.go b/model/baginfo.go index 00a1698..86a325c 100644 --- a/model/baginfo.go +++ b/model/baginfo.go @@ -95,4 +95,5 @@ type AddItemParam struct { GameId, GameFreeId int64 // 游戏id,场次id NoLog bool // 是否不记录日志 LogId string // 撤销的id,道具兑换失败 + RoomConfigId int32 // 房间配置id } diff --git a/model/itemdatalog.go b/model/itemdatalog.go index a6cd9ab..b4a96b4 100644 --- a/model/itemdatalog.go +++ b/model/itemdatalog.go @@ -14,20 +14,21 @@ var ( ) type ItemLog struct { - LogId bson.ObjectId `bson:"_id"` - Platform string //平台 - SnId int32 //玩家id - LogType int32 //记录类型 0.获取 1.消耗 - ItemId int32 //道具id - ItemName string //道具名称 - Count int64 //个数 - CreateTs int64 //记录时间 - Remark string //备注 - TypeId int32 // 变化类型 - GameId int32 // 游戏id,游戏中获得时有值 - GameFreeId int32 // 场次id,游戏中获得时有值 - Cost []*Item // 消耗的道具 - Id string // 撤销的id,兑换失败 + LogId bson.ObjectId `bson:"_id"` + Platform string //平台 + SnId int32 //玩家id + LogType int32 //记录类型 0.获取 1.消耗 + ItemId int32 //道具id + ItemName string //道具名称 + Count int64 //个数 + CreateTs int64 //记录时间 + Remark string //备注 + TypeId int32 // 变化类型 + GameId int32 // 游戏id,游戏中获得时有值 + GameFreeId int32 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + Id string // 撤销的id,兑换失败 + RoomConfigId int32 // 房间配置id } func NewItemLog() *ItemLog { @@ -36,18 +37,19 @@ func NewItemLog() *ItemLog { } type ItemParam struct { - Platform string // 平台 - SnId int32 // 玩家id - LogType int32 // 记录类型 0.获取 1.消耗 - ItemId int32 // 道具id - ItemName string // 道具名称 - Count int64 // 个数 - Remark string // 备注 - TypeId int32 // 变化类型 - GameId int64 // 游戏id,游戏中获得时有值 - GameFreeId int64 // 场次id,游戏中获得时有值 - Cost []*Item // 消耗的道具 - LogId string // 撤销的id,兑换失败 + Platform string // 平台 + SnId int32 // 玩家id + LogType int32 // 记录类型 0.获取 1.消耗 + ItemId int32 // 道具id + ItemName string // 道具名称 + Count int64 // 个数 + Remark string // 备注 + TypeId int32 // 变化类型 + GameId int64 // 游戏id,游戏中获得时有值 + GameFreeId int64 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + LogId string // 撤销的id,兑换失败 + RoomConfigId int32 // 房间配置id } func NewItemLogEx(param ItemParam) *ItemLog { @@ -65,6 +67,7 @@ func NewItemLogEx(param ItemParam) *ItemLog { itemLog.GameFreeId = int32(param.GameFreeId) itemLog.Cost = param.Cost itemLog.Id = param.LogId + itemLog.RoomConfigId = param.RoomConfigId return itemLog } diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index e770f5f..20c0f48 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -155,8 +155,9 @@ type ItemParam struct { } type AddItemParam struct { - Cost []*model.Item // 获得道具时消耗的道具数量 - LogId string + Cost []*model.Item // 获得道具时消耗的道具数量 + LogId string + RoomConfigId int32 } func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResultCode, bool) { @@ -176,8 +177,9 @@ func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResult }) } return this.AddItems(p, items, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ - Cost: costs, - LogId: args.LogId, + Cost: costs, + LogId: args.LogId, + RoomConfigId: args.RoomConfigId, }) } @@ -194,9 +196,11 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { var cost []*model.Item var id string + var roomConfigId int32 if len(params) > 0 { cost = params[0].Cost id = params[0].LogId + roomConfigId = params[0].RoomConfigId } var items []*Item @@ -325,18 +329,19 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int num = -v.ItemNum } log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: int32(logType), - ItemId: v.ItemId, - ItemName: item.Name, - Count: num, - Remark: remark, - TypeId: gainWay, - GameId: gameId, - GameFreeId: gameFreeId, - Cost: cost, - LogId: id, + Platform: p.Platform, + SnId: p.SnId, + LogType: int32(logType), + ItemId: v.ItemId, + ItemName: item.Name, + Count: num, + Remark: remark, + TypeId: gainWay, + GameId: gameId, + GameFreeId: gameFreeId, + Cost: cost, + LogId: id, + RoomConfigId: roomConfigId, }) if log != nil { LogChannelSingleton.WriteLog(log) diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index bfe8748..130ab55 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -123,13 +123,14 @@ func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *weba func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { BagMgrSingleton.AddItemsV2(&model.AddItemParam{ - P: p.PlayerData, - Change: items, - GainWay: common.GainWayRoomCost, - Operator: "system", - Remark: "竞技馆进房费用", - GameId: int64(s.gameId), - GameFreeId: int64(s.dbGameFree.GetId()), + P: p.PlayerData, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技馆进房费用", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + RoomConfigId: s.RoomConfig.GetId(), }) }) } From bfdf500eecbe4561c4cce73b387408f0aca4cca2 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 16:08:55 +0800 Subject: [PATCH 042/153] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 4 +- gamesrv/action/action_server.go | 76 +- gamesrv/avengers/scenedata_avengers.go | 32 +- gamesrv/avengers/scenepolicy_avengers.go | 44 +- gamesrv/base/divisionsystem.go | 2 +- gamesrv/base/player.go | 4 +- gamesrv/base/playermgr.go | 6 +- gamesrv/base/replay_recorder.go | 11 +- gamesrv/base/scene.go | 423 +- gamesrv/base/scene_mgr.go | 49 +- gamesrv/caishen/scenedata_caishen.go | 32 +- gamesrv/caishen/scenepolicy_caishen.go | 46 +- gamesrv/chess/scene.go | 2 +- gamesrv/chess/scenepolicy.go | 14 +- .../easterisland/scenedata_easterisland.go | 32 +- .../easterisland/scenepolicy_easterisland.go | 38 +- gamesrv/fishing/action_fish.go | 6 +- gamesrv/fishing/playerdata_fishing.go | 2 +- gamesrv/fishing/scenedata_fishing.go | 8 +- gamesrv/fruits/playerdata_fruits.go | 4 +- gamesrv/fruits/scenedata_fruits.go | 20 +- gamesrv/fruits/scenepolicy_fruits.go | 30 +- gamesrv/iceage/scenedata_iceage.go | 26 +- gamesrv/iceage/scenepolicy_iceage.go | 6 +- gamesrv/richblessed/scenedata_richblessed.go | 22 +- .../richblessed/scenepolicy_richblessed.go | 40 +- gamesrv/smallrocket/scene.go | 8 +- gamesrv/tamquoc/scenedata_tamquoc.go | 34 +- gamesrv/tamquoc/scenepolicy_tamquoc.go | 36 +- gamesrv/thirteen/scene.go | 10 +- gamesrv/thirteen/scenepolicy.go | 6 +- gamesrv/tienlen/scenedata_tienlen.go | 10 +- gamesrv/tienlen/scenepolicy_tienlen.go | 40 +- protocol/server/server.pb.go | 3809 +++++++++-------- protocol/server/server.proto | 60 +- worldsrv/action_game.go | 51 +- worldsrv/action_server.go | 6 +- worldsrv/action_tournament.go | 2 +- worldsrv/gamesess.go | 70 +- worldsrv/matchscenemgr.go | 21 +- worldsrv/scene.go | 143 +- worldsrv/scenemgr.go | 43 +- worldsrv/scenepolicydata.go | 11 +- 43 files changed, 2702 insertions(+), 2637 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 9f76f66..4245e12 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -83,7 +83,7 @@ func (this *CSLeaveRoomHandler) Process(s *netlib.Session, packetid int, data in logger.Logger.Warnf("CSLeaveRoomHandler[%v][%v] scene.gaming==true", scene.SceneId, p.SnId) pack := &gamehall.SCLeaveRoom{ OpRetCode: gamehall.OpResultCode_Game_OPRC_YourAreGamingCannotLeave_Game, - RoomId: proto.Int(scene.SceneId), + RoomId: scene.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) @@ -100,7 +100,7 @@ func (this *CSLeaveRoomHandler) Process(s *netlib.Session, packetid int, data in Reason: proto.Int(0), OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, Mode: msg.Mode, - RoomId: proto.Int(scene.SceneId), + RoomId: scene.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 22b52b3..a0bb222 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -73,64 +73,22 @@ func HandleWGPlayerLeave(session *netlib.Session, packetId int, data interface{} // return nil //} -func init() { - //创建场景 - netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server.WGCreateScene{} - })) - netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - logger.Logger.Trace("receive WGCreateScene:", pack) - if msg, ok := pack.(*server.WGCreateScene); ok { - sceneId := int(msg.GetSceneId()) - gameMode := int(msg.GetGameMode()) - sceneMode := int(msg.GetSceneMode()) - gameId := int(msg.GetGameId()) - hallId := msg.GetHallId() - groupId := msg.GetGroupId() - dbGameFree := msg.GetDBGameFree() - bEnterAfterStart := msg.GetEnterAfterStart() - totalOfGames := msg.GetTotalOfGames() - baseScore := msg.GetBaseScore() - playerNum := int(msg.GetPlayerNum()) - scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(), - msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree, - bEnterAfterStart, baseScore, playerNum, msg.GetChessRank()) - if scene != nil { - if scene.IsMatchScene() { - if len(scene.Params) > 0 { - scene.MatchId = scene.Params[0] - } - if len(scene.Params) > 1 { - scene.MatchFinals = scene.Params[1] == 1 - } - if len(scene.Params) > 2 { - scene.MatchRound = scene.Params[2] - } - if len(scene.Params) > 3 { - scene.MatchCurPlayerNum = scene.Params[3] - } - if len(scene.Params) > 4 { - scene.MatchNextNeed = scene.Params[4] - } - if len(scene.Params) > 5 { - scene.MatchType = scene.Params[5] - } - } - for _, v := range msg.GetItems() { - scene.Items = append(scene.Items, &base.ItemInfo{ - Id: v.GetId(), - Num: v.GetNum(), - }) - } - scene.ClubId = msg.GetClub() - scene.RoomId = msg.GetClubRoomId() - scene.RoomPos = msg.GetClubRoomPos() - scene.PumpCoin = msg.GetClubRate() - scene.RealCtrl = msg.RealCtrl - } - } +func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("receive CreateScene %v", data) + msg, ok := data.(*server.WGCreateScene) + if !ok { return nil - })) + } + base.SceneMgrSington.CreateScene(&base.CreateSceneParam{ + Session: session, + WGCreateScene: msg, + }) + return nil +} + +func init() { + // 创建房间 + netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateSceneHandler) //删除场景 // 立刻删除,不管游戏是否结束 @@ -280,7 +238,7 @@ func init() { } if scene.Testing { - p.Coin = int64(scene.DbGameFree.GetTestTakeCoin()) + p.Coin = int64(scene.GetDBGameFree().GetTestTakeCoin()) } base.PlayerMgrSington.ManagePlayer(p) scene.PlayerEnter(p, isload) @@ -397,7 +355,7 @@ func init() { //p.coin = msg.GetTakeCoin() //p.takeCoin = msg.GetTakeCoin() if scene.Testing { - p.Coin = int64(scene.DbGameFree.GetTestTakeCoin()) + p.Coin = int64(scene.GetDBGameFree().GetTestTakeCoin()) } p.LastSyncCoin = p.Coin scene.AudienceSit(p) diff --git a/gamesrv/avengers/scenedata_avengers.go b/gamesrv/avengers/scenedata_avengers.go index 82d8328..c7bd1fe 100644 --- a/gamesrv/avengers/scenedata_avengers.go +++ b/gamesrv/avengers/scenedata_avengers.go @@ -57,14 +57,14 @@ func (this *AvengersSceneData) SceneDestroy(force bool) { } func (this *AvengersSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -100,7 +100,7 @@ type AvengersSpinResult struct { } func (this *AvengersSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes AvengersSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -188,7 +188,7 @@ func (this *AvengersSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -215,7 +215,7 @@ func (this *AvengersSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *AvengersSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -223,7 +223,7 @@ func (this *AvengersSceneData) RecordBurstLog(name string, wincoin, totalbet int func (this *AvengersSceneData) BurstHistory(player *AvengersPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*avengers.AvengersBurstHistoryInfo if data != nil { @@ -251,7 +251,7 @@ func (this *AvengersSceneData) GetLastBurstJackPot() time.Time { } func (this *AvengersSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -267,7 +267,7 @@ func (this *AvengersSceneData) SetLastBurstJackPot() { func (this *AvengersSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -280,20 +280,20 @@ func (this *AvengersSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *AvengersSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -314,11 +314,11 @@ func (this *AvengersSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/avengers/scenepolicy_avengers.go b/gamesrv/avengers/scenepolicy_avengers.go index 68e2d47..eccf5c8 100644 --- a/gamesrv/avengers/scenepolicy_avengers.go +++ b/gamesrv/avengers/scenepolicy_avengers.go @@ -94,8 +94,8 @@ func (this *ScenePolicyAvengers) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyAvengers) OnPlayerEnter, SceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*AvengersSceneData); ok { playerEx := &AvengersPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx AvengersSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -229,14 +229,14 @@ func (this *ScenePolicyAvengers) GetJackPotVal(s *base.Scene) int64 { func AvengersSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *AvengersSceneData, playerEx *AvengersPlayerData, data *avengers.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &avengers.SCAvengersRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } if playerEx != nil { @@ -252,7 +252,7 @@ func AvengersSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *AvengersSceneD pack.Players = append(pack.Players, pd) pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -367,8 +367,8 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { - logger.Logger.Warnf("avengers snid[%v] opcode[%v] params[%v] BaseScore[%v]", p.SnId, opcode, params, sceneEx.DbGameFree.GetBaseScore()) + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { + logger.Logger.Warnf("avengers snid[%v] opcode[%v] params[%v] BaseScore[%v]", p.SnId, opcode, params, sceneEx.GetDBGameFree().GetBaseScore()) this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_Error, params) return false } @@ -405,7 +405,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -419,7 +419,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o //获取当前水池的上下文环境 sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Warnf("AvengersErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -448,8 +448,8 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - jackpotParams := sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 //奖池/水池增量 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -469,7 +469,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -668,7 +668,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o case AvengersPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.Itoa(int(playerEx.SnId)) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) //复仇者联盟存储个人操作记录不分场次,因为选场界面也需要拉去个人操作记录 + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) //复仇者联盟存储个人操作记录不分场次,因为选场界面也需要拉去个人操作记录 pack := &avengers.SCAvengersPlayerHistory{} for _, v := range gpl.Data { if v.GameDetailedLogId == "" { @@ -806,7 +806,7 @@ func (this *SceneStateAvengersStart) BenchTest(s *base.Scene, p *base.Player) { file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,爆奖,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - p.Coin = 5000 * int64(s.DbGameFree.GetBaseScore()) + p.Coin = 5000 * int64(s.GetDBGameFree().GetBaseScore()) if playerEx, ok := p.ExtraData.(*AvengersPlayerData); ok { for i := 0; i < BENCH_CNT; i++ { startCoin := p.Coin @@ -817,7 +817,7 @@ func (this *SceneStateAvengersStart) BenchTest(s *base.Scene, p *base.Player) { inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.ChangeCoin - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, startCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -860,7 +860,7 @@ func (this *SceneStateAvengersStart) WinTargetBenchTest(s *base.Scene, p *base.P } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,爆奖,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -883,7 +883,7 @@ func (this *SceneStateAvengersStart) WinTargetBenchTest(s *base.Scene, p *base.P inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.WinSmallGame - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, startCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -915,7 +915,7 @@ func AvengersCheckAndSaveLog(sceneEx *AvengersSceneData, playerEx *AvengersPlaye //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -974,8 +974,8 @@ func AvengersCheckAndSaveLog(sceneEx *AvengersSceneData, playerEx *AvengersPlaye GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/base/divisionsystem.go b/gamesrv/base/divisionsystem.go index b016caf..f63a62c 100644 --- a/gamesrv/base/divisionsystem.go +++ b/gamesrv/base/divisionsystem.go @@ -2,5 +2,5 @@ package base // 提供税收和流水,根据代理需求后台进行分账 func ProfitDistribution(p *Player, tax, taxex, validFlow int64) { - //LogChannelSingleton.WriteMQData(model.GenerateTaxDivide(p.SnId, p.Platform, p.Channel, p.BeUnderAgentCode, p.PackageID, tax, taxex, validFlow, p.scene.GameId, p.scene.GameMode, p.scene.DbGameFree.GetId(), p.PromoterTree)) + //LogChannelSingleton.WriteMQData(model.GenerateTaxDivide(p.SnId, p.Platform, p.Channel, p.BeUnderAgentCode, p.PackageID, tax, taxex, validFlow, p.scene.GameId, p.scene.GameMode, p.scene.GetDBGameFree().GetId(), p.PromoterTree)) } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index f45f35f..721aeef 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -246,7 +246,7 @@ func (this *Player) SyncFlagToWorld() { } pack := &server.GWPlayerFlag{ SnId: proto.Int32(this.SnId), - RoomId: proto.Int(this.scene.SceneId), + RoomId: this.scene.SceneId, Flag: proto.Int(this.flag), } proto.SetDefaults(pack) @@ -621,7 +621,7 @@ func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, gamingTime := int32(time.Now().Sub(this.scene.GameNowTime).Seconds()) LogChannelSingleton.WriteMQData(model.GenerateGameEvent(model.CreatePlayerGameRecEvent(this.SnId, tax, taxex, changeCoin, validbet, validFlow, in, out, - int32(this.scene.GameId), this.scene.DbGameFree.GetId(), int32(this.scene.GameMode), + int32(this.scene.GameId), this.scene.GetGameFreeId(), int32(this.scene.GameMode), this.scene.GetRecordId(), this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.DeviceOS, this.CreateTime, gamingTime, gameFirstTime, gameFreeFirstTime, gameTimes, gameFreeTimes, this.LastLoginTime, this.TelephonePromoter, this.DeviceId))) diff --git a/gamesrv/base/playermgr.go b/gamesrv/base/playermgr.go index 88144ae..3db0744 100644 --- a/gamesrv/base/playermgr.go +++ b/gamesrv/base/playermgr.go @@ -55,9 +55,9 @@ func (this *PlayerMgr) AddPlayer(id int64, data []byte, ws, gs *netlib.Session) logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v player exist snid=%v", id, oldPlayer.SnId) testFlag = true if oldPlayer.scene != nil { - logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found snid=%v in sceneid=%v", id, oldPlayer.SnId, oldPlayer.scene.SceneId) - if SceneMgrSington.GetScene(oldPlayer.scene.SceneId) != nil { - logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found snid=%v in sceneid=%v SceneMgrSington.GetScene(oldPlayer.scene.sceneId) != nil", id, oldPlayer.SnId, oldPlayer.scene.SceneId) + logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v snid=%v in sceneid=%v", id, oldPlayer.SnId, oldPlayer.scene.SceneId) + if SceneMgrSington.GetScene(int(oldPlayer.scene.SceneId)) != nil { + logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v snid=%v in sceneid=%v SceneMgrSington.GetScene(oldPlayer.scene.sceneId) != nil", id, oldPlayer.SnId, oldPlayer.scene.SceneId) } } this.DelPlayer(id) diff --git a/gamesrv/base/replay_recorder.go b/gamesrv/base/replay_recorder.go index e4157d3..45c9a37 100644 --- a/gamesrv/base/replay_recorder.go +++ b/gamesrv/base/replay_recorder.go @@ -13,11 +13,6 @@ import ( "mongo.games.com/goserver/core/netlib" ) -const ( - ReplayServerType int = 8 - ReplayServerId = 801 -) - var _replayIgnorePacketIds = map[int]bool{} type ReplayRecorder struct { @@ -97,13 +92,13 @@ func (this *ReplayRecorder) Fini(s *Scene) { // todo dev //Rec: this.rs, LogId: proto.String(this.Logid), - GameId: proto.Int32(s.DbGameFree.GetGameId()), - RoomMode: proto.Int32(s.DbGameFree.GetGameMode()), + GameId: int32(s.GetGameId()), + RoomMode: int32(s.GetGameMode()), NumOfGames: proto.Int(s.NumOfGames), Platform: proto.String(s.Platform), DatasVer: proto.Int32(s.rrVer), GameFreeid: proto.Int32(s.GetGameFreeId()), - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, } if s.ClubId != 0 { pack.ClubId = proto.Int32(s.ClubId) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index bd8eeee..2d7ec35 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -11,7 +11,6 @@ import ( "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/core/timer" "mongo.games.com/goserver/core/utils" srvlibproto "mongo.games.com/goserver/srvlib/protocol" @@ -37,163 +36,96 @@ type CanRebindSnId interface { RebindPlayerSnId(oldSnId, newSnId int32) } -type ItemInfo struct { - Id int32 - Num int64 -} - +// todo 结构优化 type Scene struct { - ws *netlib.Session // 大厅服 - Rand *rand.Rand // 随机数生成器 - ExtraData interface{} // 房间数据 - matchData interface{} // 比赛房数据 - aiMgr AIMgr // - WithLocalAI bool // - SceneId int // 房间id - GameId int // 游戏模式id - GameMode int // 弃用了,都是0 - SceneMode int // 房间模式,如:公共房间 common.SceneMode_Public - SceneType int // 场次,新手场,中级场... - Platform string // 平台id - Params []int64 - Creator int32 - agentor int32 - hallId int32 - replayCode string + *server.WGCreateScene + ws *netlib.Session // 大厅服 + Rand *rand.Rand // 随机数生成器 + ExtraData interface{} // 房间数据 + aiMgr AIMgr // + WithLocalAI bool // disbandGen int //第几次解散申请 disbandParam []int64 //解散参数 disbandPos int32 //发起解散的玩家位置 disbandTs int64 //解散发起时间戳 - playerNum int //游戏人数 realPlayerNum int //真实玩家人数 robotNum int //机器人数量 robotLimit int //最大限制机器人数量 robotNumLastInvite int //上次邀请机器人时的数量 - TotalOfGames int //游戏总局数 NumOfGames int //局数 Players map[int32]*Player //参与者 audiences map[int32]*Player //观众 sp ScenePolicy //场景游戏策略 - //mp MatchPolicy //场景比赛策略 - rr *ReplayRecorder //回放记录器 - rrVer int32 //录像的协议版本号 - DbGameFree *server.DB_GameFree //自由场数据 - SceneState SceneState //场景状态 - hDisband timer.TimerHandle //解散handle - StateStartTime time.Time //状态开始时间 - stateEndTime time.Time //状态结束时间 - GameStartTime time.Time //游戏开始计时时间 - GameNowTime time.Time //当局游戏开始时间 - nextInviteTime time.Time //下次邀请机器人时间 - inviteInterval int64 //邀请间隔 - pause bool - Gaming bool - destroyed bool - completed bool - Testing bool //是否为测试场 - graceDestroy bool //等待销毁 - replayAddId int32 - KeyGameId string //游戏类型唯一ID - KeyGamefreeId string //游戏场次唯一id - KeyGameDif string - GroupId int32 //分组id - bEnterAfterStart bool //是否允许中途加入 - ClubId int32 - RoomId string //俱乐部那个包间 - RoomPos int32 //房间桌号 - PumpCoin int32 //抽水比例,同一个俱乐部下面的抽水比例是一定的,百分比 - DealyTime int64 //结算延时时间 - CpCtx model.CoinPoolCtx //水池环境 - CpControlled bool //被水池控制了 - timerRandomRobot int64 - nogDismiss int //检查机器人离场时的局数(同一局只检查一次) - //playerStatement map[int32]*webapi.PlayerStatement //玩家流水记录 - SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 - ChessRank []int32 - Items []*ItemInfo - - BaseScore int32 //tienlen游戏底分 - MatchId int64 //标记本次比赛的id,并不是后台id - MatchFinals bool //比赛场决赛 - MatchRound int64 - MatchCurPlayerNum int64 - MatchNextNeed int64 - MatchType int64 // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 - RealCtrl bool - CycleID string + rr *ReplayRecorder //回放记录器 + rrVer int32 //录像的协议版本号 + SceneState SceneState //场景状态 + StateStartTime time.Time //状态开始时间 + stateEndTime time.Time //状态结束时间 + GameStartTime time.Time //游戏开始计时时间 + GameNowTime time.Time //当局游戏开始时间 + nextInviteTime time.Time //下次邀请机器人时间 + inviteInterval int64 //邀请间隔 + pause bool + Gaming bool + destroyed bool + completed bool + Testing bool //是否为测试场 + graceDestroy bool //等待销毁 + replayAddId int32 + KeyGameId string //游戏类型唯一ID + KeyGamefreeId string //游戏场次唯一id + KeyGameDif string + GroupId int32 //分组id + bEnterAfterStart bool //是否允许中途加入 + ClubId int32 + RoomId string //俱乐部那个包间 + RoomPos int32 //房间桌号 + PumpCoin int32 //抽水比例,同一个俱乐部下面的抽水比例是一定的,百分比 + DealyTime int64 //结算延时时间 + CpCtx model.CoinPoolCtx //水池环境 + CpControlled bool //被水池控制了 + timerRandomRobot int64 + nogDismiss int //检查机器人离场时的局数(同一局只检查一次) + SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 + ChessRank []int32 + RealCtrl bool + CycleID string } -func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, - agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, - bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32) *Scene { +func NewScene(args *CreateSceneParam) *Scene { + gameId := int(args.GetGameId()) + gameMode := int(args.GetGameMode()) sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("Game id %v not register in ScenePolicyPool.", gameId) return nil } + tNow := time.Now() s := &Scene{ - ws: ws, - SceneId: sceneId, - GameId: gameId, - GameMode: gameMode, - SceneMode: sceneMode, - SceneType: int(dbGameFree.GetSceneType()), - Params: params, - Creator: creator, - replayCode: replayCode, + WGCreateScene: args.WGCreateScene, + ws: args.Session, Players: make(map[int32]*Player), audiences: make(map[int32]*Player), sp: sp, - hDisband: timer.TimerHandle(0), GameStartTime: tNow, - hallId: hallId, - Platform: platform, - DbGameFree: dbGameFree, inviteInterval: model.GameParamData.RobotInviteInitInterval, - GroupId: groupId, - bEnterAfterStart: bEnterAfterStart, - TotalOfGames: int(totalOfGames), - BaseScore: baseScore, - playerNum: playerNum, - ChessRank: cherank, + bEnterAfterStart: args.GetEnterAfterStart(), + ChessRank: args.GetChessRank(), + KeyGameId: strconv.Itoa(int(args.GetGameId())), + KeyGamefreeId: strconv.Itoa(int(args.GetDBGameFree().GetId())), + KeyGameDif: args.GetDBGameFree().GetGameDif(), } s.CycleID, _ = model.AutoIncGameLogId() - if s != nil && s.init() { - logger.Logger.Trace("NewScene init success.") - if !s.Testing { - s.rrVer = ReplayRecorderVer[gameId] - s.RecordReplayStart() - } - return s - } else { - logger.Logger.Trace("NewScene init failed.") - return nil - } + s.init() + return s } -//func (this *Scene) BindAIMgr(aimgr AIMgr) { -// this.aiMgr = aimgr -//} - -// 根据gamedifid,转为gameid,然后返回所有的相同gameid的数据 -func (this *Scene) GetTotalTodayDaliyGameData(keyGameId string, pd *Player) *model.PlayerGameStatics { - todayData := model.NewPlayerGameStatics() - - if pd.TodayGameData == nil { - return todayData +func (this *Scene) GetSceneType() int32 { + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetSceneType() } - - if pd.TodayGameData.CtrlData == nil { - return todayData - } - - if info, ok := pd.TodayGameData.CtrlData[keyGameId]; ok { - todayData.TotalIn += info.TotalIn - todayData.TotalOut += info.TotalOut - } - - return todayData + return 0 } func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { @@ -220,10 +152,6 @@ func (this *Scene) init() bool { this.Rand = rand.New(rand.NewSource(sceneRandSeed)) this.nextInviteTime = tNow.Add(time.Second * time.Duration(this.Rand.Int63n(model.GameParamData.RobotInviteInitInterval))) this.RandRobotCnt() - - this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) - this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) - this.KeyGameDif = this.DbGameFree.GetGameDif() return true } @@ -236,22 +164,13 @@ func (this *Scene) GetParam(idx int) int64 { } func (this *Scene) GetBetMap() []int64 { - return this.DbGameFree.GetOtherIntParams() -} - -func (this *Scene) IsDisbanding() bool { - return this.hDisband != timer.TimerHandle(0) + return this.GetDBGameFree().GetOtherIntParams() } func (this *Scene) GetGameFreeId() int32 { - return this.DbGameFree.Id -} -func (this *Scene) GetDBGameFree() *server.DB_GameFree { - return this.DbGameFree -} -func (this *Scene) GetPlatform() string { - return this.Platform + return this.GetDBGameFree().GetId() } + func (this *Scene) GetKeyGameId() string { return this.KeyGameId } @@ -259,10 +178,10 @@ func (this *Scene) SetKeyGameId(keyGameId string) { this.KeyGameId = keyGameId } func (this *Scene) GetSceneId() int { - return this.SceneId + return int(this.SceneId) } func (this *Scene) SetSceneId(sceneId int) { - this.SceneId = sceneId + this.SceneId = int32(sceneId) } func (this *Scene) GetGroupId() int32 { return this.GroupId @@ -283,22 +202,22 @@ func (this *Scene) SetSceneState(state SceneState) { this.SceneState = state } func (this *Scene) GetGameId() int { - return this.GameId + return int(this.GameId) } func (this *Scene) SetGameId(gameId int) { - this.GameId = gameId + this.GameId = int32(gameId) } func (this *Scene) GetPlayerNum() int { - return this.playerNum + return int(this.WGCreateScene.GetPlayerNum()) } func (this *Scene) SetPlayerNum(playerNum int) { - this.playerNum = playerNum + this.PlayerNum = int32(playerNum) } func (this *Scene) GetGameMode() int { - return this.GameMode + return int(this.GameMode) } func (this *Scene) SetGameMode(gameMode int) { - this.GameMode = gameMode + this.GameMode = int32(gameMode) } func (this *Scene) GetGaming() bool { return this.Gaming @@ -319,17 +238,15 @@ func (this *Scene) SetCreator(creator int32) { this.Creator = creator } func (this *Scene) GetSceneMode() int { - return this.SceneMode + return int(this.SceneMode) } func (this *Scene) SetSceneMode(sceneMode int) { - this.SceneMode = sceneMode + this.SceneMode = int32(sceneMode) } func (this *Scene) GetParams() []int64 { return this.Params } -func (this *Scene) SetParams(params []int64) { - this.Params = params -} + func (this *Scene) GetStateStartTime() time.Time { return this.StateStartTime } @@ -453,9 +370,9 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { p.scene = this pack := &gamehall.SCEnterRoom{ - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), - RoomId: proto.Int(this.SceneId), + GameId: this.GameId, + ModeType: this.GameMode, + RoomId: this.SceneId, OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, Params: []int32{}, ClubId: proto.Int32(this.ClubId), @@ -465,7 +382,7 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { if p.IsRob { this.robotNum++ - logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", this.DbGameFree.GetName()+this.DbGameFree.GetTitle(), this.robotNum, this.robotLimit) + logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, this.robotLimit) } else { p.Trusteeship = 0 p.ValidCacheBetTotal = 0 @@ -482,7 +399,7 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { utils.RunPanicless(func() { this.sp.OnPlayerEnter(this, p) }) if p.WBLevel < 0 { - WarningBlackPlayer(p.SnId, this.DbGameFree.Id) + WarningBlackPlayer(p.SnId, this.GetDBGameFree().Id) } this.ResetNextInviteTime() @@ -501,7 +418,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { pack := &gamehall.SCLeaveRoom{ //OpRetCode: p.opCode, //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, OpRetCode: gamehall.OpResultCode_Game(p.OpCode), - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, } if pack.GetOpRetCode() == gamehall.OpResultCode_Game_OPRC_Sucess_Game { //不能这么做,机器人有特殊判定 @@ -523,7 +440,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { //send world离开房间 pack := &server.GWPlayerLeave{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, PlayerId: proto.Int32(p.SnId), Reason: proto.Int(reason), ServiceFee: proto.Int64(p.serviceFee), @@ -533,7 +450,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { LostTimes: proto.Int(p.lostTimes), TotalConvertibleFlow: proto.Int64(p.TotalConvertibleFlow), ValidCacheBetTotal: proto.Int64(p.ValidCacheBetTotal), - MatchId: this.MatchId, + MatchId: this.GetMatch().GetMatchSortId(), CurIsWin: proto.Int64(p.CurIsWin), // 负数:输 0:平局 正数:赢 } matchRobotGrades := p.MatchRobotGrades @@ -551,7 +468,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } pack.GameCoinTs = proto.Int64(p.GameCoinTs) if !p.IsLocal { - data, err := p.MarshalData(this.GameId) + data, err := p.MarshalData(int(this.GameId)) if err == nil { pack.PlayerData = data } @@ -581,7 +498,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } this.robotNum = num } - logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", this.DbGameFree.GetName()+this.DbGameFree.GetTitle(), this.robotNum, this.robotLimit) + logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, this.robotLimit) } else { this.realPlayerNum-- this.RandRobotCnt() @@ -596,9 +513,9 @@ func (this *Scene) AudienceEnter(p *Player, isload bool) { p.scene = this p.MarkFlag(PlayerState_Audience) pack := &gamehall.SCEnterRoom{ - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), - RoomId: proto.Int(this.SceneId), + GameId: this.GameId, + ModeType: this.GameMode, + RoomId: this.SceneId, OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, } proto.SetDefaults(pack) @@ -618,7 +535,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { if !this.CanChangeCoinScene(p) { pack := &gamehall.SCLeaveRoom{ OpRetCode: gamehall.OpResultCode_Game(p.OpCode), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) @@ -630,7 +547,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { delete(this.audiences, p.SnId) //send world离开房间 pack := &server.GWPlayerLeave{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, PlayerId: proto.Int32(p.SnId), Reason: proto.Int(reason), TotalConvertibleFlow: proto.Int64(p.TotalConvertibleFlow), @@ -738,11 +655,11 @@ func (this *Scene) PlayerRehold(snid int32, sid int64, gs *netlib.Session) { func (this *Scene) PlayerReturn(p *Player, isLoaded bool) { logger.Logger.Trace("(this *Scene) PlayerReturn") pack := &gamehall.SCReturnRoom{ - RoomId: proto.Int(this.SceneId), - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), + RoomId: this.SceneId, + GameId: this.GameId, + ModeType: this.GameMode, Params: common.CopySliceInt64ToInt32(this.Params), - HallId: proto.Int32(this.hallId), + HallId: this.GetDBGameFree().GetId(), IsLoaded: proto.Bool(isLoaded), OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, ClubId: proto.Int32(this.ClubId), @@ -964,7 +881,7 @@ func (this *Scene) Destroy(force bool) { } isCompleted := this.sp.IsCompleted(this) || this.completed - SceneMgrSington.DestroyScene(this.SceneId) + SceneMgrSington.DestroyScene(int(this.SceneId)) pack := &server.GWDestroyScene{ SceneId: int64(this.SceneId), IsCompleted: isCompleted, @@ -998,7 +915,7 @@ func (this *Scene) IsCustom() bool { } func (this *Scene) IsFull() bool { - return len(this.Players) >= this.playerNum + return len(this.Players) >= this.GetPlayerNum() } // 大厅场 @@ -1017,15 +934,15 @@ func (this *Scene) IsHundredScene() bool { } func (this *Scene) GetCoinSceneLowerThanKick() int64 { - if this.DbGameFree != nil { - return this.DbGameFree.GetLowerThanKick() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetLowerThanKick() } return 0 } func (this *Scene) GetCoinSceneMaxCoinLimit() int64 { - if this.DbGameFree != nil { - return this.DbGameFree.GetMaxCoinLimit() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetMaxCoinLimit() } return 0 } @@ -1044,7 +961,7 @@ func (this *Scene) CoinInLimitLocal(coin int64) bool { // NotCoinInLimitType 金额超出入场限额,返回踢出类型 func (this *Scene) NotCoinInLimitType(coin int64) int { - if common.IsLocalGame(this.GameId) { + if common.IsLocalGame(int(this.GameId)) { minCoin := this.GetLimitCoin() if minCoin != 0 && coin < minCoin { return common.PlayerLeaveReason_Bekickout @@ -1071,7 +988,7 @@ func (this *Scene) NotCoinInLimitType(coin int64) int { // CoinInLimit 单入场限额检查 func (this *Scene) CoinInLimit(coin int64) bool { - if common.IsLocalGame(this.GameId) { + if common.IsLocalGame(int(this.GameId)) { return this.CoinInLimitLocal(coin) } @@ -1094,7 +1011,7 @@ func (this *Scene) GetLimitCoin() int64 { limitCoin := int64(0) tmpIds := []int32{} for _, data := range srvdata.PBDB_CreateroomMgr.Datas.GetArr() { - if int(data.GameId) == this.GameId && int(data.GameSite) == this.SceneType { + if data.GameId == this.GameId && data.GameSite == this.GetDBGameFree().GetSceneType() { betRange := data.GetBetRange() if len(betRange) == 0 { continue @@ -1143,8 +1060,8 @@ func (this *Scene) CoinOverMaxLimit(coin int64, p *Player) bool { } } } else { - if this.DbGameFree != nil { - limit := this.DbGameFree.GetRobotLimitCoin() + if this.GetDBGameFree() != nil { + limit := this.GetDBGameFree().GetRobotLimitCoin() if len(limit) >= 2 { comp := common.RandInt(int(limit[0]), int(limit[1])) if coin > int64(comp) { @@ -1168,32 +1085,32 @@ func (this *Scene) CorrectBillCoin(coin, limit1, limit2 int64) int64 { } func (this *Scene) GetCoinSceneServiceFee() int32 { - if this.DbGameFree != nil { - return this.DbGameFree.GetServiceFee() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetServiceFee() } return 0 } func (this *Scene) GetCoinSceneTypeId() int32 { - if this.DbGameFree != nil { - return this.DbGameFree.Id + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().Id } return 0 } func (this *Scene) GetCoinSceneName() string { - if this.DbGameFree != nil { - return this.DbGameFree.GetName() + this.DbGameFree.GetTitle() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetName() + this.GetDBGameFree().GetTitle() } return "" } func (this *Scene) GetHundredSceneName() string { - if this.IsHundredScene() && this.DbGameFree != nil { - if this.DbGameFree.GetName() == this.DbGameFree.GetTitle() { - return this.DbGameFree.GetTitle() + if this.IsHundredScene() && this.GetDBGameFree() != nil { + if this.GetDBGameFree().GetName() == this.GetDBGameFree().GetTitle() { + return this.GetDBGameFree().GetTitle() } else { - return this.DbGameFree.GetName() + this.DbGameFree.GetTitle() + return this.GetDBGameFree().GetName() + this.GetDBGameFree().GetTitle() } } return "" @@ -1272,10 +1189,10 @@ func (this *Scene) SyncSceneState(state int) { func (this *Scene) NotifySceneRoundStart(round int) { pack := &server.GWSceneStart{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, CurrRound: proto.Int(round), Start: proto.Bool(true), - MaxRound: proto.Int(this.TotalOfGames), + MaxRound: this.TotalOfGames, } proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) @@ -1283,10 +1200,10 @@ func (this *Scene) NotifySceneRoundStart(round int) { func (this *Scene) NotifySceneRoundPause() { pack := &server.GWSceneStart{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, Start: proto.Bool(false), CurrRound: proto.Int(this.NumOfGames), - MaxRound: proto.Int(this.TotalOfGames), + MaxRound: this.TotalOfGames, } proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) @@ -1295,7 +1212,7 @@ func (this *Scene) NotifySceneRoundPause() { func (this *Scene) SyncGameState(sec, bl int) { if this.SceneState != nil { pack := &server.GWGameState{ - SceneId: proto.Int(this.SceneId), + SceneId: this.SceneId, State: proto.Int(this.SceneState.GetState()), Ts: proto.Int64(time.Now().Unix()), Sec: proto.Int(sec), @@ -1309,8 +1226,8 @@ func (this *Scene) SyncGameState(sec, bl int) { // SyncScenePlayer 游戏开始的时候同步防伙牌数据 func (this *Scene) SyncScenePlayer() { pack := &server.GWScenePlayerLog{ - GameId: proto.Int(this.GameId), - GameFreeId: proto.Int32(this.DbGameFree.GetId()), + GameId: this.GameId, + GameFreeId: proto.Int32(this.GetDBGameFree().GetId()), } for _, value := range this.Players { if value.IsRob || !value.IsGameing() { @@ -1323,7 +1240,7 @@ func (this *Scene) SyncScenePlayer() { func (this *Scene) RecordReplayStart() { if !this.IsHundredScene() && !this.IsMatchScene() { - logger.Logger.Trace("RecordReplayStart-----", this.replayCode, this.NumOfGames, this.replayAddId) + logger.Logger.Trace("RecordReplayStart-----", this.GetReplayCode(), this.NumOfGames, this.replayAddId) id := fmt.Sprintf("%d%d%v%d", this.GameId, this.SceneId, this.GameNowTime.Format(ReplayIdTf), this.replayAddId) this.rr = NewReplayRecorder(id) } @@ -1331,7 +1248,7 @@ func (this *Scene) RecordReplayStart() { func (this *Scene) RecordReplayOver() { if !this.Testing && !this.IsHundredScene() && !this.IsMatchScene() { - logger.Logger.Trace("RecordReplayOver-----", this.replayCode, this.NumOfGames, this.replayAddId) + logger.Logger.Trace("RecordReplayOver-----", this.GetReplayCode(), this.NumOfGames, this.replayAddId) this.replayAddId++ this.rr.Fini(this) @@ -1370,7 +1287,7 @@ func (this *Scene) TryDismissRob(params ...int) { this.nogDismiss = this.NumOfGames //如果是满桌并且是禁止匹配真人,那么保持满桌几局 - if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Forbid && this.IsFull() && rand.Intn(4) == 1 { + if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Forbid && this.IsFull() && rand.Intn(4) == 1 { hasLeave = true } @@ -1386,7 +1303,7 @@ func (this *Scene) TryDismissRob(params ...int) { } } - if !hasLeave && this.DbGameFree.GetMatchTrueMan() != common.MatchTrueMan_Forbid && len(params) > 0 && + if !hasLeave && this.GetDBGameFree().GetMatchTrueMan() != common.MatchTrueMan_Forbid && len(params) > 0 && params[0] == 1 && this.IsFull() && common.RandInt(10000) < 4000 { for _, r := range this.Players { if r.IsRob { @@ -1430,7 +1347,7 @@ func (this *Scene) TryDismissRob(params ...int) { func (this *Scene) CreateGameRecPacket() *server.GWGameRec { return &server.GWGameRec{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, NumOfGames: proto.Int(this.NumOfGames), GameTime: proto.Int(int(time.Now().Sub(this.GameStartTime) / time.Second)), } @@ -1507,7 +1424,7 @@ func (this *Scene) CoinPoolCanOut() bool { if setting != nil { return int32(noRobotPlayerCount) >= setting.GetMinOutPlayerNum() } - return int32(noRobotPlayerCount) >= this.dbGameFree.GetMinOutPlayerNum() + return int32(noRobotPlayerCount) >= this.GetDBGameFree().GetMinOutPlayerNum() */ } @@ -1531,8 +1448,8 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this != nil { if !this.Testing { //测试场屏蔽掉 trend20Lately := gameDetailedParam.Trend20Lately - baseScore := this.DbGameFree.GetBaseScore() - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().GetBaseScore() + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } if this.IsCoinScene() { @@ -1541,13 +1458,13 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if _, ok := mapPlatform[p.Platform]; !ok { mapPlatform[p.Platform] = true log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), - this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), + this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { - log.MatchId = this.MatchId + log.MatchId = this.GetMatch().GetMatchSortId() } if this.IsCustom() { log.CycleId = this.CycleID @@ -1558,13 +1475,13 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga } } else { log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), - this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), + this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { - log.MatchId = this.MatchId + log.MatchId = this.GetMatch().GetMatchSortId() } if this.IsCustom() { log.CycleId = this.CycleID @@ -1628,7 +1545,7 @@ func (this *Scene) SaveFriendRecord(snid int32, isWin int32, billCoin int64, bas if this.SceneMode == common.SceneMode_Private { return } - log := model.NewFriendRecordLogEx(this.Platform, snid, isWin, int32(this.GameId), baseScore, billCoin, this.MatchType) + log := model.NewFriendRecordLogEx(this.Platform, snid, isWin, this.GameId, baseScore, billCoin, int64(this.GetMatch().GetMatchType())) if log != nil { LogChannelSingleton.WriteLog(log) } @@ -1642,12 +1559,12 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo playerEx := this.GetPlayer(snid) //有些结算的时候,玩家已经退场,不要用是否在游戏,0709,修改为扣税后数值 if playerEx != nil && !param.IsLeave && !playerEx.IsRob && (param.IsFree || param.TotalIn != 0 || param.TotalOut != 0) { - totalFlow := param.ValidFlow * int64(this.DbGameFree.GetBetWaterRate()) / 100 + totalFlow := param.ValidFlow * int64(this.GetDBGameFree().GetBetWaterRate()) / 100 playerEx.TotalConvertibleFlow += totalFlow playerEx.TotalFlow += totalFlow playerEx.ValidCacheBetTotal += param.ValidBet //报表统计 - //playerEx.SaveReportForm(int(this.DbGameFree.GetGameClass()), this.SceneMode, this.KeyGameId, + //playerEx.SaveReportForm(int(this.GetDBGameFree().GetGameClass()), this.SceneMode, this.KeyGameId, // param.WinAmountNoAnyTax, totalFlow, param.ValidBet) //分配利润 ProfitDistribution(playerEx, param.TaxCoin, param.ClubPumpCoin, totalFlow) @@ -1663,8 +1580,8 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo this.GameId == common.GameId_TamQuoc { //复仇者联盟强制为0,所有场次操作记录放一起 roomType = 0 } - baseScore := this.DbGameFree.GetBaseScore() - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().GetBaseScore() + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } @@ -1674,10 +1591,10 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo } log := model.NewGamePlayerListLogEx(snid, param.LogId, param.Platform, param.Channel, param.Promoter, param.PackageTag, - int32(this.GameId), baseScore, int32(this.SceneId), this.DbGameFree.GetGameMode(), + this.GameId, baseScore, this.SceneId, int32(this.GetGameMode()), this.GetGameFreeId(), param.TotalIn, param.TotalOut, this.ClubId, this.RoomId, param.TaxCoin, param.ClubPumpCoin, roomType, - param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.DbGameFree.GetGameClass(), - param.IsFirstGame, this.MatchId, this.MatchType, param.IsFree, param.WinSmallGame, param.WinTotal) + param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.GetDBGameFree().GetGameClass(), + param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal) if log != nil { LogChannelSingleton.WriteLog(log) } @@ -1708,9 +1625,9 @@ func (this *Scene) RobotIsLimit() bool { return true } // 房间需要给真人留一个空位 - //if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-this.realPlayerNum-1 <= this.robotNum { + //if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-this.realPlayerNum-1 <= this.robotNum { // 没有真人的房间需要给真人留一个空位 - if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-1 <= this.robotNum { + if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Priority && this.GetPlayerNum()-1 <= this.robotNum { return true } } else if this.IsHundredScene() { @@ -1723,11 +1640,11 @@ func (this *Scene) RobotIsLimit() bool { } func (this *Scene) RandRobotCnt() { - if this.DbGameFree != nil { - if this.DbGameFree.GetMatchMode() == 1 { + if this.GetDBGameFree() != nil { + if this.GetDBGameFree().GetMatchMode() == 1 { return } - numrng := this.DbGameFree.GetRobotNumRng() + numrng := this.GetDBGameFree().GetRobotNumRng() if len(numrng) >= 2 { if numrng[1] == numrng[0] { this.robotLimit = int(numrng[0]) @@ -1748,7 +1665,7 @@ func (this *Scene) GetRobotTime() int64 { } func (this *Scene) IsPreCreateScene() bool { - return this.DbGameFree.GetCreateRoomNum() > 0 + return this.GetDBGameFree().GetCreateRoomNum() > 0 } func (this *Scene) TryInviteRobot() { @@ -1756,7 +1673,7 @@ func (this *Scene) TryInviteRobot() { return } // 游戏配置错误 - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return } // 私有房间不邀请机器人,比赛场部邀请机器人 @@ -1764,11 +1681,11 @@ func (this *Scene) TryInviteRobot() { return } // 队列匹配不邀请机器人 - if this.DbGameFree.GetMatchMode() == 1 { + if this.GetDBGameFree().GetMatchMode() == 1 { return } // 不使用机器人 - if this.DbGameFree.GetBot() == 0 { //机器人不进的场 + if this.GetDBGameFree().GetBot() == 0 { //机器人不进的场 return } @@ -1782,7 +1699,7 @@ func (this *Scene) TryInviteRobot() { return } - switch this.DbGameFree.GetGameType() { + switch this.GetDBGameFree().GetGameType() { case common.GameType_Fishing: if this.robotNum >= this.robotLimit { return @@ -1818,8 +1735,8 @@ func (this *Scene) TryInviteRobot() { } hadCnt := len(this.Players) robCnt = this.robotLimit - this.robotNum - if robCnt > this.playerNum-hadCnt { - robCnt = this.playerNum - hadCnt + if robCnt > this.GetPlayerNum()-hadCnt { + robCnt = this.GetPlayerNum() - hadCnt } } else if this.IsHundredScene() { robCnt = this.robotLimit - this.robotNum @@ -1830,7 +1747,7 @@ func (this *Scene) TryInviteRobot() { return } hadCnt := len(this.Players) - robCnt = this.playerNum - hadCnt + robCnt = this.GetPlayerNum() - hadCnt if this.realPlayerNum == 0 { //一个真人都没有,不让机器人坐满房间 robCnt-- } @@ -1838,7 +1755,7 @@ func (this *Scene) TryInviteRobot() { } if robCnt > 0 { var num int32 - if this.DbGameFree.GameId == common.GameId_ChesstitiansCambodianRobot { + if this.GetDBGameFree().GameId == common.GameId_ChesstitiansCambodianRobot { num = int32(robCnt) } else { num = this.Rand.Int31n(int32(robCnt + 1)) @@ -1847,11 +1764,11 @@ func (this *Scene) TryInviteRobot() { if this.IsCoinScene() /* && this.gaming*/ { //如果牌局正在进行中,一个一个进 num = 1 } - //logger.Logger.Tracef("(this *Scene)(groupid:%v sceneid:%v) TryInviteRobot(%v) current robot(%v+%v) robotlimit(%v)", this.groupId, this.sceneId, this.dbGameFree.GetName()+this.dbGameFree.GetTitle(), this.robotNum, num, this.robotLimit) + //logger.Logger.Tracef("(this *Scene)(groupid:%v sceneid:%v) TryInviteRobot(%v) current robot(%v+%v) robotlimit(%v)", this.groupId, this.sceneId, this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, num, this.robotLimit) //同步下房间里的参数' - NpcServerAgentSingleton.SyncDBGameFree(this.SceneId, this.GetDBGameFree()) + NpcServerAgentSingleton.SyncDBGameFree(int(this.SceneId), this.GetDBGameFree()) //然后再邀请 - NpcServerAgentSingleton.Invite(this.SceneId, int(num), this.DbGameFree.Id) + NpcServerAgentSingleton.Invite(int(this.SceneId), int(num), this.GetDBGameFree().Id) } } } @@ -1883,10 +1800,10 @@ func (this *Scene) IsAllRealInGame() bool { // 是否开启机器人对战游戏 func (this *Scene) IsRobFightGame() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - if this.DbGameFree.GetAi()[0] == 1 && model.GameParamData.IsRobFightTest == true { + if this.GetDBGameFree().GetAi()[0] == 1 && model.GameParamData.IsRobFightTest == true { return true } return false @@ -1915,7 +1832,7 @@ func (this *Scene) RobotLeaveHundred() { //钱多 leave = true reason = common.PlayerLeaveReason_Normal - } else if p.Coin < int64(this.DbGameFree.GetBetLimit()) { + } else if p.Coin < int64(this.GetDBGameFree().GetBetLimit()) { //少于下注限额 leave = true reason = common.PlayerLeaveReason_Normal @@ -1975,7 +1892,7 @@ func (this *Scene) GetRecordId() string { func (this *Scene) RandTakeCoin(p *Player) (takeCoin, leaveCoin, gameTimes int64) { if p.IsRob && p.IsLocal { - dbGameFree := this.DbGameFree + dbGameFree := this.GetDBGameFree() takerng := dbGameFree.GetRobotTakeCoin() if len(takerng) >= 2 && takerng[1] > takerng[0] { if takerng[0] < dbGameFree.GetLimitCoin() { @@ -2014,8 +1931,8 @@ func (this *Scene) TryBillExGameDrop(p *Player) { this.DropCollectBox(p) - baseScore := this.DbGameFree.BaseScore - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().BaseScore + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } if baseScore == 0 { @@ -2023,7 +1940,7 @@ func (this *Scene) TryBillExGameDrop(p *Player) { } // 场次掉落开关 - if this.DbGameFree.IsDrop != 1 { + if this.GetDBGameFree().IsDrop != 1 { return } @@ -2288,7 +2205,7 @@ func (this *Scene) Statistics(param *StaticParam) { return } - _, isNovice := p.NoviceOdds(this.GameId) + _, isNovice := p.NoviceOdds(int(this.GameId)) isControl := this.IsControl(param.HasRobotGaming) // 需要调控的房间 var wbLevel = p.WBLevel // 原来的黑白名单等级; 注意SyncPlayerDatas会修改WBLevel @@ -2373,8 +2290,8 @@ func (this *Scene) Statistics(param *StaticParam) { } // 新手输赢统计 - if !model.GameParamData.CloseNovice && !common.InSliceInt(model.GameParamData.CloseNoviceGame, this.GameId) && isControl && wbLevel == 0 && isNovice { - keyNoviceGameId := common.GetKeyNoviceGameId(this.GameId) + if !model.GameParamData.CloseNovice && !common.InSliceInt(model.GameParamData.CloseNoviceGame, int(this.GameId)) && isControl && wbLevel == 0 && isNovice { + keyNoviceGameId := common.GetKeyNoviceGameId(int(this.GameId)) var gs *model.PlayerGameStatics if data, ok := p.GDatas[keyNoviceGameId]; ok { statics = append(statics, &data.Statics) @@ -2474,7 +2391,7 @@ func (this *Scene) Statistics(param *StaticParam) { } p.WinCoin += totalOut p.TaxCoin += param.GainTax - if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(this.GameId) { + if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(int(this.GameId)) { p.TotalOut += totalOut p.PlayerTax += param.GainTax } @@ -2483,7 +2400,7 @@ func (this *Scene) Statistics(param *StaticParam) { p.FailTimes++ } p.FailCoin += totalIn - if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(this.GameId) { + if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(int(this.GameId)) { p.TotalIn += totalIn } } else { diff --git a/gamesrv/base/scene_mgr.go b/gamesrv/base/scene_mgr.go index 1fef20c..af18138 100644 --- a/gamesrv/base/scene_mgr.go +++ b/gamesrv/base/scene_mgr.go @@ -32,38 +32,47 @@ func (this *SceneMgr) makeKey(gameid, gamemode int) int { return int(gameid*10000 + gamemode) } -func (this *SceneMgr) CreateScene(s *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, - params []int64, agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, - dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32) *Scene { - scene := NewScene(s, sceneId, gameMode, sceneMode, gameId, platform, params, agentor, creator, replayCode, - hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank) +type CreateSceneParam struct { + Session *netlib.Session + *server.WGCreateScene +} + +func (this *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { + scene := NewScene(args) if scene == nil { logger.Logger.Error("(this *SceneMgr) CreateScene, scene == nil") return nil } - this.scenes[scene.SceneId] = scene + + platform := args.GetPlatform() + gameId := args.GetGameId() + gameMode := args.GetGameMode() + gameFreeId := args.GetDBGameFree().GetId() + // 平台标记 + this.scenes[int(scene.SceneId)] = scene if _, ok := this.PlatformScene[platform]; !ok { this.PlatformScene[platform] = true } - // - key := this.makeKey(gameId, gameMode) + // 游戏id索引 + key := this.makeKey(int(gameId), int(gameMode)) if ss, exist := this.scenesByGame[key]; exist { - ss[scene.SceneId] = scene + ss[int(scene.SceneId)] = scene } else { ss = make(map[int]*Scene) - ss[scene.SceneId] = scene + ss[int(scene.SceneId)] = scene this.scenesByGame[key] = ss } - // - if ss, exist := this.scenesByGameFree[dbGameFree.GetId()]; exist { - ss[scene.SceneId] = scene + // 场次id索引 + if ss, exist := this.scenesByGameFree[gameFreeId]; exist { + ss[int(scene.SceneId)] = scene } else { ss = make(map[int]*Scene) - ss[scene.SceneId] = scene - this.scenesByGameFree[dbGameFree.GetId()] = ss + ss[int(scene.SceneId)] = scene + this.scenesByGameFree[gameFreeId] = ss } scene.OnStart() - logger.Logger.Infof("(this *SceneMgr) CreateScene,New scene,id:[%d] replaycode:[%v]", scene.SceneId, replayCode) + logger.Logger.Infof("(this *SceneMgr) CreateScene,New scene,id:[%d] replaycode:[%v]", scene.SceneId, args.GetReplayCode()) + return scene } @@ -71,13 +80,13 @@ func (this *SceneMgr) DestroyScene(sceneId int) { if scene, exist := this.scenes[sceneId]; exist { scene.OnStop() // - key := this.makeKey(scene.GameId, scene.GameMode) + key := this.makeKey(int(scene.GameId), int(scene.GameMode)) if ss, exist := this.scenesByGame[key]; exist { - delete(ss, scene.SceneId) + delete(ss, int(scene.SceneId)) } // if ss, exist := this.scenesByGameFree[scene.GetGameFreeId()]; exist { - delete(ss, scene.SceneId) + delete(ss, int(scene.SceneId)) } delete(this.scenes, sceneId) logger.Logger.Infof("(this *SceneMgr) DestroyScene, sceneid = %v", sceneId) @@ -169,7 +178,7 @@ func (this *SceneMgr) JackPotSync(platform string, gameIds ...int32) { val := s.sp.GetJackPotVal(s) if val > 0 { jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetGameFreeId()), JackPotFund: proto.Int64(val), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) diff --git a/gamesrv/caishen/scenedata_caishen.go b/gamesrv/caishen/scenedata_caishen.go index 677e4a7..fc58b33 100644 --- a/gamesrv/caishen/scenedata_caishen.go +++ b/gamesrv/caishen/scenedata_caishen.go @@ -59,14 +59,14 @@ func (this *CaiShenSceneData) SceneDestroy(force bool) { } func (this *CaiShenSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.XSlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -102,7 +102,7 @@ type CaiShenSpinResult struct { } func (this *CaiShenSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes CaiShenSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -188,7 +188,7 @@ func (this *CaiShenSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -215,7 +215,7 @@ func (this *CaiShenSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *CaiShenSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -223,7 +223,7 @@ func (this *CaiShenSceneData) RecordBurstLog(name string, wincoin, totalbet int6 func (this *CaiShenSceneData) BurstHistory(player *CaiShenPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*caishen.CaiShenBurstHistoryInfo if data != nil { @@ -251,7 +251,7 @@ func (this *CaiShenSceneData) GetLastBurstJackPot() time.Time { } func (this *CaiShenSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -267,7 +267,7 @@ func (this *CaiShenSceneData) SetLastBurstJackPot() { func (this *CaiShenSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -280,20 +280,20 @@ func (this *CaiShenSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *CaiShenSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, int64(bet)) } } @@ -314,11 +314,11 @@ func (this *CaiShenSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/caishen/scenepolicy_caishen.go b/gamesrv/caishen/scenepolicy_caishen.go index 0f9b0f0..5c7a8c3 100644 --- a/gamesrv/caishen/scenepolicy_caishen.go +++ b/gamesrv/caishen/scenepolicy_caishen.go @@ -94,8 +94,8 @@ func (this *ScenePolicyCaiShen) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyCaiShen) OnPlayerEnter, SceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*CaiShenSceneData); ok { playerEx := &CaiShenPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx CaiShenSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -230,14 +230,14 @@ func (this *ScenePolicyCaiShen) GetJackPotVal(s *base.Scene) int64 { func CaiShenSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerData, data *caishen.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &caishen.SCCaiShenRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } @@ -257,7 +257,7 @@ func CaiShenSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *CaiShenSceneDat //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -373,7 +373,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_Error, params) return false } @@ -407,7 +407,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -422,7 +422,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Tracef("CaiShenErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -445,8 +445,8 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - var jackpotParam = sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParam[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + var jackpotParam = sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParam[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -466,7 +466,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -656,7 +656,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op case CaiShenPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &caishen.SCCaiShenPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -847,7 +847,7 @@ func (this *SceneStateCaiShenStart) WinTargetBenchTest(s *base.Scene, p *base.Pl } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -905,7 +905,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { }) caiShenBenchTestTimes++ - fileName := fmt.Sprintf("caishen-total-%v-%d.csv", s.DbGameFree.GetSceneType(), caiShenBenchTestTimes) + fileName := fmt.Sprintf("caishen-total-%v-%d.csv", s.GetDBGameFree().GetSceneType(), caiShenBenchTestTimes) file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm) defer file.Close() if err != nil { @@ -918,7 +918,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { playersFile := make(map[int32]*os.File) oldCoins := make(map[int32]int64) - hasCoin := 1000 * int64(s.DbGameFree.GetBaseScore()) + hasCoin := 1000 * int64(s.GetDBGameFree().GetBaseScore()) robots := make(map[int32]bool) testPlayers := make(map[int32]*base.Player) for _, p := range s.Players { @@ -926,7 +926,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { p.IsRob = false robots[p.SnId] = true } - fileName := fmt.Sprintf("caishen-player%v-%v-%d.csv", p.SnId, s.DbGameFree.GetSceneType(), caiShenBenchTestTimes) + fileName := fmt.Sprintf("caishen-player%v-%v-%d.csv", p.SnId, s.GetDBGameFree().GetSceneType(), caiShenBenchTestTimes) file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm) if err != nil { file, err = os.Create(fileName) @@ -955,7 +955,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { } }() - totalBet := int64(s.DbGameFree.GetBaseScore()) * int64(len(rule.AllBetLines)) + totalBet := int64(s.GetDBGameFree().GetBaseScore()) * int64(len(rule.AllBetLines)) for i := 0; i < BENCH_CNT; i++ { for snid, p := range testPlayers { if playerEx, ok := p.ExtraData.(*CaiShenPlayerData); ok { @@ -970,7 +970,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.WinSmallGame - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, StartCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -1004,7 +1004,7 @@ func CaiShenCheckAndSaveLog(sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerDa //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -1063,8 +1063,8 @@ func CaiShenCheckAndSaveLog(sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerDa GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/chess/scene.go b/gamesrv/chess/scene.go index f65d018..ad40fdf 100644 --- a/gamesrv/chess/scene.go +++ b/gamesrv/chess/scene.go @@ -53,7 +53,7 @@ func getChessVariant(gameId int) int { } func NewSceneEx(s *base.Scene) *SceneEx { - variant := getChessVariant(s.GameId) + variant := getChessVariant(int(s.GameId)) chess := rule.NewChess(variant) chess.Init() sceneEx := &SceneEx{ diff --git a/gamesrv/chess/scenepolicy.go b/gamesrv/chess/scenepolicy.go index a4fbb4f..b5fe410 100644 --- a/gamesrv/chess/scenepolicy.go +++ b/gamesrv/chess/scenepolicy.go @@ -485,7 +485,7 @@ func CreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *SceneEx, playe State: proto.Int32(int32(s.GetSceneState().GetState())), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), NumOfGames: proto.Int(sceneEx.NumOfGames), - TotalOfGames: proto.Int(sceneEx.TotalOfGames), + TotalOfGames: sceneEx.TotalOfGames, CurOpIdx: proto.Int(-1), MasterSnid: proto.Int32(sceneEx.masterSnId), AudienceNum: proto.Int(s.GetAudiencesNum()), @@ -528,7 +528,7 @@ func CreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *SceneEx, playe } pack.MatchFinals = 0 - if s.MatchFinals { + if s.GetMatch().GetIsFinals() { pack.MatchFinals = 1 if s.NumOfGames >= 2 { pack.MatchFinals = 2 @@ -852,7 +852,7 @@ func (this *SceneStateWaitStart) OnTick(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*SceneEx); ok { if sceneEx.IsMatchScene() { delayT := time.Second * 2 - if sceneEx.MatchRound != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 + if sceneEx.GetMatch().GetCurrRound() != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 delayT = time.Second * 4 } if time.Now().Sub(sceneEx.StateStartTime) > delayT { @@ -1215,14 +1215,14 @@ func (this *SceneStateBilled) OnEnter(s *base.Scene) { pack := &chesstitians.SCChesstitiansGameBilled{} chessType := model.ChesstitiansType{ - GameId: sceneEx.GameId, + GameId: int(sceneEx.GameId), RoomId: int32(sceneEx.GetSceneId()), - RoomType: int32(sceneEx.Scene.SceneType), + RoomType: sceneEx.Scene.GetDBGameFree().GetSceneType(), NumOfGames: int32(sceneEx.Scene.NumOfGames), BankId: sceneEx.masterSnId, PlayerCount: rule.MaxNumOfPlayer, BaseScore: s.BaseScore, - TaxRate: s.DbGameFree.GetTaxRate(), + TaxRate: s.GetDBGameFree().GetTaxRate(), RoomMode: s.GetSceneMode(), } @@ -1462,7 +1462,7 @@ func (this *SceneStateBilled) OnLeave(s *base.Scene) { return } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } s.TryRelease() diff --git a/gamesrv/easterisland/scenedata_easterisland.go b/gamesrv/easterisland/scenedata_easterisland.go index 654f5ed..25bfb39 100644 --- a/gamesrv/easterisland/scenedata_easterisland.go +++ b/gamesrv/easterisland/scenedata_easterisland.go @@ -53,14 +53,14 @@ func (this *EasterIslandSceneData) OnPlayerLeave(p *base.Player, reason int) { } func (this *EasterIslandSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.EL_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.EL_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -101,7 +101,7 @@ type EasterIslandSpinResult struct { } func (this *EasterIslandSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes EasterIslandSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -192,7 +192,7 @@ func (this *EasterIslandSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -218,7 +218,7 @@ func (this *EasterIslandSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *EasterIslandSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -226,7 +226,7 @@ func (this *EasterIslandSceneData) RecordBurstLog(name string, wincoin, totalbet func (this *EasterIslandSceneData) BurstHistory(player *EasterIslandPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*easterisland.EasterIslandBurstHistoryInfo if data != nil { @@ -254,7 +254,7 @@ func (this *EasterIslandSceneData) GetLastBurstJackPot() time.Time { } func (this *EasterIslandSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -269,7 +269,7 @@ func (this *EasterIslandSceneData) SetLastBurstJackPot() { func (this *EasterIslandSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -282,20 +282,20 @@ func (this *EasterIslandSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *EasterIslandSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -316,11 +316,11 @@ func (this *EasterIslandSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/easterisland/scenepolicy_easterisland.go b/gamesrv/easterisland/scenepolicy_easterisland.go index 67f98f8..5c211b7 100644 --- a/gamesrv/easterisland/scenepolicy_easterisland.go +++ b/gamesrv/easterisland/scenepolicy_easterisland.go @@ -94,8 +94,8 @@ func (this *ScenePolicyEasterIsland) OnPlayerEnter(s *base.Scene, p *base.Player logger.Logger.Trace("(this *ScenePolicyEasterIsland) OnPlayerEnter, sceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*EasterIslandSceneData); ok { playerEx := &EasterIslandPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx EasterIslandSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -230,14 +230,14 @@ func (this *ScenePolicyEasterIsland) GetJackPotVal(s *base.Scene) int64 { func EasterIslandSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *EasterIslandSceneData, playerEx *EasterIslandPlayerData, data *easterisland.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &easterisland.SCEasterIslandRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } if playerEx != nil { @@ -256,7 +256,7 @@ func EasterIslandSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *EasterIsla //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -367,7 +367,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_Error, params) return false } @@ -401,7 +401,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -413,7 +413,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe //获取当前水池的上下文环境 sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Warnf("EasterIslandErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -430,9 +430,9 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe } else { gamePoolCoin = base.CoinPoolMgr.GetCoin(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额 } - prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 - jackpotParams := sceneEx.DbGameFree.GetJackpot() // 奖池参数 - var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 + jackpotParams := sceneEx.GetDBGameFree().GetJackpot() // 奖池参数 + var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -449,7 +449,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -629,7 +629,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe case EasterIslandPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &easterisland.SCEasterIslandPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -819,7 +819,7 @@ func (this *SceneStateEasterIslandStart) WinTargetBenchTest(s *base.Scene, p *ba } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -873,7 +873,7 @@ func EasterIslandCheckAndSaveLog(sceneEx *EasterIslandSceneData, playerEx *Easte //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -932,8 +932,8 @@ func EasterIslandCheckAndSaveLog(sceneEx *EasterIslandSceneData, playerEx *Easte GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/fishing/action_fish.go b/gamesrv/fishing/action_fish.go index 051c7c8..c59f6b1 100644 --- a/gamesrv/fishing/action_fish.go +++ b/gamesrv/fishing/action_fish.go @@ -406,7 +406,7 @@ func (this *CSFishSkillUseReqHandler) Process(s *netlib.Session, packetid int, d status := false for _, s := range strSlice { num, _ := strconv.Atoi(s) - if num == player.GetScene().SceneType { + if int32(num) == player.GetScene().GetSceneType() { status = true } } @@ -414,7 +414,7 @@ func (this *CSFishSkillUseReqHandler) Process(s *netlib.Session, packetid int, d pack.Result = 1 pack.Status = fishing_proto.SCFishSkillUseResp_ROOM_DISALLOW player.SendToClient(int(fishing_proto.FIPacketID_FISHING_SC_SKILLUSERESP), pack) - fishlogger.Trace("当前房间不允许使用此技能 skillId = %v,sceneType = %v", skillId, player.GetScene().SceneType) + fishlogger.Trace("当前房间不允许使用此技能 skillId = %v,sceneType = %v", skillId, player.GetScene().GetSceneType()) return nil } //判断当前技能在不在CD中 @@ -516,7 +516,7 @@ func (this *CSSkillListReqHandler) Process(s *netlib.Session, packetid int, data pack := &fishing_proto.SCSkillListResp{} for _, skill := range srvdata.PBDB_FishSkillMgr.Datas.Arr { //获取房间类型 - sceneType := player.GetScene().SceneType + sceneType := player.GetScene().GetSceneType() str := skill.Hidden num, err := strconv.Atoi(str) status := true diff --git a/gamesrv/fishing/playerdata_fishing.go b/gamesrv/fishing/playerdata_fishing.go index 66d9e9b..cad0291 100644 --- a/gamesrv/fishing/playerdata_fishing.go +++ b/gamesrv/fishing/playerdata_fishing.go @@ -300,7 +300,7 @@ func (this *FishingPlayerData) SaveDetailedLog(s *base.Scene) { GameCoinTs: proto.Int64(this.GameCoinTs), } gwPlayerData := &server_proto.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), + SceneId: sceneEx.SceneId, GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerData.Datas = append(gwPlayerData.Datas, playerBet) diff --git a/gamesrv/fishing/scenedata_fishing.go b/gamesrv/fishing/scenedata_fishing.go index e8b4bc8..a0afbab 100644 --- a/gamesrv/fishing/scenedata_fishing.go +++ b/gamesrv/fishing/scenedata_fishing.go @@ -108,7 +108,7 @@ func (this *FishingSceneData) init() bool { this.SetPlayerNum(4) this.gameId = this.GetGameId() this.platform = this.GetPlatform() - this.sceneType = int(this.DbGameFree.GetSceneType()) + this.sceneType = int(this.GetDBGameFree().GetSceneType()) this.keyGameId = this.GetKeyGameId() this.testing = this.GetTesting() this.gamefreeId = this.GetGameFreeId() @@ -904,7 +904,7 @@ func (this *FishingSceneData) fishSettlements(fishs []*Fish, player *FishingPlay } //BOSS鱼死亡 更新BOSS池和个人池 if value.IsBoss == fishing.Boss { - bossPond := base.GetCoinPoolMgr().GetBossPond(this.DbGameFree.SceneType) + bossPond := base.GetCoinPoolMgr().GetBossPond(this.GetDBGameFree().SceneType) this.isBossDie(player, int64(dropCoin), bossPond) } @@ -1507,7 +1507,7 @@ func (this *FishingSceneData) AddBossPond(player *FishingPlayerData, fishtype in // 减掉个人池数值 if score > 0 { player.MoneyPond -= score - base.GetCoinPoolMgr().AddBossPond(this.DbGameFree.SceneType, score) + base.GetCoinPoolMgr().AddBossPond(this.GetDBGameFree().SceneType, score) } } @@ -1521,7 +1521,7 @@ func (this *FishingSceneData) isBossDie(player *FishingPlayerData, score int64, minNum = bossPond } player.MoneyPond += minNum - base.GetCoinPoolMgr().AddBossPond(this.DbGameFree.SceneType, -minNum) + base.GetCoinPoolMgr().AddBossPond(this.GetDBGameFree().SceneType, -minNum) fishlogger.Infof("玩家:%v,Boss奖池剩余金币数量:%v\n", player.SnId, bossPond) } diff --git a/gamesrv/fruits/playerdata_fruits.go b/gamesrv/fruits/playerdata_fruits.go index 0a1d098..6601c36 100644 --- a/gamesrv/fruits/playerdata_fruits.go +++ b/gamesrv/fruits/playerdata_fruits.go @@ -101,7 +101,7 @@ func (p *FruitsPlayerData) Clear() { p.weightPos = 0 } func (p *FruitsPlayerData) TestCode(eleLineAppearRate [][]int32, sceneEx *FruitsSceneData) bool { - //if sceneEx.DbGameFree.GetId() == 3060004 { + //if sceneEx.GetDBGameFree().GetId() == 3060004 { // p.result.CreateLine(eleLineAppearRate, p.gameState == fruits.FreeGame) // if p.testIdx == 1 { // //test mary @@ -186,7 +186,7 @@ func (p *FruitsPlayerData) CreateResult(eleLineAppearRate [][]int32, sceneEx *Fr case 5: winjackpot = int64(math.Ceil(float64(JackPotVal) * 0.4 / float64(fruits.NowByte))) } - if winjackpot < int64(sceneEx.DbGameFree.GetJackpotMin())*fruits.NowByte { + if winjackpot < int64(sceneEx.GetDBGameFree().GetJackpotMin())*fruits.NowByte { isNeed = false break } diff --git a/gamesrv/fruits/scenedata_fruits.go b/gamesrv/fruits/scenedata_fruits.go index d21bf4e..94f20de 100644 --- a/gamesrv/fruits/scenedata_fruits.go +++ b/gamesrv/fruits/scenedata_fruits.go @@ -40,7 +40,7 @@ func NewFruitsSceneData(s *base.Scene) *FruitsSceneData { func (s *FruitsSceneData) Init() { s.LoadJackPotData() //for _, data := range srvdata.PBDB_SlotRateWeightMgr.Datas.Arr { - // if data.Id == s.DbGameFree.Id { + // if data.Id == s.GetDBGameFree().Id { // //s.levelRate = append(s.levelRate, data.EleWeight1) // //s.slotRateWeightTotal = append(s.slotRateWeightTotal, data.EleWeight1, data.EleWeight2, data.EleWeight3, data.EleWeight4, data.EleWeight5) // } @@ -59,12 +59,12 @@ func (s *FruitsSceneData) SceneDestroy(force bool) { } func (s *FruitsSceneData) AddPrizeCoin(playerEx *FruitsPlayerData) { val := playerEx.betCoin - tax := int64(math.Ceil(float64(val) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + tax := int64(math.Ceil(float64(val) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.AddServiceFee(tax) val -= tax - addPrizeCoin := int64(math.Floor(float64(val*fruits.NowByte*int64(s.DbGameFree.GetJackpotRatio())) / 1000)) //扩大10000倍 + addPrizeCoin := int64(math.Floor(float64(val*fruits.NowByte*int64(s.GetDBGameFree().GetJackpotRatio())) / 1000)) //扩大10000倍 s.jackpot.AddToSmall(playerEx.IsRob, addPrizeCoin) logger.Logger.Tracef("奖池增加...AddPrizeCoin... %f", float64(addPrizeCoin)/float64(fruits.NowByte)) base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) @@ -95,7 +95,7 @@ func (s *FruitsSceneData) OnPlayerLeave(p *base.Player, reason int) { if playerEx.winCoin != 0 { //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, playerEx.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, playerEx.winCoin, false) - //tax := int64(math.Ceil(float64(playerEx.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(playerEx.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.winCoin -= tax //p.AddServiceFee(tax) @@ -140,7 +140,7 @@ func (s *FruitsSceneData) Win(p *FruitsPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.winCoin, false) - //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.winCoin -= tax //p.AddServiceFee(tax) @@ -210,7 +210,7 @@ func (s *FruitsSceneData) LoadJackPotData() { base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) } else { s.jackpot = &base.SlotJackpotPool{} - jp := s.DbGameFree.GetJackpot() + jp := s.GetDBGameFree().GetJackpot() if len(jp) > 0 { s.jackpot.Small += int64(jp[0] * 10000) } @@ -244,7 +244,7 @@ func (s *FruitsSceneData) SaveLog(p *FruitsPlayerData, isOffline int) { } } FruitsType := model.FruitsType{ - RoomId: s.SceneId, + RoomId: int(s.SceneId), BasicScore: int32(p.oneBetCoin), PlayerSnId: p.SnId, BeforeCoin: p.startCoin, @@ -372,7 +372,7 @@ func (s *FruitsSceneData) SendPlayerBet(p *FruitsPlayerData) { Tax: proto.Int64(p.taxCoin), } gwPlayerBet := &server.GWPlayerData{ - GameFreeId: proto.Int32(s.DbGameFree.GetId()), + GameFreeId: proto.Int32(s.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) s.SyncPlayerDatas(&base.PlayerDataParam{ @@ -604,8 +604,8 @@ func (s *FruitsSceneData) GetEleWeight(needpos int32) (norms, frees, marys [][]i curCoin := base.CoinPoolMgr.GetCoin(s.GetGameFreeId(), s.Platform, s.GroupId) curCoin = int64(math.Floor(float64(curCoin) / float64(fruits.NowByte))) - for i := len(s.DbGameFree.BalanceLine) - 1; i >= 0; i-- { - balance := s.DbGameFree.BalanceLine[i] + for i := len(s.GetDBGameFree().BalanceLine) - 1; i >= 0; i-- { + balance := s.GetDBGameFree().BalanceLine[i] if curCoin >= int64(balance) { key = int32(i) break diff --git a/gamesrv/fruits/scenepolicy_fruits.go b/gamesrv/fruits/scenepolicy_fruits.go index 292247b..f728625 100644 --- a/gamesrv/fruits/scenepolicy_fruits.go +++ b/gamesrv/fruits/scenepolicy_fruits.go @@ -148,16 +148,16 @@ func FruitsSendRoomInfo(s *base.Scene, sceneEx *FruitsSceneData, playerEx *Fruit func FruitsCreateRoomInfoPacket(s *base.Scene, sceneEx *FruitsSceneData, playerEx *FruitsPlayerData) interface{} { //房间信息 pack := &protocol.SCFruitsRoomInfo{ - RoomId: proto.Int(s.SceneId), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.SceneMode), - SceneType: proto.Int(s.SceneType), + RoomId: s.SceneId, + GameId: s.GameId, + RoomMode: s.SceneMode, + SceneType: s.GetSceneType(), Params: common.CopySliceInt64ToInt32(s.Params), NumOfGames: proto.Int(sceneEx.NumOfGames), State: proto.Int(s.SceneState.GetState()), - ParamsEx: s.DbGameFree.OtherIntParams, - GameFreeId: proto.Int32(s.DbGameFree.Id), - //BetLimit: s.DbGameFree.BetLimit, + ParamsEx: s.GetDBGameFree().OtherIntParams, + GameFreeId: proto.Int32(s.GetDBGameFree().Id), + //BetLimit: s.GetDBGameFree().BetLimit, } //自己的信息 @@ -299,11 +299,11 @@ func (this *SceneBaseStateFruits) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*FruitsSceneData); ok { //for _, p := range sceneEx.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // sceneEx.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.DbGameFree.GetPlayNumLimit()) { + // sceneEx.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.GetDBGameFree().GetPlayNumLimit()) { // s.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} @@ -397,7 +397,7 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc //只有开始算操作 p.LastOPTimer = time.Now() idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) <= idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) <= idx { pack := &protocol.SCFruitsOp{ OpCode: proto.Int(opcode), OpRetCode: proto.Int(3), @@ -419,12 +419,12 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc if playerEx.gameState == fruits.Normal { playerEx.freeTotal = 0 playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / 9 //playerEx.isReportGameEvent = true playerEx.noWinTimes++ - if playerEx.Coin < int64(s.DbGameFree.GetBetLimit()) { + if playerEx.Coin < int64(s.GetDBGameFree().GetBetLimit()) { //押注限制(低于该值不能押注) pack := &protocol.SCFruitsOp{ OpCode: proto.Int(opcode), @@ -486,9 +486,9 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc case fruits.FruitsPlayerOpSwitch: if len(params) > 0 && playerEx.freeTimes == 0 && playerEx.maryFreeTimes == 0 { idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) > idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) > idx { playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / 9 } } diff --git a/gamesrv/iceage/scenedata_iceage.go b/gamesrv/iceage/scenedata_iceage.go index afdd05b..2ff4e9e 100644 --- a/gamesrv/iceage/scenedata_iceage.go +++ b/gamesrv/iceage/scenedata_iceage.go @@ -67,7 +67,7 @@ func (this *IceAgeSceneData) init() bool { this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.GetPlatform()) @@ -238,7 +238,7 @@ func (this *IceAgeSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -264,7 +264,7 @@ func (this *IceAgeSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *IceAgeSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -272,7 +272,7 @@ func (this *IceAgeSceneData) RecordBurstLog(name string, wincoin, totalbet int64 func (this *IceAgeSceneData) BurstHistory(player *IceAgePlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*iceage.IceAgeBurstHistoryInfo if data != nil { @@ -300,7 +300,7 @@ func (this *IceAgeSceneData) GetLastBurstJackPot() time.Time { } func (this *IceAgeSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -313,7 +313,7 @@ func (this *IceAgeSceneData) SetLastBurstJackPot() { func (this *IceAgeSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -324,20 +324,20 @@ func (this *IceAgeSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *IceAgeSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -358,11 +358,11 @@ func (this *IceAgeSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/iceage/scenepolicy_iceage.go b/gamesrv/iceage/scenepolicy_iceage.go index 0ff231d..5313337 100644 --- a/gamesrv/iceage/scenepolicy_iceage.go +++ b/gamesrv/iceage/scenepolicy_iceage.go @@ -253,7 +253,7 @@ func IceAgeSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *IceAgeSceneData, pack.Players = append(pack.Players, pd) pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.TotalPriceBonus = proto.Int64(playerEx.totalPriceBonus) pack.SpinID = proto.Int64(playerEx.spinID) } @@ -681,7 +681,7 @@ func (this *SceneStateIceAgeStart) OnPlayerOp(s *base.Scene, p *base.Player, opc case IceAgePlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GetGameId()) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), s.GetGameId()) pack := &iceage.SCIceAgePlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -982,7 +982,7 @@ func IceAgeCheckAndSaveLog(sceneEx *IceAgeSceneData, playerEx *IceAgePlayerData) GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), + SceneId: sceneEx.SceneId, GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) diff --git a/gamesrv/richblessed/scenedata_richblessed.go b/gamesrv/richblessed/scenedata_richblessed.go index fa4110f..9d31d45 100644 --- a/gamesrv/richblessed/scenedata_richblessed.go +++ b/gamesrv/richblessed/scenedata_richblessed.go @@ -58,13 +58,13 @@ func (s *RichBlessedSceneData) SceneDestroy(force bool) { } func (s *RichBlessedSceneData) AddPrizeCoin(playerEx *RichBlessedPlayerData) { val := playerEx.betCoin - tax := int64(math.Ceil(float64(val) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + tax := int64(math.Ceil(float64(val) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.AddServiceFee(tax) val -= tax - addPrizeCoin := val * richblessed.NowByte * int64(s.DbGameFree.GetJackpotRatio()) //扩大10000倍 - jk1 := int64(math.Floor(float64(addPrizeCoin) / 1000 / 4)) //千分之奖池比例 分四份 + addPrizeCoin := val * richblessed.NowByte * int64(s.GetDBGameFree().GetJackpotRatio()) //扩大10000倍 + jk1 := int64(math.Floor(float64(addPrizeCoin) / 1000 / 4)) //千分之奖池比例 分四份 s.jackpot.AddToGrand(playerEx.IsRob, jk1) s.jackpot.AddToBig(playerEx.IsRob, jk1) s.jackpot.AddToMiddle(playerEx.IsRob, jk1) @@ -177,7 +177,7 @@ func (s *RichBlessedSceneData) Win(p *RichBlessedPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.winCoin, false) - //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.winCoin -= tax //p.AddServiceFee(tax) @@ -198,7 +198,7 @@ func (s *RichBlessedSceneData) JACKPOTWin(p *RichBlessedPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.JackwinCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.JackwinCoin, false) - //tax := int64(math.Ceil(float64(p.JackwinCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.JackwinCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.JackwinCoin -= tax //p.AddServiceFee(tax) @@ -271,7 +271,7 @@ func (s *RichBlessedSceneData) LoadJackPotData() { base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) } else { s.jackpot = &base.SlotJackpotPool{} - jp := s.DbGameFree.GetJackpot() + jp := s.GetDBGameFree().GetJackpot() if len(jp) > 0 { s.jackpot.Small += int64(jp[0] * 10000) } @@ -300,7 +300,7 @@ func (s *RichBlessedSceneData) SaveLog(p *RichBlessedPlayerData, isOffline int) } RichBlessed := model.RichBlessedType{ - RoomId: s.SceneId, + RoomId: int(s.SceneId), BasicScore: int32(p.oneBetCoin), PlayerSnId: p.SnId, BeforeCoin: p.startCoin, @@ -388,8 +388,8 @@ func (s *RichBlessedSceneData) GetEleWeight(needpos int32) (norms, frees [][]int curCoin := base.CoinPoolMgr.GetCoin(s.GetGameFreeId(), s.Platform, s.GroupId) curCoin = int64(math.Floor(float64(curCoin) / float64(richblessed.NowByte))) - for i := len(s.DbGameFree.BalanceLine) - 1; i >= 0; i-- { - balance := s.DbGameFree.BalanceLine[i] + for i := len(s.GetDBGameFree().BalanceLine) - 1; i >= 0; i-- { + balance := s.GetDBGameFree().BalanceLine[i] if curCoin >= int64(balance) { key = int32(i) break @@ -426,7 +426,7 @@ func (s *RichBlessedSceneData) GetEleWeight(needpos int32) (norms, frees [][]int } func (s *RichBlessedSceneData) CreateResult(eleLineAppearRate [][]int32, playerEx *RichBlessedPlayerData) { - //if s.DbGameFree.GetId() == 3070004 { + //if s.GetDBGameFree().GetId() == 3070004 { // playerEx.TestCode(eleLineAppearRate) //} else { playerEx.result.CreateLine(eleLineAppearRate) @@ -448,7 +448,7 @@ func (s *RichBlessedSceneData) SendPlayerBet(p *RichBlessedPlayerData) { GameCoinTs: p.GameCoinTs, } gwPlayerBet := &server.GWPlayerData{ - GameFreeId: proto.Int32(s.DbGameFree.GetId()), + GameFreeId: proto.Int32(s.GetDBGameFree().GetId()), SceneId: int32(s.SceneId), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) diff --git a/gamesrv/richblessed/scenepolicy_richblessed.go b/gamesrv/richblessed/scenepolicy_richblessed.go index 73ff76a..c914417 100644 --- a/gamesrv/richblessed/scenepolicy_richblessed.go +++ b/gamesrv/richblessed/scenepolicy_richblessed.go @@ -71,7 +71,7 @@ func (this *ScenePolicyRichBlessed) OnPlayerEnter(s *base.Scene, p *base.Player) if s == nil || p == nil { return } - logger.Logger.Trace("(this *ScenePolicyRichBlessed) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name, "bet:", s.DbGameFree.GetOtherIntParams()) + logger.Logger.Trace("(this *ScenePolicyRichBlessed) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name, "bet:", s.GetDBGameFree().GetOtherIntParams()) if sceneEx, ok := s.GetExtraData().(*RichBlessedSceneData); ok { playerEx := &RichBlessedPlayerData{Player: p} playerEx.init() @@ -148,15 +148,15 @@ func RichBlessedSendRoomInfo(s *base.Scene, sceneEx *RichBlessedSceneData, playe func RichBlessedCreateRoomInfoPacket(s *base.Scene, sceneEx *RichBlessedSceneData, playerEx *RichBlessedPlayerData) interface{} { //房间信息 pack := &protocol.SCRBRoomInfo{ - RoomId: proto.Int(s.SceneId), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.SceneMode), - SceneType: proto.Int(s.SceneType), + RoomId: s.SceneId, + GameId: s.GameId, + RoomMode: s.SceneMode, + SceneType: s.GetSceneType(), Params: common.CopySliceInt64ToInt32(s.Params), NumOfGames: proto.Int(sceneEx.NumOfGames), State: proto.Int(s.SceneState.GetState()), - ParamsEx: common.Int64ToInt32(s.DbGameFree.OtherIntParams), //s.GetParamsEx(), - //BetLimit: s.DbGameFree.BetLimit, + ParamsEx: common.Int64ToInt32(s.GetDBGameFree().OtherIntParams), //s.GetParamsEx(), + //BetLimit: s.GetDBGameFree().BetLimit, NowGameState: proto.Int(playerEx.gameState), BetIdx: proto.Int(playerEx.betIdx), @@ -172,11 +172,11 @@ func RichBlessedCreateRoomInfoPacket(s *base.Scene, sceneEx *RichBlessedSceneDat WinFreeTimes: proto.Int32(int32(playerEx.nowFreeTimes)), JackpotEle: proto.Int32(playerEx.result.JackpotEle), WinJackpot: proto.Int64(playerEx.JackwinCoin), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), } - if playerEx.oneBetCoin == 0 && len(s.DbGameFree.GetOtherIntParams()) != 0 { // 初始化客户端jack显示 - oneBetCoin := int64(s.DbGameFree.GetOtherIntParams()[0] / richblessed.LineNum) + if playerEx.oneBetCoin == 0 && len(s.GetDBGameFree().GetOtherIntParams()) != 0 { // 初始化客户端jack显示 + oneBetCoin := int64(s.GetDBGameFree().GetOtherIntParams()[0] / richblessed.LineNum) pack.SmallJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.BlueGirl] pack.MiddleJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.BlueBoy] pack.BigJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.GoldGirl] @@ -302,11 +302,11 @@ func (this *SceneBaseStateRichBlessed) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*RichBlessedSceneData); ok { //for _, p := range sceneEx.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // sceneEx.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.DbGameFree.GetPlayNumLimit()) { + // sceneEx.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.GetDBGameFree().GetPlayNumLimit()) { // s.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} @@ -401,7 +401,7 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player //只有开始算操作 p.LastOPTimer = time.Now() idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) <= idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) <= idx { pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), OpRetCode: proto.Int(3), @@ -423,13 +423,13 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player if playerEx.gameState == richblessed.Normal { logger.Logger.Tracef("(this *SceneStateStartRichBlessed) OnPlayerOp, 下注 %v %v %v", playerEx.betCoin, playerEx.maxbetCoin, playerEx.oneBetCoin) playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) - maxidx := len(sceneEx.DbGameFree.GetOtherIntParams()) - 1 - playerEx.maxbetCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[maxidx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) + maxidx := len(sceneEx.GetDBGameFree().GetOtherIntParams()) - 1 + playerEx.maxbetCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[maxidx]) playerEx.oneBetCoin = playerEx.betCoin / richblessed.LineNum // 单注 playerEx.noWinTimes++ - if playerEx.Coin < int64(s.DbGameFree.GetBetLimit()) { + if playerEx.Coin < int64(s.GetDBGameFree().GetBetLimit()) { //押注限制(低于该值不能押注) pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), @@ -495,9 +495,9 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player case richblessed.RichBlessedPlayerOpSwitch: if len(params) > 0 && playerEx.freeTimes == 0 { idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) > idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) > idx { playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / richblessed.LineNum pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), diff --git a/gamesrv/smallrocket/scene.go b/gamesrv/smallrocket/scene.go index b95f183..d7fec18 100644 --- a/gamesrv/smallrocket/scene.go +++ b/gamesrv/smallrocket/scene.go @@ -271,15 +271,15 @@ func (this *SceneEx) init() bool { } func (this *SceneEx) GetBaseScore() int32 { //游戏底分 - if this.DbGameFree != nil { - return this.DbGameFree.GetBaseScore() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetBaseScore() } return 1 } func (this *SceneEx) GetBetMaxCoin() int32 { //游戏底分 - if this.DbGameFree != nil { - return this.DbGameFree.GetBaseScore() * 10000 + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetBaseScore() * 10000 } return 1 * 10000 } diff --git a/gamesrv/tamquoc/scenedata_tamquoc.go b/gamesrv/tamquoc/scenedata_tamquoc.go index bf35be4..69891c1 100644 --- a/gamesrv/tamquoc/scenedata_tamquoc.go +++ b/gamesrv/tamquoc/scenedata_tamquoc.go @@ -52,14 +52,14 @@ func (this *TamQuocSceneData) SceneDestroy(force bool) { } func (this *TamQuocSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -95,7 +95,7 @@ type TamQuocSpinResult struct { } func (this *TamQuocSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes TamQuocSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -114,7 +114,7 @@ func (this *TamQuocSceneData) CalcLinePrize(cards []int, betLines []int64, betVa if spinRes.TotalPrizeJackpot == 0 { // 第一个爆奖 获取当前奖池所有 prizeJackpot = this.jackpot.VirtualJK } else { // 之后的爆奖 奖励为奖池初值 - prizeJackpot = int64(this.DbGameFree.GetJackpot()[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + prizeJackpot = int64(this.GetDBGameFree().GetJackpot()[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } prizeJackpot = calcTaxScore(prizeJackpot, &spinRes.TotalTaxScore) spinRes.TotalPrizeJackpot += prizeJackpot @@ -177,7 +177,7 @@ func (this *TamQuocSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -204,7 +204,7 @@ func (this *TamQuocSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *TamQuocSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -212,7 +212,7 @@ func (this *TamQuocSceneData) RecordBurstLog(name string, wincoin, totalbet int6 func (this *TamQuocSceneData) BurstHistory(player *TamQuocPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*tamquoc.TamQuocBurstHistoryInfo if data != nil { @@ -240,7 +240,7 @@ func (this *TamQuocSceneData) GetLastBurstJackPot() time.Time { } func (this *TamQuocSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -254,7 +254,7 @@ func (this *TamQuocSceneData) SetLastBurstJackPot() { func (this *TamQuocSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -265,20 +265,20 @@ func (this *TamQuocSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *TamQuocSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, int64(bet)) } } @@ -299,11 +299,11 @@ func (this *TamQuocSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/tamquoc/scenepolicy_tamquoc.go b/gamesrv/tamquoc/scenepolicy_tamquoc.go index f2cd36b..9d1aac5 100644 --- a/gamesrv/tamquoc/scenepolicy_tamquoc.go +++ b/gamesrv/tamquoc/scenepolicy_tamquoc.go @@ -90,8 +90,8 @@ func (this *ScenePolicyTamQuoc) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyTamQuoc) OnPlayerEnter, sceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*TamQuocSceneData); ok { playerEx := &TamQuocPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx TamQuocSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -226,10 +226,10 @@ func (this *ScenePolicyTamQuoc) GetJackPotVal(s *base.Scene) int64 { func TamQuocSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerData, data *tamquoc.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &tamquoc.SCTamQuocRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), @@ -252,7 +252,7 @@ func TamQuocSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *TamQuocSceneDat //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 && playerEx.bonusGameStartTime.Add(TamQuocBonusGamePickTime).Before(time.Now()) { playerEx.totalPriceBonus = 0 @@ -339,7 +339,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_Error, params) return false } @@ -373,7 +373,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -388,7 +388,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Tracef("TamQuocErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -410,8 +410,8 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - var jackpotParam = sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParam[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + var jackpotParam = sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParam[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -431,7 +431,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op //统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -454,11 +454,11 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op var slotDataIsOk bool for i := 0; i < 3; i++ { slotData = rule.GenerateSlotsData_v2(symbolType) - //if sceneEx.DbGameFree.GetSceneType() == 1 { + //if sceneEx.GetDBGameFree().GetSceneType() == 1 { // slotData = []int{1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7} //} spinRes = sceneEx.CalcLinePrize(slotData, playerEx.betLines, params[0]) - //if sceneEx.DbGameFree.GetSceneType() == 1 { + //if sceneEx.GetDBGameFree().GetSceneType() == 1 { // slotDataIsOk = true // break //} @@ -641,7 +641,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op case TamQuocPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &tamquoc.SCTamQuocPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -759,7 +759,7 @@ func TamQuocCheckAndSaveLog(sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerDa //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -818,8 +818,8 @@ func TamQuocCheckAndSaveLog(sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerDa GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/thirteen/scene.go b/gamesrv/thirteen/scene.go index 1236c1e..af3c1b7 100644 --- a/gamesrv/thirteen/scene.go +++ b/gamesrv/thirteen/scene.go @@ -368,15 +368,15 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl } func (this *SceneEx) GetBaseScore() int64 { //游戏底分 - if this.DbGameFree.FreeMode == 1 { + if this.GetDBGameFree().FreeMode == 1 { baseScore := this.GetParam(rule.ParamBaseScore) if baseScore > 0 { return baseScore } } - if this.DbGameFree != nil { - return int64(this.DbGameFree.GetBaseScore()) + if this.GetDBGameFree() != nil { + return int64(this.GetDBGameFree().GetBaseScore()) } return 1 } @@ -1268,7 +1268,7 @@ func (this *SceneEx) CountBilled() { } if playerEx.gainCoin > 0 { gainCoin := playerEx.gainCoin - playerEx.gainCoin = playerEx.gainCoin * int64(10000-this.DbGameFree.GetTaxRate()) / 10000 + playerEx.gainCoin = playerEx.gainCoin * int64(10000-this.GetDBGameFree().GetTaxRate()) / 10000 playerEx.taxCoin = gainCoin - playerEx.gainCoin } logger.Logger.Tracef("玩家分数 %v, coin:%v tax:%v win:%v", playerEx.SnId, playerEx.gainCoin, playerEx.taxCoin, playerEx.winAllPlayers) @@ -1334,7 +1334,7 @@ func (this *SceneEx) SendHandCardOdds() { if seat.IsRob { robotPlayers = append(robotPlayers, seat) } else { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotNum > 0) seat.playerPool = int(this.PlayerPoolOdds(seat.Player)) if seat.odds > 0 { realPlayersGood = append(realPlayersGood, seat) diff --git a/gamesrv/thirteen/scenepolicy.go b/gamesrv/thirteen/scenepolicy.go index e9ab157..a577c4f 100644 --- a/gamesrv/thirteen/scenepolicy.go +++ b/gamesrv/thirteen/scenepolicy.go @@ -1258,9 +1258,9 @@ func (this *StateBilled) OnEnter(s *base.Scene) { if sceneEx.gamePlayerNum-sceneEx.robotNum > 0 { /////////////////////////////////////统计牌局详细记录 thirteenWaterType := model.ThirteenWaterType{ - RoomId: int32(sceneEx.SceneId), + RoomId: sceneEx.SceneId, RoomRounds: int32(sceneEx.NumOfGames), - RoomType: int32(sceneEx.SceneType), + RoomType: sceneEx.GetSceneType(), BaseScore: int32(sceneEx.GetBaseScore()), NowRound: int32(sceneEx.NumOfGames), ClubRate: sceneEx.Scene.PumpCoin, @@ -1462,7 +1462,7 @@ func (this *StateBilled) OnLeave(s *base.Scene) { s.TryDismissRob() } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } s.TryRelease() diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 22634d4..6b8c890 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -386,7 +386,7 @@ func (this *TienLenSceneData) BroadcastOpPos() { for _, seat := range this.seats { if seat != nil && seat.IsGameing() { if !seat.IsRob { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotGamingNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotGamingNum > 0) if seat.odds < 0 { B -= seat.odds } @@ -538,7 +538,7 @@ func (this *TienLenSceneData) IsTienLenToEnd() bool { return common.IsTienLenToEnd(this.GetGameId()) } func (this *TienLenSceneData) GetFreeGameSceneType() int32 { - return int32(this.SceneType) + return this.GetSceneType() } // 比赛场发牌 @@ -1076,7 +1076,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { if seat.IsRob { robotPlayers = append(robotPlayers, seat) } else { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotGamingNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotGamingNum > 0) seat.playerPool = int(this.PlayerPoolOdds(seat.Player)) if seat.odds > 0 { realPlayersGood = append(realPlayersGood, seat) @@ -1087,7 +1087,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { } else { realPlayers = append(realPlayers, seat) } - _, isNovice := seat.NoviceOdds(this.GameId) + _, isNovice := seat.NoviceOdds(int(this.GameId)) if isNovice { novicePlayers = append(novicePlayers, seat) } else { @@ -1967,7 +1967,7 @@ func (this *TienLenSceneData) TrySmallGameBilled() { logger.Logger.Trace("宠物技能抵挡炸弹生效,发送消息 SCTienLenPetSkillRes: ", pack) } if score != 0 { - taxRate := this.DbGameFree.GetTaxRate() //万分比 + taxRate := this.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) //税后 bombTaxScore := score - gainScore // win diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 021df7d..5b8ce7b 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -423,7 +423,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen State: proto.Int32(int32(s.GetSceneState().GetState())), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), NumOfGames: proto.Int(sceneEx.NumOfGames), - TotalOfGames: proto.Int(sceneEx.TotalOfGames), + TotalOfGames: sceneEx.TotalOfGames, CurOpIdx: proto.Int(-1), MasterSnid: proto.Int32(sceneEx.masterSnid), AudienceNum: proto.Int(s.GetAudiencesNum()), @@ -432,18 +432,26 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen RankType: s.GetDBGameFree().GetRankType(), SceneAdd: s.GetDBGameFree().GetSceneAdd(), // 比赛场相关 - Round: int32(s.MatchRound), - CurPlayerNum: int32(s.MatchCurPlayerNum), - NextNeed: int32(s.MatchNextNeed), + Round: s.GetMatch().GetCurrRound(), + CurPlayerNum: s.GetMatch().GetCurrPlayerNum(), + NextNeed: s.GetMatch().GetNextPlayerNum(), RecordId: sceneEx.recordId, + RoomTypeId: s.GetCustom().GetRoomTypeId(), + RoomConfigId: s.GetCustom().GetRoomConfigId(), + CostType: s.GetCustom().GetCostType(), + Voice: s.GetCustom().GetVoice(), + Password: s.GetCustom().GetPassword(), + } + if s.GetCustom().GetPassword() != "" { + pack.NeedPassword = 1 } pack.IsMatch = int32(0) // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 if s.IsMatchScene() { - pack.IsMatch = int32(s.MatchType) + pack.IsMatch = s.GetMatch().GetMatchType() } pack.MatchFinals = 0 - if s.MatchFinals { + if s.GetMatch().GetIsFinals() { pack.MatchFinals = 1 if s.NumOfGames >= 2 { pack.MatchFinals = 2 @@ -879,7 +887,7 @@ func (this *SceneWaitStartStateTienLen) OnTick(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*TienLenSceneData); ok { if sceneEx.IsMatchScene() { delayT := time.Second * 2 - if sceneEx.MatchRound != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 + if sceneEx.GetMatch().GetCurrRound() != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 delayT = time.Second * 4 } if time.Now().Sub(sceneEx.StateStartTime) > delayT { @@ -985,7 +993,7 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) { seat.tianHu = rule.TianHu12Straight } if seat.tianHu > 0 { - keyNovice := common.GetKeyNoviceGameId(sceneEx.GameId) + keyNovice := common.GetKeyNoviceGameId(int(sceneEx.GameId)) data, ok := seat.GDatas[keyNovice] if !ok { data = &model.PlayerGameInfo{FirstTime: time.Now()} @@ -1640,14 +1648,14 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { winRankScore := int64(0) pack := &tienlen.SCTienLenGameBilled{} tienlenType := model.TienLenType{ - GameId: sceneEx.GameId, + GameId: int(sceneEx.GameId), RoomId: int32(sceneEx.GetSceneId()), RoomType: sceneEx.GetFreeGameSceneType(), NumOfGames: int32(sceneEx.Scene.NumOfGames), BankId: sceneEx.masterSnid, PlayerCount: sceneEx.curGamingPlayerNum, BaseScore: s.GetBaseScore(), - TaxRate: s.DbGameFree.GetTaxRate(), + TaxRate: s.GetDBGameFree().GetTaxRate(), RoomMode: s.GetSceneMode(), PlayerPool: make(map[int]int), } @@ -2023,7 +2031,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType()) rankScore = loseRankScore - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(losePlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := losePlayerScore - gainScore // 税收 if playerNum == 3 { @@ -2133,7 +2141,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType()) rankScore = lastWinPlayerRankScore - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(lastWinPlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := lastWinPlayerScore - gainScore if sceneEx.IsMatchScene() || sceneEx.IsCustom() { @@ -2414,7 +2422,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 playerEx := sceneEx.players[winSnid] if playerEx != nil { - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(winScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := winScore - gainScore if sceneEx.IsMatchScene() || sceneEx.IsCustom() { @@ -2550,7 +2558,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { } sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) - if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + if sceneEx.NumOfGames >= int(sceneEx.TotalOfGames) { sceneEx.BilledList = make(map[int32]*[]*BilledInfo) sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] sceneEx.RoundLogId = sceneEx.RoundLogId[:0] @@ -2780,10 +2788,10 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { s.TryDismissRob() } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } - if s.TotalOfGames > 0 && s.NumOfGames >= s.TotalOfGames { + if s.TotalOfGames > 0 && s.NumOfGames >= int(s.TotalOfGames) { sceneEx.SceneDestroy(true) } s.RankMatchDestroy() diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 7341ecd..3f7a0d9 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -903,42 +903,210 @@ func (x *Item) GetNum() int64 { return 0 } +type CustomParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomTypeId int32 `protobuf:"varint,1,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` // 房间类型id + RoomConfigId int32 `protobuf:"varint,2,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` // 房间配置id + CostType int32 `protobuf:"varint,3,opt,name=CostType,proto3" json:"CostType,omitempty"` // 房卡场付费方式 1房主 2AA + Password string `protobuf:"bytes,4,opt,name=Password,proto3" json:"Password,omitempty"` // 房间密码 + Voice int32 `protobuf:"varint,5,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1开启 2关闭 +} + +func (x *CustomParam) Reset() { + *x = CustomParam{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CustomParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomParam) ProtoMessage() {} + +func (x *CustomParam) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CustomParam.ProtoReflect.Descriptor instead. +func (*CustomParam) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{9} +} + +func (x *CustomParam) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *CustomParam) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *CustomParam) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *CustomParam) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *CustomParam) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +type MatchParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchSortId int64 `protobuf:"varint,1,opt,name=MatchSortId,proto3" json:"MatchSortId,omitempty"` // 比赛实例id + MatchId int32 `protobuf:"varint,2,opt,name=MatchId,proto3" json:"MatchId,omitempty"` // 比赛配置id + IsFinals bool `protobuf:"varint,3,opt,name=IsFinals,proto3" json:"IsFinals,omitempty"` // 是否决赛 + CurrRound int32 `protobuf:"varint,4,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` // 当前第几轮 + CurrPlayerNum int32 `protobuf:"varint,5,opt,name=CurrPlayerNum,proto3" json:"CurrPlayerNum,omitempty"` // 本轮玩家数 + NextPlayerNum int32 `protobuf:"varint,6,opt,name=NextPlayerNum,proto3" json:"NextPlayerNum,omitempty"` // 下轮最大玩家数 + MatchType int32 `protobuf:"varint,7,opt,name=MatchType,proto3" json:"MatchType,omitempty"` // 比赛类型 +} + +func (x *MatchParam) Reset() { + *x = MatchParam{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchParam) ProtoMessage() {} + +func (x *MatchParam) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchParam.ProtoReflect.Descriptor instead. +func (*MatchParam) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{10} +} + +func (x *MatchParam) GetMatchSortId() int64 { + if x != nil { + return x.MatchSortId + } + return 0 +} + +func (x *MatchParam) GetMatchId() int32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *MatchParam) GetIsFinals() bool { + if x != nil { + return x.IsFinals + } + return false +} + +func (x *MatchParam) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *MatchParam) GetCurrPlayerNum() int32 { + if x != nil { + return x.CurrPlayerNum + } + return 0 +} + +func (x *MatchParam) GetNextPlayerNum() int32 { + if x != nil { + return x.NextPlayerNum + } + return 0 +} + +func (x *MatchParam) GetMatchType() int32 { + if x != nil { + return x.MatchType + } + return 0 +} + //PACKET_WG_CREATESCENE type WGCreateScene struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SceneId int32 `protobuf:"varint,1,opt,name=SceneId,proto3" json:"SceneId,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - Params []int64 `protobuf:"varint,4,rep,packed,name=Params,proto3" json:"Params,omitempty"` - Creator int32 `protobuf:"varint,5,opt,name=Creator,proto3" json:"Creator,omitempty"` - Agentor int32 `protobuf:"varint,6,opt,name=Agentor,proto3" json:"Agentor,omitempty"` - ReplayCode string `protobuf:"bytes,7,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` - ParamsEx []int64 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` - SceneMode int32 `protobuf:"varint,9,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` - HallId int32 `protobuf:"varint,10,opt,name=HallId,proto3" json:"HallId,omitempty"` - Platform string `protobuf:"bytes,11,opt,name=Platform,proto3" json:"Platform,omitempty"` - DBGameFree *DB_GameFree `protobuf:"bytes,12,opt,name=DBGameFree,proto3" json:"DBGameFree,omitempty"` - GroupId int32 `protobuf:"varint,13,opt,name=GroupId,proto3" json:"GroupId,omitempty"` - EnterAfterStart bool `protobuf:"varint,14,opt,name=EnterAfterStart,proto3" json:"EnterAfterStart,omitempty"` - TotalOfGames int32 `protobuf:"varint,15,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` - Club int32 `protobuf:"varint,16,opt,name=Club,proto3" json:"Club,omitempty"` //俱乐部Id - ClubRoomId string `protobuf:"bytes,17,opt,name=ClubRoomId,proto3" json:"ClubRoomId,omitempty"` - ClubRoomPos int32 `protobuf:"varint,18,opt,name=ClubRoomPos,proto3" json:"ClubRoomPos,omitempty"` - ClubRate int32 `protobuf:"varint,19,opt,name=ClubRate,proto3" json:"ClubRate,omitempty"` - BaseScore int32 `protobuf:"varint,20,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` - PlayerNum int32 `protobuf:"varint,21,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` - RealCtrl bool `protobuf:"varint,22,opt,name=RealCtrl,proto3" json:"RealCtrl,omitempty"` - ChessRank []int32 `protobuf:"varint,23,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` - Items []*Item `protobuf:"bytes,24,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` // 房间id + GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` // 游戏id + GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` // 废弃,游戏模式 + SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 房间模式 + ReplayCode string `protobuf:"bytes,6,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` // 回放码 + DBGameFree *DB_GameFree `protobuf:"bytes,7,opt,name=DBGameFree,proto3" json:"DBGameFree,omitempty"` // 场次配置 + TotalOfGames int32 `protobuf:"varint,8,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` // 总局数 + PlayerNum int32 `protobuf:"varint,9,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 最大玩家数 + EnterAfterStart bool `protobuf:"varint,10,opt,name=EnterAfterStart,proto3" json:"EnterAfterStart,omitempty"` // 是否开始后可加入 + Creator int32 `protobuf:"varint,11,opt,name=Creator,proto3" json:"Creator,omitempty"` // 创建者id + BaseScore int32 `protobuf:"varint,12,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` // 底分 + Items []*Item `protobuf:"bytes,13,rep,name=Items,proto3" json:"Items,omitempty"` // 获得道具 + CostItems []*Item `protobuf:"bytes,14,rep,name=CostItems,proto3" json:"CostItems,omitempty"` // 消耗道具 + Custom *CustomParam `protobuf:"bytes,15,opt,name=Custom,proto3" json:"Custom,omitempty"` // 房卡场参数 + Match *MatchParam `protobuf:"bytes,16,opt,name=Match,proto3" json:"Match,omitempty"` // 比赛场参数 + ChessRank []int32 `protobuf:"varint,26,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` // 象棋段位配置 + Params []int64 `protobuf:"varint,27,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 游戏参数,GameRule中定义,不要有其他用途,含义不明确 } func (x *WGCreateScene) Reset() { *x = WGCreateScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -951,7 +1119,7 @@ func (x *WGCreateScene) String() string { func (*WGCreateScene) ProtoMessage() {} func (x *WGCreateScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -964,7 +1132,14 @@ func (x *WGCreateScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGCreateScene.ProtoReflect.Descriptor instead. func (*WGCreateScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{9} + return file_server_proto_rawDescGZIP(), []int{11} +} + +func (x *WGCreateScene) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" } func (x *WGCreateScene) GetSceneId() int32 { @@ -988,23 +1163,9 @@ func (x *WGCreateScene) GetGameMode() int32 { return 0 } -func (x *WGCreateScene) GetParams() []int64 { +func (x *WGCreateScene) GetSceneMode() int32 { if x != nil { - return x.Params - } - return nil -} - -func (x *WGCreateScene) GetCreator() int32 { - if x != nil { - return x.Creator - } - return 0 -} - -func (x *WGCreateScene) GetAgentor() int32 { - if x != nil { - return x.Agentor + return x.SceneMode } return 0 } @@ -1016,34 +1177,6 @@ func (x *WGCreateScene) GetReplayCode() string { return "" } -func (x *WGCreateScene) GetParamsEx() []int64 { - if x != nil { - return x.ParamsEx - } - return nil -} - -func (x *WGCreateScene) GetSceneMode() int32 { - if x != nil { - return x.SceneMode - } - return 0 -} - -func (x *WGCreateScene) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *WGCreateScene) GetPlatform() string { - if x != nil { - return x.Platform - } - return "" -} - func (x *WGCreateScene) GetDBGameFree() *DB_GameFree { if x != nil { return x.DBGameFree @@ -1051,20 +1184,6 @@ func (x *WGCreateScene) GetDBGameFree() *DB_GameFree { return nil } -func (x *WGCreateScene) GetGroupId() int32 { - if x != nil { - return x.GroupId - } - return 0 -} - -func (x *WGCreateScene) GetEnterAfterStart() bool { - if x != nil { - return x.EnterAfterStart - } - return false -} - func (x *WGCreateScene) GetTotalOfGames() int32 { if x != nil { return x.TotalOfGames @@ -1072,41 +1191,6 @@ func (x *WGCreateScene) GetTotalOfGames() int32 { return 0 } -func (x *WGCreateScene) GetClub() int32 { - if x != nil { - return x.Club - } - return 0 -} - -func (x *WGCreateScene) GetClubRoomId() string { - if x != nil { - return x.ClubRoomId - } - return "" -} - -func (x *WGCreateScene) GetClubRoomPos() int32 { - if x != nil { - return x.ClubRoomPos - } - return 0 -} - -func (x *WGCreateScene) GetClubRate() int32 { - if x != nil { - return x.ClubRate - } - return 0 -} - -func (x *WGCreateScene) GetBaseScore() int32 { - if x != nil { - return x.BaseScore - } - return 0 -} - func (x *WGCreateScene) GetPlayerNum() int32 { if x != nil { return x.PlayerNum @@ -1114,13 +1198,55 @@ func (x *WGCreateScene) GetPlayerNum() int32 { return 0 } -func (x *WGCreateScene) GetRealCtrl() bool { +func (x *WGCreateScene) GetEnterAfterStart() bool { if x != nil { - return x.RealCtrl + return x.EnterAfterStart } return false } +func (x *WGCreateScene) GetCreator() int32 { + if x != nil { + return x.Creator + } + return 0 +} + +func (x *WGCreateScene) GetBaseScore() int32 { + if x != nil { + return x.BaseScore + } + return 0 +} + +func (x *WGCreateScene) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + +func (x *WGCreateScene) GetCostItems() []*Item { + if x != nil { + return x.CostItems + } + return nil +} + +func (x *WGCreateScene) GetCustom() *CustomParam { + if x != nil { + return x.Custom + } + return nil +} + +func (x *WGCreateScene) GetMatch() *MatchParam { + if x != nil { + return x.Match + } + return nil +} + func (x *WGCreateScene) GetChessRank() []int32 { if x != nil { return x.ChessRank @@ -1128,9 +1254,9 @@ func (x *WGCreateScene) GetChessRank() []int32 { return nil } -func (x *WGCreateScene) GetItems() []*Item { +func (x *WGCreateScene) GetParams() []int64 { if x != nil { - return x.Items + return x.Params } return nil } @@ -1148,7 +1274,7 @@ type WGDestroyScene struct { func (x *WGDestroyScene) Reset() { *x = WGDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1161,7 +1287,7 @@ func (x *WGDestroyScene) String() string { func (*WGDestroyScene) ProtoMessage() {} func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1174,7 +1300,7 @@ func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDestroyScene.ProtoReflect.Descriptor instead. func (*WGDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{10} + return file_server_proto_rawDescGZIP(), []int{12} } func (x *WGDestroyScene) GetIds() []int64 { @@ -1204,7 +1330,7 @@ type GWDestroyScene struct { func (x *GWDestroyScene) Reset() { *x = GWDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1217,7 +1343,7 @@ func (x *GWDestroyScene) String() string { func (*GWDestroyScene) ProtoMessage() {} func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1230,7 +1356,7 @@ func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyScene.ProtoReflect.Descriptor instead. func (*GWDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{11} + return file_server_proto_rawDescGZIP(), []int{13} } func (x *GWDestroyScene) GetSceneId() int64 { @@ -1259,7 +1385,7 @@ type RebateTask struct { func (x *RebateTask) Reset() { *x = RebateTask{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1272,7 +1398,7 @@ func (x *RebateTask) String() string { func (*RebateTask) ProtoMessage() {} func (x *RebateTask) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1285,7 +1411,7 @@ func (x *RebateTask) ProtoReflect() protoreflect.Message { // Deprecated: Use RebateTask.ProtoReflect.Descriptor instead. func (*RebateTask) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{12} + return file_server_proto_rawDescGZIP(), []int{14} } func (x *RebateTask) GetRebateSwitch() bool { @@ -1335,7 +1461,7 @@ type WGPlayerEnter struct { func (x *WGPlayerEnter) Reset() { *x = WGPlayerEnter{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1348,7 +1474,7 @@ func (x *WGPlayerEnter) String() string { func (*WGPlayerEnter) ProtoMessage() {} func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1361,7 +1487,7 @@ func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnter.ProtoReflect.Descriptor instead. func (*WGPlayerEnter) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{13} + return file_server_proto_rawDescGZIP(), []int{15} } func (x *WGPlayerEnter) GetSid() int64 { @@ -1527,7 +1653,7 @@ type WGAudienceSit struct { func (x *WGAudienceSit) Reset() { *x = WGAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1540,7 +1666,7 @@ func (x *WGAudienceSit) String() string { func (*WGAudienceSit) ProtoMessage() {} func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1553,7 +1679,7 @@ func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAudienceSit.ProtoReflect.Descriptor instead. func (*WGAudienceSit) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{14} + return file_server_proto_rawDescGZIP(), []int{16} } func (x *WGAudienceSit) GetSnId() int32 { @@ -1599,7 +1725,7 @@ type WGPlayerReturn struct { func (x *WGPlayerReturn) Reset() { *x = WGPlayerReturn{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1612,7 +1738,7 @@ func (x *WGPlayerReturn) String() string { func (*WGPlayerReturn) ProtoMessage() {} func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1625,7 +1751,7 @@ func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerReturn.ProtoReflect.Descriptor instead. func (*WGPlayerReturn) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{15} + return file_server_proto_rawDescGZIP(), []int{17} } func (x *WGPlayerReturn) GetPlayerId() int32 { @@ -1687,7 +1813,7 @@ type GWPlayerLeave struct { func (x *GWPlayerLeave) Reset() { *x = GWPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1700,7 +1826,7 @@ func (x *GWPlayerLeave) String() string { func (*GWPlayerLeave) ProtoMessage() {} func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1713,7 +1839,7 @@ func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeave.ProtoReflect.Descriptor instead. func (*GWPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{16} + return file_server_proto_rawDescGZIP(), []int{18} } func (x *GWPlayerLeave) GetRoomId() int32 { @@ -1862,7 +1988,7 @@ type WGPlayerDropLine struct { func (x *WGPlayerDropLine) Reset() { *x = WGPlayerDropLine{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1875,7 +2001,7 @@ func (x *WGPlayerDropLine) String() string { func (*WGPlayerDropLine) ProtoMessage() {} func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1888,7 +2014,7 @@ func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerDropLine.ProtoReflect.Descriptor instead. func (*WGPlayerDropLine) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{17} + return file_server_proto_rawDescGZIP(), []int{19} } func (x *WGPlayerDropLine) GetId() int32 { @@ -1920,7 +2046,7 @@ type WGPlayerRehold struct { func (x *WGPlayerRehold) Reset() { *x = WGPlayerRehold{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1933,7 +2059,7 @@ func (x *WGPlayerRehold) String() string { func (*WGPlayerRehold) ProtoMessage() {} func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1946,7 +2072,7 @@ func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerRehold.ProtoReflect.Descriptor instead. func (*WGPlayerRehold) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{18} + return file_server_proto_rawDescGZIP(), []int{20} } func (x *WGPlayerRehold) GetId() int32 { @@ -1990,7 +2116,7 @@ type GWBilledRoomCard struct { func (x *GWBilledRoomCard) Reset() { *x = GWBilledRoomCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2003,7 +2129,7 @@ func (x *GWBilledRoomCard) String() string { func (*GWBilledRoomCard) ProtoMessage() {} func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2016,7 +2142,7 @@ func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { // Deprecated: Use GWBilledRoomCard.ProtoReflect.Descriptor instead. func (*GWBilledRoomCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{19} + return file_server_proto_rawDescGZIP(), []int{21} } func (x *GWBilledRoomCard) GetRoomId() int32 { @@ -2050,7 +2176,7 @@ type GGPlayerSessionBind struct { func (x *GGPlayerSessionBind) Reset() { *x = GGPlayerSessionBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2063,7 +2189,7 @@ func (x *GGPlayerSessionBind) String() string { func (*GGPlayerSessionBind) ProtoMessage() {} func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2076,7 +2202,7 @@ func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{20} + return file_server_proto_rawDescGZIP(), []int{22} } func (x *GGPlayerSessionBind) GetSid() int64 { @@ -2133,7 +2259,7 @@ type GGPlayerSessionUnBind struct { func (x *GGPlayerSessionUnBind) Reset() { *x = GGPlayerSessionUnBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2146,7 +2272,7 @@ func (x *GGPlayerSessionUnBind) String() string { func (*GGPlayerSessionUnBind) ProtoMessage() {} func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2159,7 +2285,7 @@ func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionUnBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionUnBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{21} + return file_server_proto_rawDescGZIP(), []int{23} } func (x *GGPlayerSessionUnBind) GetSid() int64 { @@ -2184,7 +2310,7 @@ type WGDayTimeChange struct { func (x *WGDayTimeChange) Reset() { *x = WGDayTimeChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2197,7 +2323,7 @@ func (x *WGDayTimeChange) String() string { func (*WGDayTimeChange) ProtoMessage() {} func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2210,7 +2336,7 @@ func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDayTimeChange.ProtoReflect.Descriptor instead. func (*WGDayTimeChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{22} + return file_server_proto_rawDescGZIP(), []int{24} } func (x *WGDayTimeChange) GetMinute() int32 { @@ -2266,7 +2392,7 @@ type ReplayPlayerData struct { func (x *ReplayPlayerData) Reset() { *x = ReplayPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2405,7 @@ func (x *ReplayPlayerData) String() string { func (*ReplayPlayerData) ProtoMessage() {} func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2418,7 @@ func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayPlayerData.ProtoReflect.Descriptor instead. func (*ReplayPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{23} + return file_server_proto_rawDescGZIP(), []int{25} } func (x *ReplayPlayerData) GetAccId() string { @@ -2368,7 +2494,7 @@ type ReplayRecord struct { func (x *ReplayRecord) Reset() { *x = ReplayRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2381,7 +2507,7 @@ func (x *ReplayRecord) String() string { func (*ReplayRecord) ProtoMessage() {} func (x *ReplayRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2394,7 +2520,7 @@ func (x *ReplayRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRecord.ProtoReflect.Descriptor instead. func (*ReplayRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{24} + return file_server_proto_rawDescGZIP(), []int{26} } func (x *ReplayRecord) GetTimeStamp() int64 { @@ -2450,7 +2576,7 @@ type ReplaySequene struct { func (x *ReplaySequene) Reset() { *x = ReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2463,7 +2589,7 @@ func (x *ReplaySequene) String() string { func (*ReplaySequene) ProtoMessage() {} func (x *ReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2476,7 +2602,7 @@ func (x *ReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaySequene.ProtoReflect.Descriptor instead. func (*ReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{25} + return file_server_proto_rawDescGZIP(), []int{27} } func (x *ReplaySequene) GetSequenes() []*ReplayRecord { @@ -2514,7 +2640,7 @@ type GRReplaySequene struct { func (x *GRReplaySequene) Reset() { *x = GRReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2527,7 +2653,7 @@ func (x *GRReplaySequene) String() string { func (*GRReplaySequene) ProtoMessage() {} func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2540,7 +2666,7 @@ func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRReplaySequene.ProtoReflect.Descriptor instead. func (*GRReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{26} + return file_server_proto_rawDescGZIP(), []int{28} } func (x *GRReplaySequene) GetName() string { @@ -2687,7 +2813,7 @@ type WRLoginRec struct { func (x *WRLoginRec) Reset() { *x = WRLoginRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2700,7 +2826,7 @@ func (x *WRLoginRec) String() string { func (*WRLoginRec) ProtoMessage() {} func (x *WRLoginRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2713,7 +2839,7 @@ func (x *WRLoginRec) ProtoReflect() protoreflect.Message { // Deprecated: Use WRLoginRec.ProtoReflect.Descriptor instead. func (*WRLoginRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{27} + return file_server_proto_rawDescGZIP(), []int{29} } func (x *WRLoginRec) GetSnId() int32 { @@ -2777,7 +2903,7 @@ type WRGameDetail struct { func (x *WRGameDetail) Reset() { *x = WRGameDetail{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2790,7 +2916,7 @@ func (x *WRGameDetail) String() string { func (*WRGameDetail) ProtoMessage() {} func (x *WRGameDetail) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2803,7 +2929,7 @@ func (x *WRGameDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use WRGameDetail.ProtoReflect.Descriptor instead. func (*WRGameDetail) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{28} + return file_server_proto_rawDescGZIP(), []int{30} } func (x *WRGameDetail) GetGameDetail() []byte { @@ -2826,7 +2952,7 @@ type WRPlayerData struct { func (x *WRPlayerData) Reset() { *x = WRPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +2965,7 @@ func (x *WRPlayerData) String() string { func (*WRPlayerData) ProtoMessage() {} func (x *WRPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +2978,7 @@ func (x *WRPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use WRPlayerData.ProtoReflect.Descriptor instead. func (*WRPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{29} + return file_server_proto_rawDescGZIP(), []int{31} } func (x *WRPlayerData) GetSid() int64 { @@ -2882,7 +3008,7 @@ type WTPlayerPay struct { func (x *WTPlayerPay) Reset() { *x = WTPlayerPay{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2895,7 +3021,7 @@ func (x *WTPlayerPay) String() string { func (*WTPlayerPay) ProtoMessage() {} func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2908,7 +3034,7 @@ func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { // Deprecated: Use WTPlayerPay.ProtoReflect.Descriptor instead. func (*WTPlayerPay) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{30} + return file_server_proto_rawDescGZIP(), []int{32} } func (x *WTPlayerPay) GetPlayerData() []byte { @@ -2941,7 +3067,7 @@ type PlayerGameRec struct { func (x *PlayerGameRec) Reset() { *x = PlayerGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2954,7 +3080,7 @@ func (x *PlayerGameRec) String() string { func (*PlayerGameRec) ProtoMessage() {} func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2967,7 +3093,7 @@ func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerGameRec.ProtoReflect.Descriptor instead. func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{31} + return file_server_proto_rawDescGZIP(), []int{33} } func (x *PlayerGameRec) GetId() int32 { @@ -3028,7 +3154,7 @@ type GWGameRec struct { func (x *GWGameRec) Reset() { *x = GWGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3041,7 +3167,7 @@ func (x *GWGameRec) String() string { func (*GWGameRec) ProtoMessage() {} func (x *GWGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3054,7 +3180,7 @@ func (x *GWGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameRec.ProtoReflect.Descriptor instead. func (*GWGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{32} + return file_server_proto_rawDescGZIP(), []int{34} } func (x *GWGameRec) GetRoomId() int32 { @@ -3107,7 +3233,7 @@ type GWSceneStart struct { func (x *GWSceneStart) Reset() { *x = GWSceneStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3120,7 +3246,7 @@ func (x *GWSceneStart) String() string { func (*GWSceneStart) ProtoMessage() {} func (x *GWSceneStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3133,7 +3259,7 @@ func (x *GWSceneStart) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneStart.ProtoReflect.Descriptor instead. func (*GWSceneStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{33} + return file_server_proto_rawDescGZIP(), []int{35} } func (x *GWSceneStart) GetRoomId() int32 { @@ -3176,7 +3302,7 @@ type PlayerCtx struct { func (x *PlayerCtx) Reset() { *x = PlayerCtx{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3189,7 +3315,7 @@ func (x *PlayerCtx) String() string { func (*PlayerCtx) ProtoMessage() {} func (x *PlayerCtx) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3202,7 +3328,7 @@ func (x *PlayerCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCtx.ProtoReflect.Descriptor instead. func (*PlayerCtx) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{34} + return file_server_proto_rawDescGZIP(), []int{36} } func (x *PlayerCtx) GetSnId() int32 { @@ -3238,7 +3364,7 @@ type FishRecord struct { func (x *FishRecord) Reset() { *x = FishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3251,7 +3377,7 @@ func (x *FishRecord) String() string { func (*FishRecord) ProtoMessage() {} func (x *FishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3264,7 +3390,7 @@ func (x *FishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use FishRecord.ProtoReflect.Descriptor instead. func (*FishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{35} + return file_server_proto_rawDescGZIP(), []int{37} } func (x *FishRecord) GetFishId() int32 { @@ -3294,7 +3420,7 @@ type GWFishRecord struct { func (x *GWFishRecord) Reset() { *x = GWFishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3307,7 +3433,7 @@ func (x *GWFishRecord) String() string { func (*GWFishRecord) ProtoMessage() {} func (x *GWFishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3320,7 +3446,7 @@ func (x *GWFishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use GWFishRecord.ProtoReflect.Descriptor instead. func (*GWFishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{36} + return file_server_proto_rawDescGZIP(), []int{38} } func (x *GWFishRecord) GetGameFreeId() int32 { @@ -3358,7 +3484,7 @@ type GWSceneState struct { func (x *GWSceneState) Reset() { *x = GWSceneState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3371,7 +3497,7 @@ func (x *GWSceneState) String() string { func (*GWSceneState) ProtoMessage() {} func (x *GWSceneState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3384,7 +3510,7 @@ func (x *GWSceneState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneState.ProtoReflect.Descriptor instead. func (*GWSceneState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{37} + return file_server_proto_rawDescGZIP(), []int{39} } func (x *GWSceneState) GetRoomId() int32 { @@ -3418,7 +3544,7 @@ type WRInviteRobot struct { func (x *WRInviteRobot) Reset() { *x = WRInviteRobot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3431,7 +3557,7 @@ func (x *WRInviteRobot) String() string { func (*WRInviteRobot) ProtoMessage() {} func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3444,7 +3570,7 @@ func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteRobot.ProtoReflect.Descriptor instead. func (*WRInviteRobot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{38} + return file_server_proto_rawDescGZIP(), []int{40} } func (x *WRInviteRobot) GetRoomId() int32 { @@ -3502,7 +3628,7 @@ type WRInviteCreateRoom struct { func (x *WRInviteCreateRoom) Reset() { *x = WRInviteCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3515,7 +3641,7 @@ func (x *WRInviteCreateRoom) String() string { func (*WRInviteCreateRoom) ProtoMessage() {} func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3528,7 +3654,7 @@ func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteCreateRoom.ProtoReflect.Descriptor instead. func (*WRInviteCreateRoom) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{39} + return file_server_proto_rawDescGZIP(), []int{41} } func (x *WRInviteCreateRoom) GetCnt() int32 { @@ -3560,7 +3686,7 @@ type WGAgentKickOutPlayer struct { func (x *WGAgentKickOutPlayer) Reset() { *x = WGAgentKickOutPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3573,7 +3699,7 @@ func (x *WGAgentKickOutPlayer) String() string { func (*WGAgentKickOutPlayer) ProtoMessage() {} func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3586,7 +3712,7 @@ func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAgentKickOutPlayer.ProtoReflect.Descriptor instead. func (*WGAgentKickOutPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{40} + return file_server_proto_rawDescGZIP(), []int{42} } func (x *WGAgentKickOutPlayer) GetRoomId() int32 { @@ -3630,7 +3756,7 @@ type WDDataAnalysis struct { func (x *WDDataAnalysis) Reset() { *x = WDDataAnalysis{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3643,7 +3769,7 @@ func (x *WDDataAnalysis) String() string { func (*WDDataAnalysis) ProtoMessage() {} func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3656,7 +3782,7 @@ func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { // Deprecated: Use WDDataAnalysis.ProtoReflect.Descriptor instead. func (*WDDataAnalysis) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{41} + return file_server_proto_rawDescGZIP(), []int{43} } func (x *WDDataAnalysis) GetDataType() int32 { @@ -3685,7 +3811,7 @@ type PlayerCard struct { func (x *PlayerCard) Reset() { *x = PlayerCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3698,7 +3824,7 @@ func (x *PlayerCard) String() string { func (*PlayerCard) ProtoMessage() {} func (x *PlayerCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3711,7 +3837,7 @@ func (x *PlayerCard) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCard.ProtoReflect.Descriptor instead. func (*PlayerCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{42} + return file_server_proto_rawDescGZIP(), []int{44} } func (x *PlayerCard) GetPos() int32 { @@ -3741,7 +3867,7 @@ type GNPlayerCards struct { func (x *GNPlayerCards) Reset() { *x = GNPlayerCards{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3754,7 +3880,7 @@ func (x *GNPlayerCards) String() string { func (*GNPlayerCards) ProtoMessage() {} func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3767,7 +3893,7 @@ func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerCards.ProtoReflect.Descriptor instead. func (*GNPlayerCards) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{43} + return file_server_proto_rawDescGZIP(), []int{45} } func (x *GNPlayerCards) GetSceneId() int32 { @@ -3806,7 +3932,7 @@ type RobotData struct { func (x *RobotData) Reset() { *x = RobotData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3819,7 +3945,7 @@ func (x *RobotData) String() string { func (*RobotData) ProtoMessage() {} func (x *RobotData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3832,7 +3958,7 @@ func (x *RobotData) ProtoReflect() protoreflect.Message { // Deprecated: Use RobotData.ProtoReflect.Descriptor instead. func (*RobotData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{44} + return file_server_proto_rawDescGZIP(), []int{46} } func (x *RobotData) GetTotalIn() int64 { @@ -3882,7 +4008,7 @@ type GNPlayerParam struct { func (x *GNPlayerParam) Reset() { *x = GNPlayerParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3895,7 +4021,7 @@ func (x *GNPlayerParam) String() string { func (*GNPlayerParam) ProtoMessage() {} func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3908,7 +4034,7 @@ func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerParam.ProtoReflect.Descriptor instead. func (*GNPlayerParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{45} + return file_server_proto_rawDescGZIP(), []int{47} } func (x *GNPlayerParam) GetSceneId() int32 { @@ -3939,7 +4065,7 @@ type GWRebuildScene struct { func (x *GWRebuildScene) Reset() { *x = GWRebuildScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3952,7 +4078,7 @@ func (x *GWRebuildScene) String() string { func (*GWRebuildScene) ProtoMessage() {} func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3965,7 +4091,7 @@ func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRebuildScene.ProtoReflect.Descriptor instead. func (*GWRebuildScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{46} + return file_server_proto_rawDescGZIP(), []int{48} } func (x *GWRebuildScene) GetSceneIds() []int32 { @@ -3995,7 +4121,7 @@ type WGRebindPlayerSnId struct { func (x *WGRebindPlayerSnId) Reset() { *x = WGRebindPlayerSnId{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4008,7 +4134,7 @@ func (x *WGRebindPlayerSnId) String() string { func (*WGRebindPlayerSnId) ProtoMessage() {} func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4021,7 +4147,7 @@ func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRebindPlayerSnId.ProtoReflect.Descriptor instead. func (*WGRebindPlayerSnId) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{47} + return file_server_proto_rawDescGZIP(), []int{49} } func (x *WGRebindPlayerSnId) GetOldSnId() int32 { @@ -4052,7 +4178,7 @@ type GWPlayerFlag struct { func (x *GWPlayerFlag) Reset() { *x = GWPlayerFlag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4065,7 +4191,7 @@ func (x *GWPlayerFlag) String() string { func (*GWPlayerFlag) ProtoMessage() {} func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4078,7 +4204,7 @@ func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerFlag.ProtoReflect.Descriptor instead. func (*GWPlayerFlag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{48} + return file_server_proto_rawDescGZIP(), []int{50} } func (x *GWPlayerFlag) GetSnId() int32 { @@ -4117,7 +4243,7 @@ type WGHundredOp struct { func (x *WGHundredOp) Reset() { *x = WGHundredOp{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4130,7 +4256,7 @@ func (x *WGHundredOp) String() string { func (*WGHundredOp) ProtoMessage() {} func (x *WGHundredOp) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4143,7 +4269,7 @@ func (x *WGHundredOp) ProtoReflect() protoreflect.Message { // Deprecated: Use WGHundredOp.ProtoReflect.Descriptor instead. func (*WGHundredOp) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{49} + return file_server_proto_rawDescGZIP(), []int{51} } func (x *WGHundredOp) GetSnid() int32 { @@ -4187,7 +4313,7 @@ type GWNewNotice struct { func (x *GWNewNotice) Reset() { *x = GWNewNotice{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4200,7 +4326,7 @@ func (x *GWNewNotice) String() string { func (*GWNewNotice) ProtoMessage() {} func (x *GWNewNotice) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4213,7 +4339,7 @@ func (x *GWNewNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use GWNewNotice.ProtoReflect.Descriptor instead. func (*GWNewNotice) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{50} + return file_server_proto_rawDescGZIP(), []int{52} } func (x *GWNewNotice) GetCh() string { @@ -4298,7 +4424,7 @@ type PlayerStatics struct { func (x *PlayerStatics) Reset() { *x = PlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4311,7 +4437,7 @@ func (x *PlayerStatics) String() string { func (*PlayerStatics) ProtoMessage() {} func (x *PlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4324,7 +4450,7 @@ func (x *PlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerStatics.ProtoReflect.Descriptor instead. func (*PlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{51} + return file_server_proto_rawDescGZIP(), []int{53} } func (x *PlayerStatics) GetSnId() int32 { @@ -4404,7 +4530,7 @@ type GWPlayerStatics struct { func (x *GWPlayerStatics) Reset() { *x = GWPlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4417,7 +4543,7 @@ func (x *GWPlayerStatics) String() string { func (*GWPlayerStatics) ProtoMessage() {} func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4430,7 +4556,7 @@ func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerStatics.ProtoReflect.Descriptor instead. func (*GWPlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{52} + return file_server_proto_rawDescGZIP(), []int{54} } func (x *GWPlayerStatics) GetRoomId() int32 { @@ -4477,7 +4603,7 @@ type WGResetCoinPool struct { func (x *WGResetCoinPool) Reset() { *x = WGResetCoinPool{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4490,7 +4616,7 @@ func (x *WGResetCoinPool) String() string { func (*WGResetCoinPool) ProtoMessage() {} func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4503,7 +4629,7 @@ func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { // Deprecated: Use WGResetCoinPool.ProtoReflect.Descriptor instead. func (*WGResetCoinPool) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{53} + return file_server_proto_rawDescGZIP(), []int{55} } func (x *WGResetCoinPool) GetPlatform() string { @@ -4565,7 +4691,7 @@ type WGSetPlayerBlackLevel struct { func (x *WGSetPlayerBlackLevel) Reset() { *x = WGSetPlayerBlackLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4578,7 +4704,7 @@ func (x *WGSetPlayerBlackLevel) String() string { func (*WGSetPlayerBlackLevel) ProtoMessage() {} func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4591,7 +4717,7 @@ func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSetPlayerBlackLevel.ProtoReflect.Descriptor instead. func (*WGSetPlayerBlackLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{54} + return file_server_proto_rawDescGZIP(), []int{56} } func (x *WGSetPlayerBlackLevel) GetSnId() int32 { @@ -4654,7 +4780,7 @@ type GWAutoRelieveWBLevel struct { func (x *GWAutoRelieveWBLevel) Reset() { *x = GWAutoRelieveWBLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4667,7 +4793,7 @@ func (x *GWAutoRelieveWBLevel) String() string { func (*GWAutoRelieveWBLevel) ProtoMessage() {} func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4680,7 +4806,7 @@ func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAutoRelieveWBLevel.ProtoReflect.Descriptor instead. func (*GWAutoRelieveWBLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{55} + return file_server_proto_rawDescGZIP(), []int{57} } func (x *GWAutoRelieveWBLevel) GetSnId() int32 { @@ -4706,7 +4832,7 @@ type GWScenePlayerLog struct { func (x *GWScenePlayerLog) Reset() { *x = GWScenePlayerLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4719,7 +4845,7 @@ func (x *GWScenePlayerLog) String() string { func (*GWScenePlayerLog) ProtoMessage() {} func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4732,7 +4858,7 @@ func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWScenePlayerLog.ProtoReflect.Descriptor instead. func (*GWScenePlayerLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{56} + return file_server_proto_rawDescGZIP(), []int{58} } func (x *GWScenePlayerLog) GetGameId() int32 { @@ -4778,7 +4904,7 @@ type GWPlayerForceLeave struct { func (x *GWPlayerForceLeave) Reset() { *x = GWPlayerForceLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4791,7 +4917,7 @@ func (x *GWPlayerForceLeave) String() string { func (*GWPlayerForceLeave) ProtoMessage() {} func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4804,7 +4930,7 @@ func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerForceLeave.ProtoReflect.Descriptor instead. func (*GWPlayerForceLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{57} + return file_server_proto_rawDescGZIP(), []int{59} } func (x *GWPlayerForceLeave) GetRoomId() int32 { @@ -4854,7 +4980,7 @@ type PlayerData struct { func (x *PlayerData) Reset() { *x = PlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4867,7 +4993,7 @@ func (x *PlayerData) String() string { func (*PlayerData) ProtoMessage() {} func (x *PlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4880,7 +5006,7 @@ func (x *PlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerData.ProtoReflect.Descriptor instead. func (*PlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{58} + return file_server_proto_rawDescGZIP(), []int{60} } func (x *PlayerData) GetSnId() int32 { @@ -4952,7 +5078,7 @@ type GWPlayerData struct { func (x *GWPlayerData) Reset() { *x = GWPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4965,7 +5091,7 @@ func (x *GWPlayerData) String() string { func (*GWPlayerData) ProtoMessage() {} func (x *GWPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4978,7 +5104,7 @@ func (x *GWPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerData.ProtoReflect.Descriptor instead. func (*GWPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{59} + return file_server_proto_rawDescGZIP(), []int{61} } func (x *GWPlayerData) GetDatas() []*PlayerData { @@ -5020,7 +5146,7 @@ type PlayerWinScore struct { func (x *PlayerWinScore) Reset() { *x = PlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5033,7 +5159,7 @@ func (x *PlayerWinScore) String() string { func (*PlayerWinScore) ProtoMessage() {} func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5046,7 +5172,7 @@ func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerWinScore.ProtoReflect.Descriptor instead. func (*PlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{60} + return file_server_proto_rawDescGZIP(), []int{62} } func (x *PlayerWinScore) GetSnId() int32 { @@ -5113,7 +5239,7 @@ type GWPlayerWinScore struct { func (x *GWPlayerWinScore) Reset() { *x = GWPlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5126,7 +5252,7 @@ func (x *GWPlayerWinScore) String() string { func (*GWPlayerWinScore) ProtoMessage() {} func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5139,7 +5265,7 @@ func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerWinScore.ProtoReflect.Descriptor instead. func (*GWPlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{61} + return file_server_proto_rawDescGZIP(), []int{63} } func (x *GWPlayerWinScore) GetGameFreeId() int32 { @@ -5188,7 +5314,7 @@ type WGPayerOnGameCount struct { func (x *WGPayerOnGameCount) Reset() { *x = WGPayerOnGameCount{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5201,7 +5327,7 @@ func (x *WGPayerOnGameCount) String() string { func (*WGPayerOnGameCount) ProtoMessage() {} func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5214,7 +5340,7 @@ func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPayerOnGameCount.ProtoReflect.Descriptor instead. func (*WGPayerOnGameCount) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{62} + return file_server_proto_rawDescGZIP(), []int{64} } func (x *WGPayerOnGameCount) GetDTCount() []int32 { @@ -5236,7 +5362,7 @@ type GRGameFreeData struct { func (x *GRGameFreeData) Reset() { *x = GRGameFreeData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5249,7 +5375,7 @@ func (x *GRGameFreeData) String() string { func (*GRGameFreeData) ProtoMessage() {} func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5262,7 +5388,7 @@ func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { // Deprecated: Use GRGameFreeData.ProtoReflect.Descriptor instead. func (*GRGameFreeData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{63} + return file_server_proto_rawDescGZIP(), []int{65} } func (x *GRGameFreeData) GetRoomId() int32 { @@ -5291,7 +5417,7 @@ type WGSyncPlayerSafeBoxCoin struct { func (x *WGSyncPlayerSafeBoxCoin) Reset() { *x = WGSyncPlayerSafeBoxCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5304,7 +5430,7 @@ func (x *WGSyncPlayerSafeBoxCoin) String() string { func (*WGSyncPlayerSafeBoxCoin) ProtoMessage() {} func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5317,7 +5443,7 @@ func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSyncPlayerSafeBoxCoin.ProtoReflect.Descriptor instead. func (*WGSyncPlayerSafeBoxCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{64} + return file_server_proto_rawDescGZIP(), []int{66} } func (x *WGSyncPlayerSafeBoxCoin) GetSnId() int32 { @@ -5349,7 +5475,7 @@ type WGClubMessage struct { func (x *WGClubMessage) Reset() { *x = WGClubMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5362,7 +5488,7 @@ func (x *WGClubMessage) String() string { func (*WGClubMessage) ProtoMessage() {} func (x *WGClubMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5375,7 +5501,7 @@ func (x *WGClubMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WGClubMessage.ProtoReflect.Descriptor instead. func (*WGClubMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{65} + return file_server_proto_rawDescGZIP(), []int{67} } func (x *WGClubMessage) GetClubId() int64 { @@ -5422,7 +5548,7 @@ type DWThirdRebateMessage struct { func (x *DWThirdRebateMessage) Reset() { *x = DWThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5435,7 +5561,7 @@ func (x *DWThirdRebateMessage) String() string { func (*DWThirdRebateMessage) ProtoMessage() {} func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5448,7 +5574,7 @@ func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRebateMessage.ProtoReflect.Descriptor instead. func (*DWThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{66} + return file_server_proto_rawDescGZIP(), []int{68} } func (x *DWThirdRebateMessage) GetTag() uint64 { @@ -5507,7 +5633,7 @@ type DWThirdRoundMessage struct { func (x *DWThirdRoundMessage) Reset() { *x = DWThirdRoundMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5520,7 +5646,7 @@ func (x *DWThirdRoundMessage) String() string { func (*DWThirdRoundMessage) ProtoMessage() {} func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5533,7 +5659,7 @@ func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRoundMessage.ProtoReflect.Descriptor instead. func (*DWThirdRoundMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{67} + return file_server_proto_rawDescGZIP(), []int{69} } func (x *DWThirdRoundMessage) GetTag() uint64 { @@ -5626,7 +5752,7 @@ type WDACKThirdRebateMessage struct { func (x *WDACKThirdRebateMessage) Reset() { *x = WDACKThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5639,7 +5765,7 @@ func (x *WDACKThirdRebateMessage) String() string { func (*WDACKThirdRebateMessage) ProtoMessage() {} func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5652,7 +5778,7 @@ func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WDACKThirdRebateMessage.ProtoReflect.Descriptor instead. func (*WDACKThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{68} + return file_server_proto_rawDescGZIP(), []int{70} } func (x *WDACKThirdRebateMessage) GetTag() uint64 { @@ -5683,7 +5809,7 @@ type GWGameStateLog struct { func (x *GWGameStateLog) Reset() { *x = GWGameStateLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5696,7 +5822,7 @@ func (x *GWGameStateLog) String() string { func (*GWGameStateLog) ProtoMessage() {} func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5709,7 +5835,7 @@ func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameStateLog.ProtoReflect.Descriptor instead. func (*GWGameStateLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{69} + return file_server_proto_rawDescGZIP(), []int{71} } func (x *GWGameStateLog) GetSceneId() int32 { @@ -5749,7 +5875,7 @@ type GWGameState struct { func (x *GWGameState) Reset() { *x = GWGameState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5762,7 +5888,7 @@ func (x *GWGameState) String() string { func (*GWGameState) ProtoMessage() {} func (x *GWGameState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5775,7 +5901,7 @@ func (x *GWGameState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameState.ProtoReflect.Descriptor instead. func (*GWGameState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{70} + return file_server_proto_rawDescGZIP(), []int{72} } func (x *GWGameState) GetSceneId() int32 { @@ -5832,7 +5958,7 @@ type GWGameJackList struct { func (x *GWGameJackList) Reset() { *x = GWGameJackList{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5845,7 +5971,7 @@ func (x *GWGameJackList) String() string { func (*GWGameJackList) ProtoMessage() {} func (x *GWGameJackList) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5858,7 +5984,7 @@ func (x *GWGameJackList) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackList.ProtoReflect.Descriptor instead. func (*GWGameJackList) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{71} + return file_server_proto_rawDescGZIP(), []int{73} } func (x *GWGameJackList) GetSnId() int32 { @@ -5930,7 +6056,7 @@ type GWGameJackCoin struct { func (x *GWGameJackCoin) Reset() { *x = GWGameJackCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5943,7 +6069,7 @@ func (x *GWGameJackCoin) String() string { func (*GWGameJackCoin) ProtoMessage() {} func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5956,7 +6082,7 @@ func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackCoin.ProtoReflect.Descriptor instead. func (*GWGameJackCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{72} + return file_server_proto_rawDescGZIP(), []int{74} } func (x *GWGameJackCoin) GetPlatform() []string { @@ -5986,7 +6112,7 @@ type WGNiceIdRebind struct { func (x *WGNiceIdRebind) Reset() { *x = WGNiceIdRebind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5999,7 +6125,7 @@ func (x *WGNiceIdRebind) String() string { func (*WGNiceIdRebind) ProtoMessage() {} func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6012,7 +6138,7 @@ func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { // Deprecated: Use WGNiceIdRebind.ProtoReflect.Descriptor instead. func (*WGNiceIdRebind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{73} + return file_server_proto_rawDescGZIP(), []int{75} } func (x *WGNiceIdRebind) GetUser() int32 { @@ -6042,7 +6168,7 @@ type PLAYERWINCOININFO struct { func (x *PLAYERWINCOININFO) Reset() { *x = PLAYERWINCOININFO{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6055,7 +6181,7 @@ func (x *PLAYERWINCOININFO) String() string { func (*PLAYERWINCOININFO) ProtoMessage() {} func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6068,7 +6194,7 @@ func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { // Deprecated: Use PLAYERWINCOININFO.ProtoReflect.Descriptor instead. func (*PLAYERWINCOININFO) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{74} + return file_server_proto_rawDescGZIP(), []int{76} } func (x *PLAYERWINCOININFO) GetSnId() int32 { @@ -6104,7 +6230,7 @@ type GWPLAYERWINCOIN struct { func (x *GWPLAYERWINCOIN) Reset() { *x = GWPLAYERWINCOIN{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6117,7 +6243,7 @@ func (x *GWPLAYERWINCOIN) String() string { func (*GWPLAYERWINCOIN) ProtoMessage() {} func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6130,7 +6256,7 @@ func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPLAYERWINCOIN.ProtoReflect.Descriptor instead. func (*GWPLAYERWINCOIN) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{75} + return file_server_proto_rawDescGZIP(), []int{77} } func (x *GWPLAYERWINCOIN) GetPlayer() []*PLAYERWINCOININFO { @@ -6153,7 +6279,7 @@ type GWPlayerAutoMarkTag struct { func (x *GWPlayerAutoMarkTag) Reset() { *x = GWPlayerAutoMarkTag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6166,7 +6292,7 @@ func (x *GWPlayerAutoMarkTag) String() string { func (*GWPlayerAutoMarkTag) ProtoMessage() {} func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6179,7 +6305,7 @@ func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerAutoMarkTag.ProtoReflect.Descriptor instead. func (*GWPlayerAutoMarkTag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{76} + return file_server_proto_rawDescGZIP(), []int{78} } func (x *GWPlayerAutoMarkTag) GetSnId() int32 { @@ -6210,7 +6336,7 @@ type WGInviteRobEnterCoinSceneQueue struct { func (x *WGInviteRobEnterCoinSceneQueue) Reset() { *x = WGInviteRobEnterCoinSceneQueue{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6223,7 +6349,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) String() string { func (*WGInviteRobEnterCoinSceneQueue) ProtoMessage() {} func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6236,7 +6362,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteRobEnterCoinSceneQueue.ProtoReflect.Descriptor instead. func (*WGInviteRobEnterCoinSceneQueue) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{77} + return file_server_proto_rawDescGZIP(), []int{79} } func (x *WGInviteRobEnterCoinSceneQueue) GetPlatform() string { @@ -6272,7 +6398,7 @@ type WGGameForceStart struct { func (x *WGGameForceStart) Reset() { *x = WGGameForceStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6285,7 +6411,7 @@ func (x *WGGameForceStart) String() string { func (*WGGameForceStart) ProtoMessage() {} func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6298,7 +6424,7 @@ func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameForceStart.ProtoReflect.Descriptor instead. func (*WGGameForceStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{78} + return file_server_proto_rawDescGZIP(), []int{80} } func (x *WGGameForceStart) GetSceneId() int32 { @@ -6323,7 +6449,7 @@ type ProfitControlGameCfg struct { func (x *ProfitControlGameCfg) Reset() { *x = ProfitControlGameCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6336,7 +6462,7 @@ func (x *ProfitControlGameCfg) String() string { func (*ProfitControlGameCfg) ProtoMessage() {} func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6349,7 +6475,7 @@ func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlGameCfg.ProtoReflect.Descriptor instead. func (*ProfitControlGameCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{79} + return file_server_proto_rawDescGZIP(), []int{81} } func (x *ProfitControlGameCfg) GetGameFreeId() int32 { @@ -6399,7 +6525,7 @@ type ProfitControlPlatformCfg struct { func (x *ProfitControlPlatformCfg) Reset() { *x = ProfitControlPlatformCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6412,7 +6538,7 @@ func (x *ProfitControlPlatformCfg) String() string { func (*ProfitControlPlatformCfg) ProtoMessage() {} func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6425,7 +6551,7 @@ func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlPlatformCfg.ProtoReflect.Descriptor instead. func (*ProfitControlPlatformCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{80} + return file_server_proto_rawDescGZIP(), []int{82} } func (x *ProfitControlPlatformCfg) GetPlatform() string { @@ -6454,7 +6580,7 @@ type WGProfitControlCorrect struct { func (x *WGProfitControlCorrect) Reset() { *x = WGProfitControlCorrect{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6467,7 +6593,7 @@ func (x *WGProfitControlCorrect) String() string { func (*WGProfitControlCorrect) ProtoMessage() {} func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6480,7 +6606,7 @@ func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { // Deprecated: Use WGProfitControlCorrect.ProtoReflect.Descriptor instead. func (*WGProfitControlCorrect) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{81} + return file_server_proto_rawDescGZIP(), []int{83} } func (x *WGProfitControlCorrect) GetCfg() []*ProfitControlPlatformCfg { @@ -6502,7 +6628,7 @@ type GWChangeSceneEvent struct { func (x *GWChangeSceneEvent) Reset() { *x = GWChangeSceneEvent{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6515,7 +6641,7 @@ func (x *GWChangeSceneEvent) String() string { func (*GWChangeSceneEvent) ProtoMessage() {} func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6528,7 +6654,7 @@ func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use GWChangeSceneEvent.ProtoReflect.Descriptor instead. func (*GWChangeSceneEvent) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{82} + return file_server_proto_rawDescGZIP(), []int{84} } func (x *GWChangeSceneEvent) GetSceneId() int32 { @@ -6550,7 +6676,7 @@ type PlayerIParam struct { func (x *PlayerIParam) Reset() { *x = PlayerIParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6563,7 +6689,7 @@ func (x *PlayerIParam) String() string { func (*PlayerIParam) ProtoMessage() {} func (x *PlayerIParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6576,7 +6702,7 @@ func (x *PlayerIParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerIParam.ProtoReflect.Descriptor instead. func (*PlayerIParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{83} + return file_server_proto_rawDescGZIP(), []int{85} } func (x *PlayerIParam) GetParamId() int32 { @@ -6605,7 +6731,7 @@ type PlayerSParam struct { func (x *PlayerSParam) Reset() { *x = PlayerSParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6618,7 +6744,7 @@ func (x *PlayerSParam) String() string { func (*PlayerSParam) ProtoMessage() {} func (x *PlayerSParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6631,7 +6757,7 @@ func (x *PlayerSParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerSParam.ProtoReflect.Descriptor instead. func (*PlayerSParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{84} + return file_server_proto_rawDescGZIP(), []int{86} } func (x *PlayerSParam) GetParamId() int32 { @@ -6660,7 +6786,7 @@ type PlayerCParam struct { func (x *PlayerCParam) Reset() { *x = PlayerCParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6673,7 +6799,7 @@ func (x *PlayerCParam) String() string { func (*PlayerCParam) ProtoMessage() {} func (x *PlayerCParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6686,7 +6812,7 @@ func (x *PlayerCParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCParam.ProtoReflect.Descriptor instead. func (*PlayerCParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{85} + return file_server_proto_rawDescGZIP(), []int{87} } func (x *PlayerCParam) GetStrKey() string { @@ -6715,7 +6841,7 @@ type PlayerMatchCoin struct { func (x *PlayerMatchCoin) Reset() { *x = PlayerMatchCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6728,7 +6854,7 @@ func (x *PlayerMatchCoin) String() string { func (*PlayerMatchCoin) ProtoMessage() {} func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6741,7 +6867,7 @@ func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerMatchCoin.ProtoReflect.Descriptor instead. func (*PlayerMatchCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{86} + return file_server_proto_rawDescGZIP(), []int{88} } func (x *PlayerMatchCoin) GetSnId() int32 { @@ -6773,7 +6899,7 @@ type GWPlayerMatchBilled struct { func (x *GWPlayerMatchBilled) Reset() { *x = GWPlayerMatchBilled{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6786,7 +6912,7 @@ func (x *GWPlayerMatchBilled) String() string { func (*GWPlayerMatchBilled) ProtoMessage() {} func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6799,7 +6925,7 @@ func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchBilled.ProtoReflect.Descriptor instead. func (*GWPlayerMatchBilled) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{87} + return file_server_proto_rawDescGZIP(), []int{89} } func (x *GWPlayerMatchBilled) GetSceneId() int32 { @@ -6847,7 +6973,7 @@ type GWPlayerMatchGrade struct { func (x *GWPlayerMatchGrade) Reset() { *x = GWPlayerMatchGrade{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6860,7 +6986,7 @@ func (x *GWPlayerMatchGrade) String() string { func (*GWPlayerMatchGrade) ProtoMessage() {} func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6873,7 +6999,7 @@ func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchGrade.ProtoReflect.Descriptor instead. func (*GWPlayerMatchGrade) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{88} + return file_server_proto_rawDescGZIP(), []int{90} } func (x *GWPlayerMatchGrade) GetSceneId() int32 { @@ -6933,7 +7059,7 @@ type WGPlayerQuitMatch struct { func (x *WGPlayerQuitMatch) Reset() { *x = WGPlayerQuitMatch{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6946,7 +7072,7 @@ func (x *WGPlayerQuitMatch) String() string { func (*WGPlayerQuitMatch) ProtoMessage() {} func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6959,7 +7085,7 @@ func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerQuitMatch.ProtoReflect.Descriptor instead. func (*WGPlayerQuitMatch) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{89} + return file_server_proto_rawDescGZIP(), []int{91} } func (x *WGPlayerQuitMatch) GetSnId() int32 { @@ -7000,7 +7126,7 @@ type WGSceneMatchBaseChange struct { func (x *WGSceneMatchBaseChange) Reset() { *x = WGSceneMatchBaseChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7013,7 +7139,7 @@ func (x *WGSceneMatchBaseChange) String() string { func (*WGSceneMatchBaseChange) ProtoMessage() {} func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7026,7 +7152,7 @@ func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSceneMatchBaseChange.ProtoReflect.Descriptor instead. func (*WGSceneMatchBaseChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{90} + return file_server_proto_rawDescGZIP(), []int{92} } func (x *WGSceneMatchBaseChange) GetSceneIds() []int32 { @@ -7079,7 +7205,7 @@ type SSRedirectToPlayer struct { func (x *SSRedirectToPlayer) Reset() { *x = SSRedirectToPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7092,7 +7218,7 @@ func (x *SSRedirectToPlayer) String() string { func (*SSRedirectToPlayer) ProtoMessage() {} func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7105,7 +7231,7 @@ func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use SSRedirectToPlayer.ProtoReflect.Descriptor instead. func (*SSRedirectToPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{91} + return file_server_proto_rawDescGZIP(), []int{93} } func (x *SSRedirectToPlayer) GetSnId() int32 { @@ -7152,7 +7278,7 @@ type WGInviteMatchRob struct { func (x *WGInviteMatchRob) Reset() { *x = WGInviteMatchRob{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7165,7 +7291,7 @@ func (x *WGInviteMatchRob) String() string { func (*WGInviteMatchRob) ProtoMessage() {} func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7178,7 +7304,7 @@ func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteMatchRob.ProtoReflect.Descriptor instead. func (*WGInviteMatchRob) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{92} + return file_server_proto_rawDescGZIP(), []int{94} } func (x *WGInviteMatchRob) GetPlatform() string { @@ -7229,7 +7355,7 @@ type GameInfo struct { func (x *GameInfo) Reset() { *x = GameInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7242,7 +7368,7 @@ func (x *GameInfo) String() string { func (*GameInfo) ProtoMessage() {} func (x *GameInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7255,7 +7381,7 @@ func (x *GameInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GameInfo.ProtoReflect.Descriptor instead. func (*GameInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{93} + return file_server_proto_rawDescGZIP(), []int{95} } func (x *GameInfo) GetGameId() int32 { @@ -7294,7 +7420,7 @@ type WGGameJackpot struct { func (x *WGGameJackpot) Reset() { *x = WGGameJackpot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7307,7 +7433,7 @@ func (x *WGGameJackpot) String() string { func (*WGGameJackpot) ProtoMessage() {} func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7320,7 +7446,7 @@ func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameJackpot.ProtoReflect.Descriptor instead. func (*WGGameJackpot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{94} + return file_server_proto_rawDescGZIP(), []int{96} } func (x *WGGameJackpot) GetSid() int64 { @@ -7370,7 +7496,7 @@ type BigWinHistoryInfo struct { func (x *BigWinHistoryInfo) Reset() { *x = BigWinHistoryInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7383,7 +7509,7 @@ func (x *BigWinHistoryInfo) String() string { func (*BigWinHistoryInfo) ProtoMessage() {} func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7396,7 +7522,7 @@ func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BigWinHistoryInfo.ProtoReflect.Descriptor instead. func (*BigWinHistoryInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{95} + return file_server_proto_rawDescGZIP(), []int{97} } func (x *BigWinHistoryInfo) GetSpinID() string { @@ -7476,7 +7602,7 @@ type WGPlayerEnterMiniGame struct { func (x *WGPlayerEnterMiniGame) Reset() { *x = WGPlayerEnterMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7489,7 +7615,7 @@ func (x *WGPlayerEnterMiniGame) String() string { func (*WGPlayerEnterMiniGame) ProtoMessage() {} func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7502,7 +7628,7 @@ func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnterMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerEnterMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{96} + return file_server_proto_rawDescGZIP(), []int{98} } func (x *WGPlayerEnterMiniGame) GetSid() int64 { @@ -7590,7 +7716,7 @@ type WGPlayerLeaveMiniGame struct { func (x *WGPlayerLeaveMiniGame) Reset() { *x = WGPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7603,7 +7729,7 @@ func (x *WGPlayerLeaveMiniGame) String() string { func (*WGPlayerLeaveMiniGame) ProtoMessage() {} func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7616,7 +7742,7 @@ func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{97} + return file_server_proto_rawDescGZIP(), []int{99} } func (x *WGPlayerLeaveMiniGame) GetSid() int64 { @@ -7659,7 +7785,7 @@ type WGPlayerLeave struct { func (x *WGPlayerLeave) Reset() { *x = WGPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7672,7 +7798,7 @@ func (x *WGPlayerLeave) String() string { func (*WGPlayerLeave) ProtoMessage() {} func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7685,7 +7811,7 @@ func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeave.ProtoReflect.Descriptor instead. func (*WGPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{98} + return file_server_proto_rawDescGZIP(), []int{100} } func (x *WGPlayerLeave) GetSnId() int32 { @@ -7711,7 +7837,7 @@ type GWPlayerLeaveMiniGame struct { func (x *GWPlayerLeaveMiniGame) Reset() { *x = GWPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7724,7 +7850,7 @@ func (x *GWPlayerLeaveMiniGame) String() string { func (*GWPlayerLeaveMiniGame) ProtoMessage() {} func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7737,7 +7863,7 @@ func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*GWPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{99} + return file_server_proto_rawDescGZIP(), []int{101} } func (x *GWPlayerLeaveMiniGame) GetSceneId() int32 { @@ -7787,7 +7913,7 @@ type GWDestroyMiniScene struct { func (x *GWDestroyMiniScene) Reset() { *x = GWDestroyMiniScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7800,7 +7926,7 @@ func (x *GWDestroyMiniScene) String() string { func (*GWDestroyMiniScene) ProtoMessage() {} func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7813,7 +7939,7 @@ func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyMiniScene.ProtoReflect.Descriptor instead. func (*GWDestroyMiniScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{100} + return file_server_proto_rawDescGZIP(), []int{102} } func (x *GWDestroyMiniScene) GetSceneId() int32 { @@ -7835,7 +7961,7 @@ type GRDestroyScene struct { func (x *GRDestroyScene) Reset() { *x = GRDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7848,7 +7974,7 @@ func (x *GRDestroyScene) String() string { func (*GRDestroyScene) ProtoMessage() {} func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7861,7 +7987,7 @@ func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRDestroyScene.ProtoReflect.Descriptor instead. func (*GRDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{101} + return file_server_proto_rawDescGZIP(), []int{103} } func (x *GRDestroyScene) GetSceneId() int32 { @@ -7883,7 +8009,7 @@ type RWAccountInvalid struct { func (x *RWAccountInvalid) Reset() { *x = RWAccountInvalid{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7896,7 +8022,7 @@ func (x *RWAccountInvalid) String() string { func (*RWAccountInvalid) ProtoMessage() {} func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7909,7 +8035,7 @@ func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { // Deprecated: Use RWAccountInvalid.ProtoReflect.Descriptor instead. func (*RWAccountInvalid) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{102} + return file_server_proto_rawDescGZIP(), []int{104} } func (x *RWAccountInvalid) GetAcc() string { @@ -7932,7 +8058,7 @@ type WGDTRoomInfo struct { func (x *WGDTRoomInfo) Reset() { *x = WGDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7945,7 +8071,7 @@ func (x *WGDTRoomInfo) String() string { func (*WGDTRoomInfo) ProtoMessage() {} func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7958,7 +8084,7 @@ func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDTRoomInfo.ProtoReflect.Descriptor instead. func (*WGDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{103} + return file_server_proto_rawDescGZIP(), []int{105} } func (x *WGDTRoomInfo) GetDataKey() string { @@ -7993,7 +8119,7 @@ type PlayerDTCoin struct { func (x *PlayerDTCoin) Reset() { *x = PlayerDTCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8006,7 +8132,7 @@ func (x *PlayerDTCoin) String() string { func (*PlayerDTCoin) ProtoMessage() {} func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8019,7 +8145,7 @@ func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerDTCoin.ProtoReflect.Descriptor instead. func (*PlayerDTCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{104} + return file_server_proto_rawDescGZIP(), []int{106} } func (x *PlayerDTCoin) GetNickName() string { @@ -8090,7 +8216,7 @@ type EResult struct { func (x *EResult) Reset() { *x = EResult{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8103,7 +8229,7 @@ func (x *EResult) String() string { func (*EResult) ProtoMessage() {} func (x *EResult) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8116,7 +8242,7 @@ func (x *EResult) ProtoReflect() protoreflect.Message { // Deprecated: Use EResult.ProtoReflect.Descriptor instead. func (*EResult) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{105} + return file_server_proto_rawDescGZIP(), []int{107} } func (x *EResult) GetIndex() string { @@ -8158,7 +8284,7 @@ type GWDTRoomInfo struct { func (x *GWDTRoomInfo) Reset() { *x = GWDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8171,7 +8297,7 @@ func (x *GWDTRoomInfo) String() string { func (*GWDTRoomInfo) ProtoMessage() {} func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8184,7 +8310,7 @@ func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDTRoomInfo.ProtoReflect.Descriptor instead. func (*GWDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{106} + return file_server_proto_rawDescGZIP(), []int{108} } func (x *GWDTRoomInfo) GetDataKey() string { @@ -8300,7 +8426,7 @@ type WGRoomResults struct { func (x *WGRoomResults) Reset() { *x = WGRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8313,7 +8439,7 @@ func (x *WGRoomResults) String() string { func (*WGRoomResults) ProtoMessage() {} func (x *WGRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8326,7 +8452,7 @@ func (x *WGRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRoomResults.ProtoReflect.Descriptor instead. func (*WGRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{107} + return file_server_proto_rawDescGZIP(), []int{109} } func (x *WGRoomResults) GetRoomId() int32 { @@ -8371,7 +8497,7 @@ type GWRoomResults struct { func (x *GWRoomResults) Reset() { *x = GWRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8384,7 +8510,7 @@ func (x *GWRoomResults) String() string { func (*GWRoomResults) ProtoMessage() {} func (x *GWRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8397,7 +8523,7 @@ func (x *GWRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRoomResults.ProtoReflect.Descriptor instead. func (*GWRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{108} + return file_server_proto_rawDescGZIP(), []int{110} } func (x *GWRoomResults) GetDataKey() string { @@ -8435,7 +8561,7 @@ type GWAddSingleAdjust struct { func (x *GWAddSingleAdjust) Reset() { *x = GWAddSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8448,7 +8574,7 @@ func (x *GWAddSingleAdjust) String() string { func (*GWAddSingleAdjust) ProtoMessage() {} func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8461,7 +8587,7 @@ func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAddSingleAdjust.ProtoReflect.Descriptor instead. func (*GWAddSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{109} + return file_server_proto_rawDescGZIP(), []int{111} } func (x *GWAddSingleAdjust) GetSnId() int32 { @@ -8499,7 +8625,7 @@ type WGSingleAdjust struct { func (x *WGSingleAdjust) Reset() { *x = WGSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8512,7 +8638,7 @@ func (x *WGSingleAdjust) String() string { func (*WGSingleAdjust) ProtoMessage() {} func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8525,7 +8651,7 @@ func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSingleAdjust.ProtoReflect.Descriptor instead. func (*WGSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{110} + return file_server_proto_rawDescGZIP(), []int{112} } func (x *WGSingleAdjust) GetSceneId() int32 { @@ -8566,7 +8692,7 @@ type WbCtrlCfg struct { func (x *WbCtrlCfg) Reset() { *x = WbCtrlCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8579,7 +8705,7 @@ func (x *WbCtrlCfg) String() string { func (*WbCtrlCfg) ProtoMessage() {} func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8592,7 +8718,7 @@ func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use WbCtrlCfg.ProtoReflect.Descriptor instead. func (*WbCtrlCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{111} + return file_server_proto_rawDescGZIP(), []int{113} } func (x *WbCtrlCfg) GetPlatform() string { @@ -8651,7 +8777,7 @@ type WGBuyRecTimeItem struct { func (x *WGBuyRecTimeItem) Reset() { *x = WGBuyRecTimeItem{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8664,7 +8790,7 @@ func (x *WGBuyRecTimeItem) String() string { func (*WGBuyRecTimeItem) ProtoMessage() {} func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8677,7 +8803,7 @@ func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { // Deprecated: Use WGBuyRecTimeItem.ProtoReflect.Descriptor instead. func (*WGBuyRecTimeItem) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{112} + return file_server_proto_rawDescGZIP(), []int{114} } func (x *WGBuyRecTimeItem) GetSnId() int32 { @@ -8714,7 +8840,7 @@ type WGUpdateSkin struct { func (x *WGUpdateSkin) Reset() { *x = WGUpdateSkin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[113] + mi := &file_server_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8727,7 +8853,7 @@ func (x *WGUpdateSkin) String() string { func (*WGUpdateSkin) ProtoMessage() {} func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[113] + mi := &file_server_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8740,7 +8866,7 @@ func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGUpdateSkin.ProtoReflect.Descriptor instead. func (*WGUpdateSkin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{113} + return file_server_proto_rawDescGZIP(), []int{115} } func (x *WGUpdateSkin) GetSnId() int32 { @@ -8770,7 +8896,7 @@ type PlayerChangeItems struct { func (x *PlayerChangeItems) Reset() { *x = PlayerChangeItems{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[114] + mi := &file_server_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8783,7 +8909,7 @@ func (x *PlayerChangeItems) String() string { func (*PlayerChangeItems) ProtoMessage() {} func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[114] + mi := &file_server_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8796,7 +8922,7 @@ func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerChangeItems.ProtoReflect.Descriptor instead. func (*PlayerChangeItems) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{114} + return file_server_proto_rawDescGZIP(), []int{116} } func (x *PlayerChangeItems) GetSnId() int32 { @@ -8860,1144 +8986,1162 @@ var file_server_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0x28, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, - 0x75, 0x6d, 0x22, 0xe0, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, - 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, - 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, - 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, - 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, - 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, - 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, - 0x6b, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, - 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, - 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, - 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, - 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, - 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 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, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, - 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x75, 0x6d, 0x22, 0x9f, 0x01, 0x0a, 0x0b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, + 0x6f, 0x69, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x43, + 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x43, 0x75, 0x72, + 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, + 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, + 0x79, 0x70, 0x65, 0x22, 0xed, 0x04, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, + 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, + 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x43, 0x6f, + 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x43, 0x6f, 0x73, + 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x12, 0x28, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, + 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, 0x72, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, 0x61, 0x63, + 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, + 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x22, 0x0a, + 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, + 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, + 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x1a, + 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 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, 0x03, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, - 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, - 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, - 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, - 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, - 0x6d, 0x73, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, - 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, + 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, 0x75, 0x64, + 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, - 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, - 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, - 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, - 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, - 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, - 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, - 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, - 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, - 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, - 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, - 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, - 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, - 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, - 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, - 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, - 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, - 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, - 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, - 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, - 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, - 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, - 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, - 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, - 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, - 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, - 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, - 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, - 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, - 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, + 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x65, + 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, + 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, + 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, 0x0a, 0x12, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, 0x0a, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, + 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, + 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x73, 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, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, + 0x6f, 0x72, 0x65, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, + 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, 0x47, 0x57, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x13, 0x47, + 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, 0x47, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x42, + 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x0c, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, + 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x0d, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x30, 0x0a, + 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x22, + 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, 0x65, 0x63, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, - 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, - 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, - 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, - 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, - 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, - 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, - 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, - 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, - 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, - 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, - 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, - 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, - 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, - 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, - 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, - 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, - 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, + 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6c, + 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, + 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, + 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x10, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, + 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, + 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x22, 0xb2, + 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, + 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x52, 0x65, + 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, + 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, + 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x8f, + 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, - 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, - 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, - 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, - 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, - 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, - 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, - 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, - 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, - 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, - 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, - 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, - 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, - 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, - 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, - 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, - 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, - 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, - 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, - 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, - 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, - 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, - 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, - 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, - 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, - 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, - 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, - 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, - 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, - 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, - 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, - 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, - 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, - 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, - 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, - 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, - 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, - 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, - 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, - 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, + 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, + 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4d, + 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, + 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, - 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, - 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, - 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, - 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, - 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, - 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, - 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x69, + 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, 0x73, 0x68, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, 0x46, 0x69, + 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, 0x68, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, + 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x52, + 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, + 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, + 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, + 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, + 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, + 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, + 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, + 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, + 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, + 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, + 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, + 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, - 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, - 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, - 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, + 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, + 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, + 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, + 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, + 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, - 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, - 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, + 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, + 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, + 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, + 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, + 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, + 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, + 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, + 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, + 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, + 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, + 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, + 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, + 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, + 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, + 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, + 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, + 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, + 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, + 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, + 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, + 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, + 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, + 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, + 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, + 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, + 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, + 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, - 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, - 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, - 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, - 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, - 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, - 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, - 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, - 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, - 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, - 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, - 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, - 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, - 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, - 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, - 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, - 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, - 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, - 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, - 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, + 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, + 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, + 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, + 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, + 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, - 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, - 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, - 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, - 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, - 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, - 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, - 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, - 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, - 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, - 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, - 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, - 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, - 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, - 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, - 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, - 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, - 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, - 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, - 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, - 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, - 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, - 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, - 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, - 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, - 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, - 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, - 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, - 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, - 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, - 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, - 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, - 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, - 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, - 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, - 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, - 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, - 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, - 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, - 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, - 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, - 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, - 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, - 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, - 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, - 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, - 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, - 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, - 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, - 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, - 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, - 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, - 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, - 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, - 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, - 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, - 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, - 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, + 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, + 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, + 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, + 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, + 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, + 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, + 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, + 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, + 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, + 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, + 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, + 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, + 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, + 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, + 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, + 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, + 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, + 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, + 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, + 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, + 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, + 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, + 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, + 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, + 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, + 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, + 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, + 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, + 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, + 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, + 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, + 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, + 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, + 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, + 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, + 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, + 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, + 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, + 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, + 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, + 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, + 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, + 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, + 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, + 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, + 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, + 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, + 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, + 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, + 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, + 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, + 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, + 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, + 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, + 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, + 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, + 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, + 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, + 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, + 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, + 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, + 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, + 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, + 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, + 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, + 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, + 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, + 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, + 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, + 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, + 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, + 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, + 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, + 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, + 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, + 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, + 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, + 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, + 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, + 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, + 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, + 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, + 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, + 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, + 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10013,7 +10157,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 120) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 122) var file_server_proto_goTypes = []interface{}{ (SSPacketID)(0), // 0: server.SSPacketID (SGBindGroupTag_OpCode)(0), // 1: server.SGBindGroupTag.OpCode @@ -10026,158 +10170,163 @@ var file_server_proto_goTypes = []interface{}{ (*ServerCtrl)(nil), // 8: server.ServerCtrl (*ServerNotice)(nil), // 9: server.ServerNotice (*Item)(nil), // 10: server.Item - (*WGCreateScene)(nil), // 11: server.WGCreateScene - (*WGDestroyScene)(nil), // 12: server.WGDestroyScene - (*GWDestroyScene)(nil), // 13: server.GWDestroyScene - (*RebateTask)(nil), // 14: server.RebateTask - (*WGPlayerEnter)(nil), // 15: server.WGPlayerEnter - (*WGAudienceSit)(nil), // 16: server.WGAudienceSit - (*WGPlayerReturn)(nil), // 17: server.WGPlayerReturn - (*GWPlayerLeave)(nil), // 18: server.GWPlayerLeave - (*WGPlayerDropLine)(nil), // 19: server.WGPlayerDropLine - (*WGPlayerRehold)(nil), // 20: server.WGPlayerRehold - (*GWBilledRoomCard)(nil), // 21: server.GWBilledRoomCard - (*GGPlayerSessionBind)(nil), // 22: server.GGPlayerSessionBind - (*GGPlayerSessionUnBind)(nil), // 23: server.GGPlayerSessionUnBind - (*WGDayTimeChange)(nil), // 24: server.WGDayTimeChange - (*ReplayPlayerData)(nil), // 25: server.ReplayPlayerData - (*ReplayRecord)(nil), // 26: server.ReplayRecord - (*ReplaySequene)(nil), // 27: server.ReplaySequene - (*GRReplaySequene)(nil), // 28: server.GRReplaySequene - (*WRLoginRec)(nil), // 29: server.WRLoginRec - (*WRGameDetail)(nil), // 30: server.WRGameDetail - (*WRPlayerData)(nil), // 31: server.WRPlayerData - (*WTPlayerPay)(nil), // 32: server.WTPlayerPay - (*PlayerGameRec)(nil), // 33: server.PlayerGameRec - (*GWGameRec)(nil), // 34: server.GWGameRec - (*GWSceneStart)(nil), // 35: server.GWSceneStart - (*PlayerCtx)(nil), // 36: server.PlayerCtx - (*FishRecord)(nil), // 37: server.FishRecord - (*GWFishRecord)(nil), // 38: server.GWFishRecord - (*GWSceneState)(nil), // 39: server.GWSceneState - (*WRInviteRobot)(nil), // 40: server.WRInviteRobot - (*WRInviteCreateRoom)(nil), // 41: server.WRInviteCreateRoom - (*WGAgentKickOutPlayer)(nil), // 42: server.WGAgentKickOutPlayer - (*WDDataAnalysis)(nil), // 43: server.WDDataAnalysis - (*PlayerCard)(nil), // 44: server.PlayerCard - (*GNPlayerCards)(nil), // 45: server.GNPlayerCards - (*RobotData)(nil), // 46: server.RobotData - (*GNPlayerParam)(nil), // 47: server.GNPlayerParam - (*GWRebuildScene)(nil), // 48: server.GWRebuildScene - (*WGRebindPlayerSnId)(nil), // 49: server.WGRebindPlayerSnId - (*GWPlayerFlag)(nil), // 50: server.GWPlayerFlag - (*WGHundredOp)(nil), // 51: server.WGHundredOp - (*GWNewNotice)(nil), // 52: server.GWNewNotice - (*PlayerStatics)(nil), // 53: server.PlayerStatics - (*GWPlayerStatics)(nil), // 54: server.GWPlayerStatics - (*WGResetCoinPool)(nil), // 55: server.WGResetCoinPool - (*WGSetPlayerBlackLevel)(nil), // 56: server.WGSetPlayerBlackLevel - (*GWAutoRelieveWBLevel)(nil), // 57: server.GWAutoRelieveWBLevel - (*GWScenePlayerLog)(nil), // 58: server.GWScenePlayerLog - (*GWPlayerForceLeave)(nil), // 59: server.GWPlayerForceLeave - (*PlayerData)(nil), // 60: server.PlayerData - (*GWPlayerData)(nil), // 61: server.GWPlayerData - (*PlayerWinScore)(nil), // 62: server.PlayerWinScore - (*GWPlayerWinScore)(nil), // 63: server.GWPlayerWinScore - (*WGPayerOnGameCount)(nil), // 64: server.WGPayerOnGameCount - (*GRGameFreeData)(nil), // 65: server.GRGameFreeData - (*WGSyncPlayerSafeBoxCoin)(nil), // 66: server.WGSyncPlayerSafeBoxCoin - (*WGClubMessage)(nil), // 67: server.WGClubMessage - (*DWThirdRebateMessage)(nil), // 68: server.DWThirdRebateMessage - (*DWThirdRoundMessage)(nil), // 69: server.DWThirdRoundMessage - (*WDACKThirdRebateMessage)(nil), // 70: server.WDACKThirdRebateMessage - (*GWGameStateLog)(nil), // 71: server.GWGameStateLog - (*GWGameState)(nil), // 72: server.GWGameState - (*GWGameJackList)(nil), // 73: server.GWGameJackList - (*GWGameJackCoin)(nil), // 74: server.GWGameJackCoin - (*WGNiceIdRebind)(nil), // 75: server.WGNiceIdRebind - (*PLAYERWINCOININFO)(nil), // 76: server.PLAYERWINCOININFO - (*GWPLAYERWINCOIN)(nil), // 77: server.GWPLAYERWINCOIN - (*GWPlayerAutoMarkTag)(nil), // 78: server.GWPlayerAutoMarkTag - (*WGInviteRobEnterCoinSceneQueue)(nil), // 79: server.WGInviteRobEnterCoinSceneQueue - (*WGGameForceStart)(nil), // 80: server.WGGameForceStart - (*ProfitControlGameCfg)(nil), // 81: server.ProfitControlGameCfg - (*ProfitControlPlatformCfg)(nil), // 82: server.ProfitControlPlatformCfg - (*WGProfitControlCorrect)(nil), // 83: server.WGProfitControlCorrect - (*GWChangeSceneEvent)(nil), // 84: server.GWChangeSceneEvent - (*PlayerIParam)(nil), // 85: server.PlayerIParam - (*PlayerSParam)(nil), // 86: server.PlayerSParam - (*PlayerCParam)(nil), // 87: server.PlayerCParam - (*PlayerMatchCoin)(nil), // 88: server.PlayerMatchCoin - (*GWPlayerMatchBilled)(nil), // 89: server.GWPlayerMatchBilled - (*GWPlayerMatchGrade)(nil), // 90: server.GWPlayerMatchGrade - (*WGPlayerQuitMatch)(nil), // 91: server.WGPlayerQuitMatch - (*WGSceneMatchBaseChange)(nil), // 92: server.WGSceneMatchBaseChange - (*SSRedirectToPlayer)(nil), // 93: server.SSRedirectToPlayer - (*WGInviteMatchRob)(nil), // 94: server.WGInviteMatchRob - (*GameInfo)(nil), // 95: server.GameInfo - (*WGGameJackpot)(nil), // 96: server.WGGameJackpot - (*BigWinHistoryInfo)(nil), // 97: server.BigWinHistoryInfo - (*WGPlayerEnterMiniGame)(nil), // 98: server.WGPlayerEnterMiniGame - (*WGPlayerLeaveMiniGame)(nil), // 99: server.WGPlayerLeaveMiniGame - (*WGPlayerLeave)(nil), // 100: server.WGPlayerLeave - (*GWPlayerLeaveMiniGame)(nil), // 101: server.GWPlayerLeaveMiniGame - (*GWDestroyMiniScene)(nil), // 102: server.GWDestroyMiniScene - (*GRDestroyScene)(nil), // 103: server.GRDestroyScene - (*RWAccountInvalid)(nil), // 104: server.RWAccountInvalid - (*WGDTRoomInfo)(nil), // 105: server.WGDTRoomInfo - (*PlayerDTCoin)(nil), // 106: server.PlayerDTCoin - (*EResult)(nil), // 107: server.EResult - (*GWDTRoomInfo)(nil), // 108: server.GWDTRoomInfo - (*WGRoomResults)(nil), // 109: server.WGRoomResults - (*GWRoomResults)(nil), // 110: server.GWRoomResults - (*GWAddSingleAdjust)(nil), // 111: server.GWAddSingleAdjust - (*WGSingleAdjust)(nil), // 112: server.WGSingleAdjust - (*WbCtrlCfg)(nil), // 113: server.WbCtrlCfg - (*WGBuyRecTimeItem)(nil), // 114: server.WGBuyRecTimeItem - (*WGUpdateSkin)(nil), // 115: server.WGUpdateSkin - (*PlayerChangeItems)(nil), // 116: server.PlayerChangeItems - nil, // 117: server.WGPlayerEnter.ItemsEntry - nil, // 118: server.WGPlayerEnter.RankScoreEntry - nil, // 119: server.GWPlayerLeave.ItemsEntry - nil, // 120: server.GWPlayerLeave.MatchRobotGradesEntry - nil, // 121: server.GWPlayerLeave.RankScoreEntry - (*DB_GameFree)(nil), // 122: server.DB_GameFree + (*CustomParam)(nil), // 11: server.CustomParam + (*MatchParam)(nil), // 12: server.MatchParam + (*WGCreateScene)(nil), // 13: server.WGCreateScene + (*WGDestroyScene)(nil), // 14: server.WGDestroyScene + (*GWDestroyScene)(nil), // 15: server.GWDestroyScene + (*RebateTask)(nil), // 16: server.RebateTask + (*WGPlayerEnter)(nil), // 17: server.WGPlayerEnter + (*WGAudienceSit)(nil), // 18: server.WGAudienceSit + (*WGPlayerReturn)(nil), // 19: server.WGPlayerReturn + (*GWPlayerLeave)(nil), // 20: server.GWPlayerLeave + (*WGPlayerDropLine)(nil), // 21: server.WGPlayerDropLine + (*WGPlayerRehold)(nil), // 22: server.WGPlayerRehold + (*GWBilledRoomCard)(nil), // 23: server.GWBilledRoomCard + (*GGPlayerSessionBind)(nil), // 24: server.GGPlayerSessionBind + (*GGPlayerSessionUnBind)(nil), // 25: server.GGPlayerSessionUnBind + (*WGDayTimeChange)(nil), // 26: server.WGDayTimeChange + (*ReplayPlayerData)(nil), // 27: server.ReplayPlayerData + (*ReplayRecord)(nil), // 28: server.ReplayRecord + (*ReplaySequene)(nil), // 29: server.ReplaySequene + (*GRReplaySequene)(nil), // 30: server.GRReplaySequene + (*WRLoginRec)(nil), // 31: server.WRLoginRec + (*WRGameDetail)(nil), // 32: server.WRGameDetail + (*WRPlayerData)(nil), // 33: server.WRPlayerData + (*WTPlayerPay)(nil), // 34: server.WTPlayerPay + (*PlayerGameRec)(nil), // 35: server.PlayerGameRec + (*GWGameRec)(nil), // 36: server.GWGameRec + (*GWSceneStart)(nil), // 37: server.GWSceneStart + (*PlayerCtx)(nil), // 38: server.PlayerCtx + (*FishRecord)(nil), // 39: server.FishRecord + (*GWFishRecord)(nil), // 40: server.GWFishRecord + (*GWSceneState)(nil), // 41: server.GWSceneState + (*WRInviteRobot)(nil), // 42: server.WRInviteRobot + (*WRInviteCreateRoom)(nil), // 43: server.WRInviteCreateRoom + (*WGAgentKickOutPlayer)(nil), // 44: server.WGAgentKickOutPlayer + (*WDDataAnalysis)(nil), // 45: server.WDDataAnalysis + (*PlayerCard)(nil), // 46: server.PlayerCard + (*GNPlayerCards)(nil), // 47: server.GNPlayerCards + (*RobotData)(nil), // 48: server.RobotData + (*GNPlayerParam)(nil), // 49: server.GNPlayerParam + (*GWRebuildScene)(nil), // 50: server.GWRebuildScene + (*WGRebindPlayerSnId)(nil), // 51: server.WGRebindPlayerSnId + (*GWPlayerFlag)(nil), // 52: server.GWPlayerFlag + (*WGHundredOp)(nil), // 53: server.WGHundredOp + (*GWNewNotice)(nil), // 54: server.GWNewNotice + (*PlayerStatics)(nil), // 55: server.PlayerStatics + (*GWPlayerStatics)(nil), // 56: server.GWPlayerStatics + (*WGResetCoinPool)(nil), // 57: server.WGResetCoinPool + (*WGSetPlayerBlackLevel)(nil), // 58: server.WGSetPlayerBlackLevel + (*GWAutoRelieveWBLevel)(nil), // 59: server.GWAutoRelieveWBLevel + (*GWScenePlayerLog)(nil), // 60: server.GWScenePlayerLog + (*GWPlayerForceLeave)(nil), // 61: server.GWPlayerForceLeave + (*PlayerData)(nil), // 62: server.PlayerData + (*GWPlayerData)(nil), // 63: server.GWPlayerData + (*PlayerWinScore)(nil), // 64: server.PlayerWinScore + (*GWPlayerWinScore)(nil), // 65: server.GWPlayerWinScore + (*WGPayerOnGameCount)(nil), // 66: server.WGPayerOnGameCount + (*GRGameFreeData)(nil), // 67: server.GRGameFreeData + (*WGSyncPlayerSafeBoxCoin)(nil), // 68: server.WGSyncPlayerSafeBoxCoin + (*WGClubMessage)(nil), // 69: server.WGClubMessage + (*DWThirdRebateMessage)(nil), // 70: server.DWThirdRebateMessage + (*DWThirdRoundMessage)(nil), // 71: server.DWThirdRoundMessage + (*WDACKThirdRebateMessage)(nil), // 72: server.WDACKThirdRebateMessage + (*GWGameStateLog)(nil), // 73: server.GWGameStateLog + (*GWGameState)(nil), // 74: server.GWGameState + (*GWGameJackList)(nil), // 75: server.GWGameJackList + (*GWGameJackCoin)(nil), // 76: server.GWGameJackCoin + (*WGNiceIdRebind)(nil), // 77: server.WGNiceIdRebind + (*PLAYERWINCOININFO)(nil), // 78: server.PLAYERWINCOININFO + (*GWPLAYERWINCOIN)(nil), // 79: server.GWPLAYERWINCOIN + (*GWPlayerAutoMarkTag)(nil), // 80: server.GWPlayerAutoMarkTag + (*WGInviteRobEnterCoinSceneQueue)(nil), // 81: server.WGInviteRobEnterCoinSceneQueue + (*WGGameForceStart)(nil), // 82: server.WGGameForceStart + (*ProfitControlGameCfg)(nil), // 83: server.ProfitControlGameCfg + (*ProfitControlPlatformCfg)(nil), // 84: server.ProfitControlPlatformCfg + (*WGProfitControlCorrect)(nil), // 85: server.WGProfitControlCorrect + (*GWChangeSceneEvent)(nil), // 86: server.GWChangeSceneEvent + (*PlayerIParam)(nil), // 87: server.PlayerIParam + (*PlayerSParam)(nil), // 88: server.PlayerSParam + (*PlayerCParam)(nil), // 89: server.PlayerCParam + (*PlayerMatchCoin)(nil), // 90: server.PlayerMatchCoin + (*GWPlayerMatchBilled)(nil), // 91: server.GWPlayerMatchBilled + (*GWPlayerMatchGrade)(nil), // 92: server.GWPlayerMatchGrade + (*WGPlayerQuitMatch)(nil), // 93: server.WGPlayerQuitMatch + (*WGSceneMatchBaseChange)(nil), // 94: server.WGSceneMatchBaseChange + (*SSRedirectToPlayer)(nil), // 95: server.SSRedirectToPlayer + (*WGInviteMatchRob)(nil), // 96: server.WGInviteMatchRob + (*GameInfo)(nil), // 97: server.GameInfo + (*WGGameJackpot)(nil), // 98: server.WGGameJackpot + (*BigWinHistoryInfo)(nil), // 99: server.BigWinHistoryInfo + (*WGPlayerEnterMiniGame)(nil), // 100: server.WGPlayerEnterMiniGame + (*WGPlayerLeaveMiniGame)(nil), // 101: server.WGPlayerLeaveMiniGame + (*WGPlayerLeave)(nil), // 102: server.WGPlayerLeave + (*GWPlayerLeaveMiniGame)(nil), // 103: server.GWPlayerLeaveMiniGame + (*GWDestroyMiniScene)(nil), // 104: server.GWDestroyMiniScene + (*GRDestroyScene)(nil), // 105: server.GRDestroyScene + (*RWAccountInvalid)(nil), // 106: server.RWAccountInvalid + (*WGDTRoomInfo)(nil), // 107: server.WGDTRoomInfo + (*PlayerDTCoin)(nil), // 108: server.PlayerDTCoin + (*EResult)(nil), // 109: server.EResult + (*GWDTRoomInfo)(nil), // 110: server.GWDTRoomInfo + (*WGRoomResults)(nil), // 111: server.WGRoomResults + (*GWRoomResults)(nil), // 112: server.GWRoomResults + (*GWAddSingleAdjust)(nil), // 113: server.GWAddSingleAdjust + (*WGSingleAdjust)(nil), // 114: server.WGSingleAdjust + (*WbCtrlCfg)(nil), // 115: server.WbCtrlCfg + (*WGBuyRecTimeItem)(nil), // 116: server.WGBuyRecTimeItem + (*WGUpdateSkin)(nil), // 117: server.WGUpdateSkin + (*PlayerChangeItems)(nil), // 118: server.PlayerChangeItems + nil, // 119: server.WGPlayerEnter.ItemsEntry + nil, // 120: server.WGPlayerEnter.RankScoreEntry + nil, // 121: server.GWPlayerLeave.ItemsEntry + nil, // 122: server.GWPlayerLeave.MatchRobotGradesEntry + nil, // 123: server.GWPlayerLeave.RankScoreEntry + (*DB_GameFree)(nil), // 124: server.DB_GameFree } var file_server_proto_depIdxs = []int32{ 1, // 0: server.SGBindGroupTag.Code:type_name -> server.SGBindGroupTag.OpCode 4, // 1: server.ServerCtrl.Params:type_name -> server.OpResultParam - 122, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree + 124, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree 10, // 3: server.WGCreateScene.Items:type_name -> server.Item - 85, // 4: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam - 86, // 5: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam - 87, // 6: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam - 117, // 7: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry - 118, // 8: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry - 119, // 9: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry - 120, // 10: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry - 121, // 11: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry - 26, // 12: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord - 27, // 13: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene - 25, // 14: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData - 33, // 15: server.GWGameRec.Datas:type_name -> server.PlayerGameRec - 37, // 16: server.GWFishRecord.FishRecords:type_name -> server.FishRecord - 44, // 17: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard - 46, // 18: server.GNPlayerParam.Playerdata:type_name -> server.RobotData - 53, // 19: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics - 60, // 20: server.GWPlayerData.Datas:type_name -> server.PlayerData - 62, // 21: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore - 122, // 22: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree - 122, // 23: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree - 76, // 24: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO - 81, // 25: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg - 82, // 26: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg - 88, // 27: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin - 88, // 28: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin - 95, // 29: server.WGGameJackpot.Info:type_name -> server.GameInfo - 106, // 30: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin - 107, // 31: server.GWDTRoomInfo.Results:type_name -> server.EResult - 10, // 32: server.PlayerChangeItems.Items:type_name -> server.Item - 33, // [33:33] is the sub-list for method output_type - 33, // [33:33] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 10, // 4: server.WGCreateScene.CostItems:type_name -> server.Item + 11, // 5: server.WGCreateScene.Custom:type_name -> server.CustomParam + 12, // 6: server.WGCreateScene.Match:type_name -> server.MatchParam + 87, // 7: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam + 88, // 8: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam + 89, // 9: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam + 119, // 10: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry + 120, // 11: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry + 121, // 12: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry + 122, // 13: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry + 123, // 14: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry + 28, // 15: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord + 29, // 16: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene + 27, // 17: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData + 35, // 18: server.GWGameRec.Datas:type_name -> server.PlayerGameRec + 39, // 19: server.GWFishRecord.FishRecords:type_name -> server.FishRecord + 46, // 20: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard + 48, // 21: server.GNPlayerParam.Playerdata:type_name -> server.RobotData + 55, // 22: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics + 62, // 23: server.GWPlayerData.Datas:type_name -> server.PlayerData + 64, // 24: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore + 124, // 25: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree + 124, // 26: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree + 78, // 27: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO + 83, // 28: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg + 84, // 29: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg + 90, // 30: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin + 90, // 31: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin + 97, // 32: server.WGGameJackpot.Info:type_name -> server.GameInfo + 108, // 33: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin + 109, // 34: server.GWDTRoomInfo.Results:type_name -> server.EResult + 10, // 35: server.PlayerChangeItems.Items:type_name -> server.Item + 36, // [36:36] is the sub-list for method output_type + 36, // [36:36] is the sub-list for method input_type + 36, // [36:36] is the sub-list for extension type_name + 36, // [36:36] is the sub-list for extension extendee + 0, // [0:36] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -10296,7 +10445,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGCreateScene); i { + switch v := v.(*CustomParam); i { case 0: return &v.state case 1: @@ -10308,7 +10457,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDestroyScene); i { + switch v := v.(*MatchParam); i { case 0: return &v.state case 1: @@ -10320,7 +10469,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyScene); i { + switch v := v.(*WGCreateScene); i { case 0: return &v.state case 1: @@ -10332,7 +10481,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RebateTask); i { + switch v := v.(*WGDestroyScene); i { case 0: return &v.state case 1: @@ -10344,7 +10493,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnter); i { + switch v := v.(*GWDestroyScene); i { case 0: return &v.state case 1: @@ -10356,7 +10505,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAudienceSit); i { + switch v := v.(*RebateTask); i { case 0: return &v.state case 1: @@ -10368,7 +10517,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerReturn); i { + switch v := v.(*WGPlayerEnter); i { case 0: return &v.state case 1: @@ -10380,7 +10529,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeave); i { + switch v := v.(*WGAudienceSit); i { case 0: return &v.state case 1: @@ -10392,7 +10541,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerDropLine); i { + switch v := v.(*WGPlayerReturn); i { case 0: return &v.state case 1: @@ -10404,7 +10553,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerRehold); i { + switch v := v.(*GWPlayerLeave); i { case 0: return &v.state case 1: @@ -10416,7 +10565,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWBilledRoomCard); i { + switch v := v.(*WGPlayerDropLine); i { case 0: return &v.state case 1: @@ -10428,7 +10577,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionBind); i { + switch v := v.(*WGPlayerRehold); i { case 0: return &v.state case 1: @@ -10440,7 +10589,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionUnBind); i { + switch v := v.(*GWBilledRoomCard); i { case 0: return &v.state case 1: @@ -10452,7 +10601,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDayTimeChange); i { + switch v := v.(*GGPlayerSessionBind); i { case 0: return &v.state case 1: @@ -10464,7 +10613,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayPlayerData); i { + switch v := v.(*GGPlayerSessionUnBind); i { case 0: return &v.state case 1: @@ -10476,7 +10625,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayRecord); i { + switch v := v.(*WGDayTimeChange); i { case 0: return &v.state case 1: @@ -10488,7 +10637,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaySequene); i { + switch v := v.(*ReplayPlayerData); i { case 0: return &v.state case 1: @@ -10500,7 +10649,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRReplaySequene); i { + switch v := v.(*ReplayRecord); i { case 0: return &v.state case 1: @@ -10512,7 +10661,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRLoginRec); i { + switch v := v.(*ReplaySequene); i { case 0: return &v.state case 1: @@ -10524,7 +10673,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRGameDetail); i { + switch v := v.(*GRReplaySequene); i { case 0: return &v.state case 1: @@ -10536,7 +10685,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRPlayerData); i { + switch v := v.(*WRLoginRec); i { case 0: return &v.state case 1: @@ -10548,7 +10697,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WTPlayerPay); i { + switch v := v.(*WRGameDetail); i { case 0: return &v.state case 1: @@ -10560,7 +10709,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { + switch v := v.(*WRPlayerData); i { case 0: return &v.state case 1: @@ -10572,7 +10721,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameRec); i { + switch v := v.(*WTPlayerPay); i { case 0: return &v.state case 1: @@ -10584,7 +10733,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneStart); i { + switch v := v.(*PlayerGameRec); i { case 0: return &v.state case 1: @@ -10596,7 +10745,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCtx); i { + switch v := v.(*GWGameRec); i { case 0: return &v.state case 1: @@ -10608,7 +10757,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FishRecord); i { + switch v := v.(*GWSceneStart); i { case 0: return &v.state case 1: @@ -10620,7 +10769,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWFishRecord); i { + switch v := v.(*PlayerCtx); i { case 0: return &v.state case 1: @@ -10632,7 +10781,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneState); i { + switch v := v.(*FishRecord); i { case 0: return &v.state case 1: @@ -10644,7 +10793,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteRobot); i { + switch v := v.(*GWFishRecord); i { case 0: return &v.state case 1: @@ -10656,7 +10805,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteCreateRoom); i { + switch v := v.(*GWSceneState); i { case 0: return &v.state case 1: @@ -10668,7 +10817,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAgentKickOutPlayer); i { + switch v := v.(*WRInviteRobot); i { case 0: return &v.state case 1: @@ -10680,7 +10829,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDDataAnalysis); i { + switch v := v.(*WRInviteCreateRoom); i { case 0: return &v.state case 1: @@ -10692,7 +10841,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCard); i { + switch v := v.(*WGAgentKickOutPlayer); i { case 0: return &v.state case 1: @@ -10704,7 +10853,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerCards); i { + switch v := v.(*WDDataAnalysis); i { case 0: return &v.state case 1: @@ -10716,7 +10865,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RobotData); i { + switch v := v.(*PlayerCard); i { case 0: return &v.state case 1: @@ -10728,7 +10877,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerParam); i { + switch v := v.(*GNPlayerCards); i { case 0: return &v.state case 1: @@ -10740,7 +10889,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRebuildScene); i { + switch v := v.(*RobotData); i { case 0: return &v.state case 1: @@ -10752,7 +10901,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRebindPlayerSnId); i { + switch v := v.(*GNPlayerParam); i { case 0: return &v.state case 1: @@ -10764,7 +10913,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerFlag); i { + switch v := v.(*GWRebuildScene); i { case 0: return &v.state case 1: @@ -10776,7 +10925,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGHundredOp); i { + switch v := v.(*WGRebindPlayerSnId); i { case 0: return &v.state case 1: @@ -10788,7 +10937,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWNewNotice); i { + switch v := v.(*GWPlayerFlag); i { case 0: return &v.state case 1: @@ -10800,7 +10949,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerStatics); i { + switch v := v.(*WGHundredOp); i { case 0: return &v.state case 1: @@ -10812,7 +10961,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerStatics); i { + switch v := v.(*GWNewNotice); i { case 0: return &v.state case 1: @@ -10824,7 +10973,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGResetCoinPool); i { + switch v := v.(*PlayerStatics); i { case 0: return &v.state case 1: @@ -10836,7 +10985,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSetPlayerBlackLevel); i { + switch v := v.(*GWPlayerStatics); i { case 0: return &v.state case 1: @@ -10848,7 +10997,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAutoRelieveWBLevel); i { + switch v := v.(*WGResetCoinPool); i { case 0: return &v.state case 1: @@ -10860,7 +11009,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWScenePlayerLog); i { + switch v := v.(*WGSetPlayerBlackLevel); i { case 0: return &v.state case 1: @@ -10872,7 +11021,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerForceLeave); i { + switch v := v.(*GWAutoRelieveWBLevel); i { case 0: return &v.state case 1: @@ -10884,7 +11033,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerData); i { + switch v := v.(*GWScenePlayerLog); i { case 0: return &v.state case 1: @@ -10896,7 +11045,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerData); i { + switch v := v.(*GWPlayerForceLeave); i { case 0: return &v.state case 1: @@ -10908,7 +11057,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerWinScore); i { + switch v := v.(*PlayerData); i { case 0: return &v.state case 1: @@ -10920,7 +11069,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerWinScore); i { + switch v := v.(*GWPlayerData); i { case 0: return &v.state case 1: @@ -10932,7 +11081,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPayerOnGameCount); i { + switch v := v.(*PlayerWinScore); i { case 0: return &v.state case 1: @@ -10944,7 +11093,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRGameFreeData); i { + switch v := v.(*GWPlayerWinScore); i { case 0: return &v.state case 1: @@ -10956,7 +11105,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSyncPlayerSafeBoxCoin); i { + switch v := v.(*WGPayerOnGameCount); i { case 0: return &v.state case 1: @@ -10968,7 +11117,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGClubMessage); i { + switch v := v.(*GRGameFreeData); i { case 0: return &v.state case 1: @@ -10980,7 +11129,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRebateMessage); i { + switch v := v.(*WGSyncPlayerSafeBoxCoin); i { case 0: return &v.state case 1: @@ -10992,7 +11141,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRoundMessage); i { + switch v := v.(*WGClubMessage); i { case 0: return &v.state case 1: @@ -11004,7 +11153,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDACKThirdRebateMessage); i { + switch v := v.(*DWThirdRebateMessage); i { case 0: return &v.state case 1: @@ -11016,7 +11165,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameStateLog); i { + switch v := v.(*DWThirdRoundMessage); i { case 0: return &v.state case 1: @@ -11028,7 +11177,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameState); i { + switch v := v.(*WDACKThirdRebateMessage); i { case 0: return &v.state case 1: @@ -11040,7 +11189,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackList); i { + switch v := v.(*GWGameStateLog); i { case 0: return &v.state case 1: @@ -11052,7 +11201,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackCoin); i { + switch v := v.(*GWGameState); i { case 0: return &v.state case 1: @@ -11064,7 +11213,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGNiceIdRebind); i { + switch v := v.(*GWGameJackList); i { case 0: return &v.state case 1: @@ -11076,7 +11225,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PLAYERWINCOININFO); i { + switch v := v.(*GWGameJackCoin); i { case 0: return &v.state case 1: @@ -11088,7 +11237,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPLAYERWINCOIN); i { + switch v := v.(*WGNiceIdRebind); i { case 0: return &v.state case 1: @@ -11100,7 +11249,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerAutoMarkTag); i { + switch v := v.(*PLAYERWINCOININFO); i { case 0: return &v.state case 1: @@ -11112,7 +11261,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { + switch v := v.(*GWPLAYERWINCOIN); i { case 0: return &v.state case 1: @@ -11124,7 +11273,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameForceStart); i { + switch v := v.(*GWPlayerAutoMarkTag); i { case 0: return &v.state case 1: @@ -11136,7 +11285,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlGameCfg); i { + switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { case 0: return &v.state case 1: @@ -11148,7 +11297,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlPlatformCfg); i { + switch v := v.(*WGGameForceStart); i { case 0: return &v.state case 1: @@ -11160,7 +11309,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGProfitControlCorrect); i { + switch v := v.(*ProfitControlGameCfg); i { case 0: return &v.state case 1: @@ -11172,7 +11321,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWChangeSceneEvent); i { + switch v := v.(*ProfitControlPlatformCfg); i { case 0: return &v.state case 1: @@ -11184,7 +11333,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerIParam); i { + switch v := v.(*WGProfitControlCorrect); i { case 0: return &v.state case 1: @@ -11196,7 +11345,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerSParam); i { + switch v := v.(*GWChangeSceneEvent); i { case 0: return &v.state case 1: @@ -11208,7 +11357,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCParam); i { + switch v := v.(*PlayerIParam); i { case 0: return &v.state case 1: @@ -11220,7 +11369,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerMatchCoin); i { + switch v := v.(*PlayerSParam); i { case 0: return &v.state case 1: @@ -11232,7 +11381,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchBilled); i { + switch v := v.(*PlayerCParam); i { case 0: return &v.state case 1: @@ -11244,7 +11393,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchGrade); i { + switch v := v.(*PlayerMatchCoin); i { case 0: return &v.state case 1: @@ -11256,7 +11405,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerQuitMatch); i { + switch v := v.(*GWPlayerMatchBilled); i { case 0: return &v.state case 1: @@ -11268,7 +11417,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSceneMatchBaseChange); i { + switch v := v.(*GWPlayerMatchGrade); i { case 0: return &v.state case 1: @@ -11280,7 +11429,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SSRedirectToPlayer); i { + switch v := v.(*WGPlayerQuitMatch); i { case 0: return &v.state case 1: @@ -11292,7 +11441,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteMatchRob); i { + switch v := v.(*WGSceneMatchBaseChange); i { case 0: return &v.state case 1: @@ -11304,7 +11453,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameInfo); i { + switch v := v.(*SSRedirectToPlayer); i { case 0: return &v.state case 1: @@ -11316,7 +11465,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameJackpot); i { + switch v := v.(*WGInviteMatchRob); i { case 0: return &v.state case 1: @@ -11328,7 +11477,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BigWinHistoryInfo); i { + switch v := v.(*GameInfo); i { case 0: return &v.state case 1: @@ -11340,7 +11489,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnterMiniGame); i { + switch v := v.(*WGGameJackpot); i { case 0: return &v.state case 1: @@ -11352,7 +11501,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeaveMiniGame); i { + switch v := v.(*BigWinHistoryInfo); i { case 0: return &v.state case 1: @@ -11364,7 +11513,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeave); i { + switch v := v.(*WGPlayerEnterMiniGame); i { case 0: return &v.state case 1: @@ -11376,7 +11525,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11388,7 +11537,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyMiniScene); i { + switch v := v.(*WGPlayerLeave); i { case 0: return &v.state case 1: @@ -11400,7 +11549,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRDestroyScene); i { + switch v := v.(*GWPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11412,7 +11561,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RWAccountInvalid); i { + switch v := v.(*GWDestroyMiniScene); i { case 0: return &v.state case 1: @@ -11424,7 +11573,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDTRoomInfo); i { + switch v := v.(*GRDestroyScene); i { case 0: return &v.state case 1: @@ -11436,7 +11585,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerDTCoin); i { + switch v := v.(*RWAccountInvalid); i { case 0: return &v.state case 1: @@ -11448,7 +11597,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EResult); i { + switch v := v.(*WGDTRoomInfo); i { case 0: return &v.state case 1: @@ -11460,7 +11609,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDTRoomInfo); i { + switch v := v.(*PlayerDTCoin); i { case 0: return &v.state case 1: @@ -11472,7 +11621,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRoomResults); i { + switch v := v.(*EResult); i { case 0: return &v.state case 1: @@ -11484,7 +11633,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRoomResults); i { + switch v := v.(*GWDTRoomInfo); i { case 0: return &v.state case 1: @@ -11496,7 +11645,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAddSingleAdjust); i { + switch v := v.(*WGRoomResults); i { case 0: return &v.state case 1: @@ -11508,7 +11657,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSingleAdjust); i { + switch v := v.(*GWRoomResults); i { case 0: return &v.state case 1: @@ -11520,7 +11669,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WbCtrlCfg); i { + switch v := v.(*GWAddSingleAdjust); i { case 0: return &v.state case 1: @@ -11532,7 +11681,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGBuyRecTimeItem); i { + switch v := v.(*WGSingleAdjust); i { case 0: return &v.state case 1: @@ -11544,7 +11693,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGUpdateSkin); i { + switch v := v.(*WbCtrlCfg); i { case 0: return &v.state case 1: @@ -11556,6 +11705,30 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGBuyRecTimeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGUpdateSkin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerChangeItems); i { case 0: return &v.state @@ -11574,7 +11747,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 2, - NumMessages: 120, + NumMessages: 122, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index 6ef0c23..d34b16f 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -167,32 +167,44 @@ message Item { int64 Num = 2; } +message CustomParam { + int32 RoomTypeId = 1; // 房间类型id + int32 RoomConfigId = 2; // 房间配置id + int32 CostType = 3; // 房卡场付费方式 1房主 2AA + string Password = 4; // 房间密码 + int32 Voice = 5; // 是否开启语音 1开启 2关闭 +} + +message MatchParam { + int64 MatchSortId = 1; // 比赛实例id + int32 MatchId = 2; // 比赛配置id + bool IsFinals = 3; // 是否决赛 + int32 CurrRound = 4; // 当前第几轮 + int32 CurrPlayerNum = 5; // 本轮玩家数 + int32 NextPlayerNum = 6; // 下轮最大玩家数 + int32 MatchType = 7; // 比赛类型 +} + //PACKET_WG_CREATESCENE message WGCreateScene { - int32 SceneId = 1; - int32 GameId = 2; - int32 GameMode = 3; - repeated int64 Params = 4; - int32 Creator = 5; - int32 Agentor = 6; - string ReplayCode = 7; - repeated int64 ParamsEx = 8; - int32 SceneMode = 9; - int32 HallId = 10; - string Platform = 11; - DB_GameFree DBGameFree = 12; - int32 GroupId = 13; - bool EnterAfterStart = 14; - int32 TotalOfGames = 15; - int32 Club = 16; //俱乐部Id - string ClubRoomId = 17; - int32 ClubRoomPos = 18; - int32 ClubRate = 19; - int32 BaseScore = 20; - int32 PlayerNum = 21; - bool RealCtrl = 22; - repeated int32 ChessRank = 23; - repeated Item Items = 24; // 奖励道具 + string Platform = 1; // 平台 + int32 SceneId = 2; // 房间id + int32 GameId = 3; // 游戏id + int32 GameMode = 4; // 废弃,游戏模式 + int32 SceneMode = 5; // 房间模式 + string ReplayCode = 6; // 回放码 + DB_GameFree DBGameFree = 7; // 场次配置 + int32 TotalOfGames = 8; // 总局数 + int32 PlayerNum = 9; // 最大玩家数 + bool EnterAfterStart = 10; // 是否开始后可加入 + int32 Creator = 11; // 创建者id + int32 BaseScore = 12; // 底分 + repeated Item Items = 13; // 获得道具 + repeated Item CostItems = 14; // 消耗道具 + CustomParam Custom = 15; // 房卡场参数 + MatchParam Match = 16; // 比赛场参数 + repeated int32 ChessRank = 26; // 象棋段位配置 + repeated int64 Params = 27; // 游戏参数,GameRule中定义,不要有其他用途,含义不明确 } //PACKET_WG_DESTROYSCENE diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 82b55e9..88488a4 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -98,9 +98,9 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in } // 密码是否正确 - if scene.password != "" && scene.password != msg.GetPassword() { + if scene.GetPassword() != "" && scene.GetPassword() != msg.GetPassword() { code = gamehall.OpResultCode_Game_OPRC_PasswordError - logger.Logger.Trace("CSEnterRoomHandler scene is closed") + logger.Logger.Trace("CSEnterRoomHandler password error") goto failed } @@ -153,9 +153,8 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in } skinId := int32(300001) var tm *TmMatch - if len(scene.params) > 3 { - sortId := scene.params[0] - tm = TournamentMgr.GetTm(sortId) + if scene.MatchSortId > 0 { + tm = TournamentMgr.GetTm(scene.MatchSortId) if tm != nil && tm.copyRobotGrades != nil && len(tm.copyRobotGrades) > 0 { randIndex := rand.Intn(len(tm.copyRobotGrades)) grade = tm.copyRobotGrades[randIndex].grade @@ -1260,7 +1259,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } // 游戏是否开启 - if cfg.GetOn() != common.On || gf.GetStatus() { + if cfg.GetOn() != common.On || !gf.GetStatus() { code = gamehall.OpResultCode_Game_OPRC_GameHadClosed send() return nil @@ -1287,22 +1286,24 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ csp := CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, msg.GetGameFreeId()) roomId := SceneMgrSingleton.GenOnePrivateSceneId() scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ - CreateId: p.SnId, - RoomId: roomId, - SceneMode: common.SceneMode_Private, - CycleTimes: 0, - TotalRound: int(msg.GetRound()), - Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), - GS: nil, - Platform: PlatformMgrSingleton.GetPlatform(p.Platform), - GF: csp.dbGameFree, - PlayerNum: msg.GetPlayerNum(), - Password: password, - Voice: int32(voice), - Channel: cfg.GetOnChannelName(), - RoomType: PlatformMgrSingleton.GetConfig(p.Platform).RoomType[cfg.GetRoomType()], - RoomConfig: cfg, - RoomCostType: int(msg.GetCostType()), + CreateId: p.SnId, + RoomId: roomId, + SceneMode: common.SceneMode_Private, + CycleTimes: 0, + TotalRound: int(msg.GetRound()), + Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), + GS: nil, + Platform: PlatformMgrSingleton.GetPlatform(p.Platform), + GF: csp.dbGameFree, + PlayerNum: msg.GetPlayerNum(), + Channel: cfg.GetOnChannelName(), + CustomParam: &server.CustomParam{ + RoomTypeId: cfg.GetRoomType(), + RoomConfigId: cfg.GetId(), + CostType: int32(costType), + Password: password, + Voice: int32(voice), + }, }) if scene == nil { @@ -1364,7 +1365,7 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface }) for _, v := range scenes { needPassword := 0 - if v.password != "" { + if v.GetPassword() != "" { needPassword = 1 } var players []*gamehall.PrivatePlayerInfo @@ -1378,8 +1379,8 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface d := &gamehall.PrivateRoomInfo{ GameFreeId: v.dbGameFree.GetId(), GameId: v.dbGameFree.GetGameId(), - RoomTypeId: v.RoomType.GetId(), - RoomConfigId: v.RoomConfig.GetId(), + RoomTypeId: v.GetRoomTypeId(), + RoomConfigId: v.GetRoomConfigId(), RoomId: int32(v.sceneId), NeedPassword: int32(needPassword), CurrRound: v.currRound, diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 6481acb..bf0779f 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -58,7 +58,7 @@ func init() { case scene.IsMatchScene(): if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.matchId) + p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) } else { //结算积分 if !p.IsRob { @@ -366,7 +366,7 @@ func init() { case scene.IsMatchScene(): if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.matchId) + p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) } default: scene.PlayerLeave(p, int(msg.GetReason())) @@ -538,7 +538,7 @@ func init() { if scene != nil { scene.State = msg.GetState() scene.StateSec = msg.GetSec() - scene.BankerListNum = msg.GetBankerListNum() + //scene.BankerListNum = msg.GetBankerListNum() if scene.State == scene.sp.GetBetState() { scene.StateTs = msg.GetTs() leftTime := int64(scene.StateSec) - (time.Now().Unix() - scene.StateTs) diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index 4da5495..64d889a 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -184,7 +184,7 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er audience := msg.GetTp() == 1 scenes := TournamentMgr.GetTmRoom(p.Platform, 0, p.LastChannel, audience, msg.GetId()) for _, v := range scenes { - tm := TournamentMgr.GetTm(v.matchId) + tm := TournamentMgr.GetTm(v.MatchSortId) if tm == nil { continue } diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index d7ad029..5ee4209 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -151,45 +151,55 @@ func (this *GameSession) OnStateOff() { this.Send(int(server_proto.SSPacketID_PACKET_WG_SERVER_STATE), pack) } -func (this *GameSession) AddScene(s *Scene) { - this.scenes[s.sceneId] = s +type AddSceneParam struct { + S *Scene +} + +func (this *GameSession) AddScene(args *AddSceneParam) { + this.scenes[args.S.sceneId] = args.S //send msg msg := &server_proto.WGCreateScene{ - SceneId: proto.Int(s.sceneId), - GameId: proto.Int(s.gameId), - GameMode: proto.Int(s.gameMode), - SceneMode: proto.Int(s.sceneMode), - Params: s.params, - Creator: proto.Int32(s.creator), - HallId: proto.Int32(s.hallId), - ReplayCode: proto.String(s.replayCode), - GroupId: proto.Int32(s.groupId), - TotalOfGames: proto.Int32(s.totalRound), - BaseScore: proto.Int32(s.BaseScore), - PlayerNum: proto.Int(s.playerNum), - DBGameFree: s.dbGameFree, - Platform: s.limitPlatform.IdStr, + Platform: args.S.limitPlatform.IdStr, + SceneId: int32(args.S.sceneId), + GameId: int32(args.S.gameId), + GameMode: int32(args.S.gameMode), + SceneMode: int32(args.S.sceneMode), + ReplayCode: args.S.replayCode, + DBGameFree: args.S.dbGameFree, + TotalOfGames: args.S.totalRound, + PlayerNum: int32(args.S.playerNum), + Creator: args.S.creator, + BaseScore: args.S.BaseScore, + Custom: args.S.CustomParam, + Match: args.S.MatchParam, + Params: args.S.params, } - if s.RoomConfig != nil { - for _, v := range s.RoomConfig.GetCost() { - msg.Items = append(msg.Items, &server_proto.Item{ - Id: v.GetItemId(), - Num: v.GetItemNum(), - }) + if args.S.GetRoomTypeId() != 0 { + cfg := PlatformMgrSingleton.GetConfig(args.S.limitPlatform.IdStr).RoomConfig[args.S.GetRoomTypeId()] + if cfg != nil { + for _, v := range cfg.GetReward() { + msg.Items = append(msg.Items, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } + for _, v := range cfg.GetCost() { + msg.CostItems = append(msg.CostItems, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } } } - if s.IsCoinScene() { - if sp, ok := s.sp.(*ScenePolicyData); ok { - msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) - } + if sp, ok := args.S.sp.(*ScenePolicyData); ok { + msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) } // 象棋游戏添加段位配置 - if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess { - msg.ChessRank = ChessRankMgrSington.GetChessRankArr(s.limitPlatform.Name, int32(s.gameId)) + if args.S.dbGameFree != nil && srvdata.GameFreeMgr.IsGameDif(int32(args.S.gameId), common.GameDifChess) { + msg.ChessRank = ChessRankMgrSington.GetChessRankArr(args.S.limitPlatform.Name, int32(args.S.gameId)) } - proto.SetDefaults(msg) this.Send(int(server_proto.SSPacketID_PACKET_WG_CREATESCENE), msg) - logger.Logger.Trace("WGCreateScene:", msg) + logger.Logger.Tracef("WGCreateScene: %v", msg) } func (this *GameSession) DelScene(s *Scene) { diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index c2c38cf..11b6528 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -1,6 +1,7 @@ package main import ( + "mongo.games.com/game/srvdata" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" @@ -46,18 +47,24 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen nextNeed = tm.gmd.MatchPromotion[round] } } - // 建房参数 - // 比赛唯一索引,是否决赛,第几轮,本轮总人数,下一轮总人数,赛制类型 - params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)} + rule := srvdata.PBDB_GameRuleMgr.GetData(tm.dbGameFree.GetGameRule()) scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, SceneMode: common.SceneMode_Match, - Params: params, + Params: common.CopySliceInt32ToInt64(rule.GetParams()), Platform: limitPlatform, GF: tm.dbGameFree, + MatchParam: &server.MatchParam{ + MatchId: tm.TMId, + MatchSortId: tm.SortId, + IsFinals: finals == 1, + CurrRound: round, + CurrPlayerNum: curPlayerNum, + NextPlayerNum: nextNeed, + MatchType: tm.gmd.MatchType, + }, }) if scene != nil { - scene.matchId = tm.SortId return scene } return nil @@ -153,7 +160,7 @@ func (ms *MatchSceneMgr) PlayerLeave(p *Player, reason int) bool { if p == nil || p.scene == nil { return true } - if p.scene.matchId == 0 { + if p.scene.MatchSortId == 0 { return true } p.scene.PlayerLeave(p, reason) @@ -182,7 +189,7 @@ func (ms *MatchSceneMgr) AudienceEnter(p *Player, id int32, roomId int, exclude func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) { if SceneMgrSingleton.scenes != nil && tm != nil { for _, scene := range SceneMgrSingleton.scenes { - if scene.IsMatchScene() && scene.matchId == tm.SortId { + if scene.IsMatchScene() && scene.MatchSortId == tm.SortId { scene.SendGameDestroy(false) } } diff --git a/worldsrv/scene.go b/worldsrv/scene.go index d4af7f6..de9b098 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -18,7 +18,6 @@ import ( "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" - webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) @@ -39,73 +38,51 @@ type PlayerGameCtx struct { totalConvertibleFlow int64 //进房时玩家身上的总流水 } -// MatchParams 比赛场配置 -type MatchParams struct { - MatchId int64 // 比赛场id -} - -// CustomParams 房卡场配置 -type CustomParams struct { - RoomType *webapiproto.RoomType // 房卡场房间类型id - RoomConfig *webapiproto.RoomConfig // 房卡场房间配置id - RoomCostType int // 房卡收费方式 -} - // Scene 场景(房间) // todo 结构优化 type Scene struct { - sceneId int // 场景id - gameId int // 游戏id - gameMode int // 游戏模式(玩法) - sceneMode int // 房间模式,参考common.SceneMode_XXX - params []int64 // 场景参数 - playerNum int // 房间最大人数 - robotNum int // 机器人数量 - robotLimit int // 最大限制机器人数量 - preInviteRobNum int // 准备邀请机器人的数量 - creator int32 // 创建者账号id - replayCode string // 回放码 - currRound int32 // 当前第几轮 - totalRound int32 // 总共几轮,小于等于0表示无限轮 - cycleTimes int32 // 循环次数 - deleting bool // 正在删除 - starting bool // 正在开始 - closed bool // 房间已关闭 - force bool // 强制删除 - players map[int32]*Player // 玩家 - audiences map[int32]*Player // 观众 - seats [9]*Player // 座位 - gameSess *GameSession // 所在gameserver - sp ScenePolicy // 场景上的一些业务策略 - createTime time.Time // 创建时间 - lastTime time.Time // 最后活跃时间 - startTime time.Time // 开始时间 - applyTimes map[int32]int32 // 申请坐下次数 - limitPlatform *Platform // 限制平台 - groupId int32 // 组id - hallId int32 // 厅id - dbGameFree *serverproto.DB_GameFree // 场次配置 - gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 - BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 - SceneState int32 // 房间当前状态 - State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 - StateTs int64 // 切换到当前状态的时间 - StateSec int32 // 押注状态的秒数 - password string // 密码 - channel []string // 渠道,房卡场有渠道限制 - voice int32 // 是否开启语音 1开启 - - matchId int64 // 比赛场id - fishing int32 // 渔场的鱼潮状态 - GameLog []int32 // 游戏服务器同步的录单 - BankerListNum int32 // 庄家列表数量 - matchParams []int32 // 比赛参数 - matchState int // 比赛状态 - - CustomParams // 房卡场参数 - - csp *CoinScenePool // 所在场景池 - hp *HundredSceneMgr // 百人场房间池 + sceneId int // 场景id + gameId int // 游戏id + gameMode int // 游戏模式(玩法) + sceneMode int // 房间模式,参考common.SceneMode_XXX + params []int64 // 场景参数 + playerNum int // 房间最大人数 + robotNum int // 机器人数量 + robotLimit int // 最大限制机器人数量 + preInviteRobNum int // 准备邀请机器人的数量 + creator int32 // 创建者账号id + replayCode string // 回放码 + currRound int32 // 当前第几轮 + totalRound int32 // 总共几轮,小于等于0表示无限轮 + cycleTimes int32 // 循环次数 + deleting bool // 正在删除 + starting bool // 正在开始 + closed bool // 房间已关闭 + force bool // 强制删除 + players map[int32]*Player // 玩家 + audiences map[int32]*Player // 观众 + seats [9]*Player // 座位 + gameSess *GameSession // 所在gameserver + sp ScenePolicy // 场景上的一些业务策略 + createTime time.Time // 创建时间 + lastTime time.Time // 最后活跃时间 + startTime time.Time // 开始时间 + applyTimes map[int32]int32 // 申请坐下次数 + limitPlatform *Platform // 限制平台 + groupId int32 // 组id + hallId int32 // 厅id + dbGameFree *serverproto.DB_GameFree // 场次配置 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 + SceneState int32 // 房间当前状态 + State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 + StateTs int64 // 切换到当前状态的时间 + StateSec int32 // 押注状态的秒数 + Channel []string // 客户端类型 + *serverproto.CustomParam // 房卡场参数 + *serverproto.MatchParam // 比赛场参数 + csp *CoinScenePool // 所在场景池 + hp *HundredSceneMgr // 百人场房间池 } // NewScene 创建房间 @@ -141,15 +118,10 @@ func NewScene(args *CreateSceneParam) *Scene { dbGameFree: args.GF, currRound: 0, totalRound: int32(args.TotalRound), - password: args.Password, - voice: args.Voice, - channel: args.Channel, BaseScore: args.BaseScore, - CustomParams: CustomParams{ - RoomType: args.RoomType, - RoomConfig: args.RoomConfig, - RoomCostType: args.RoomCostType, - }, + Channel: args.Channel, + CustomParam: args.CustomParam, + MatchParam: args.MatchParam, } // 最大房间人数 if s.playerNum <= 0 { @@ -165,9 +137,6 @@ func NewScene(args *CreateSceneParam) *Scene { if s.cycleTimes <= 0 { s.cycleTimes = 1 } - if s.totalRound <= 0 { - s.totalRound = 1 - } s.lastTime = s.createTime s.replayCode = SceneMgrSingleton.AllocReplayCode() @@ -837,15 +806,15 @@ func (this *Scene) GetSceneName() string { func (this *Scene) RandRobotCnt() { if this.dbGameFree != nil { - numrng := this.dbGameFree.GetRobotNumRng() - if len(numrng) >= 2 { - if numrng[1] == numrng[0] { - this.robotLimit = int(numrng[0]) + number := this.dbGameFree.GetRobotNumRng() + if len(number) >= 2 { + if number[1] == number[0] { + this.robotLimit = int(number[0]) } else { - if numrng[1] < numrng[0] { - numrng[1], numrng[0] = numrng[0], numrng[1] + if number[1] < number[0] { + number[1], number[0] = number[0], number[1] } - this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1) + this.robotLimit = int(number[1]) //int(number[0] + rand.Int31n(number[1]-number[0]) + 1) } } return @@ -973,10 +942,10 @@ func (this *Scene) TryForceDeleteMatchInfo() { if len(this.players) == 0 { return } - if this.matchId == 0 { + if this.MatchSortId == 0 { return } - if players, exist := TournamentMgr.players[this.matchId]; exist { + if players, exist := TournamentMgr.players[this.MatchSortId]; exist { for _, player := range this.players { if player != nil && !player.IsRob { if TournamentMgr.IsMatching(player.SnId) { @@ -990,8 +959,8 @@ func (this *Scene) TryForceDeleteMatchInfo() { // CanAudience 是否允许观战 func (this *Scene) CanAudience() bool { switch { - case this.matchId > 0: // 比赛场 - tm := TournamentMgr.GetTm(this.matchId) + case this.GetMatchSortId() > 0: // 比赛场 + tm := TournamentMgr.GetTm(this.GetMatchSortId()) if tm != nil { return tm.gmd.GetAudienceSwitch() == 1 } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 2453f51..e381210 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -155,7 +155,7 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { var scenes []*Scene for _, value := range m.scenes { - if value.matchId == sortId { + if value.MatchSortId == sortId { s := m.GetScene(value.sceneId) if s != nil { scenes = append(scenes, value) @@ -223,7 +223,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode isContinue := false if snId != 0 { for _, p := range s.players { - if p.SnId == int32(snId) { + if p.SnId == snId { isContinue = true break } @@ -347,7 +347,7 @@ func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { if len(args.Channel) > 0 { has := false for _, vv := range args.Channel { - if slices.Contains(v.channel, vv) { + if slices.Contains(v.Channel, vv) { has = true break } @@ -367,23 +367,20 @@ func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { } type CreateSceneParam struct { - CreateId int32 // 创建者id - RoomId int // 房间id - SceneMode int // 公共,私人,赛事 - CycleTimes int // 循环次数 - TotalRound int // 总轮数 - Params []int64 // 房间参数 - GS *GameSession - Platform *Platform - GF *serverproto.DB_GameFree - PlayerNum int32 // 玩家最大数量 - Password string - Voice int32 // 1开启 - Channel []string - RoomType *webapiproto.RoomType - RoomConfig *webapiproto.RoomConfig - BaseScore int32 - RoomCostType int + CreateId int32 // 创建者id + RoomId int // 房间id + SceneMode int // 公共,私人,赛事 + CycleTimes int // 循环次数 + TotalRound int // 总轮数 + Params []int64 // 房间参数 + GS *GameSession // 游戏服务 + Platform *Platform // 所在平台 + GF *serverproto.DB_GameFree // 场次配置 + PlayerNum int32 // 玩家最大数量 + BaseScore int32 // 底分 + Channel []string // 客户端类型,允许查看的客户端类型 + *serverproto.CustomParam // 房卡场参数 + *serverproto.MatchParam // 比赛场参数 } // CreateScene 创建房间 @@ -409,7 +406,9 @@ func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { } m.scenes[args.RoomId] = s // 添加到游戏服记录中 - args.GS.AddScene(s) + args.GS.AddScene(&AddSceneParam{ + S: s, + }) logger.Logger.Infof("SceneMgr NewScene Platform:%v %+v", args.Platform.IdStr, args) // 创建水池 @@ -443,7 +442,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { s.gameSess.DelScene(s) s.OnClose() delete(m.scenes, s.sceneId) - delete(m.password, s.password) + delete(m.password, s.GetPassword()) logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 130ab55..75f4cc6 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -117,11 +117,18 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba } func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { + if roomConfig == nil { + return false + } return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { - return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { + roomConfig := PlatformMgrSingleton.GetConfig(p.Platform).RoomConfig[s.GetRoomConfigId()] + if roomConfig == nil { + return false + } + return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p, func(items []*model.Item) { BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, @@ -130,7 +137,7 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { Remark: "竞技馆进房费用", GameId: int64(s.gameId), GameFreeId: int64(s.dbGameFree.GetId()), - RoomConfigId: s.RoomConfig.GetId(), + RoomConfigId: roomConfig.GetId(), }) }) } From ebe7b1c4c8d06934ede63baca080bca850e9e891 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 28 Aug 2024 17:00:31 +0800 Subject: [PATCH 043/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 14 +- gamesrv/clawdoll/action_clawdoll.go | 10 +- gamesrv/clawdoll/player_clawdoll.go | 15 +- gamesrv/clawdoll/scene_clawdoll.go | 28 +- gamesrv/clawdoll/scenepolicy_clawdoll.go | 95 +++++-- protocol/clawdoll/clawdoll.pb.go | 336 +++++++++++++---------- protocol/clawdoll/clawdoll.proto | 35 ++- 7 files changed, 326 insertions(+), 207 deletions(-) diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index 9bdb60f..b207785 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -12,10 +12,20 @@ const ( ClawDollSceneStateMax ) +// 玩家状态 +const ( + ClawDollPlayerStateWait int32 = iota //等待状态 + ClawDollPlayerStateStart //开始倒计时 + ClawDollPlayerStatePlayGame //游戏中 + ClawDollPlayerStateBilled //结算 + ClawDollPlayerWaitPayCoin //等待下一局投币 + ClawDollPlayerStateMax +) + const ( ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时 - ClawDollSceneStartTimeout = time.Second * 5 //开始倒计时 - ClawDollScenePlayTimeout = time.Second * 10 //娃娃机下抓倒计时 + ClawDollSceneStartTimeout = time.Second * 1 //开始倒计时 + ClawDollScenePlayTimeout = time.Second * 30 //娃娃机下抓倒计时 ClawDollSceneBilledTimeout = time.Second * 2 //结算 ClawDollSceneWaitPayCoinimeout = time.Second * 10 //等待下一局投币 diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 72a0692..1971bec 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -121,17 +121,17 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) pack := &clawdoll.SCCLAWDOLLSendToken{ Token: token, } - p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_SENDTOKEN), pack) + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) } return nil } func init() { - common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpHandler{}) - netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpPacketFactory{}) + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) //客户端请求token - common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN), &CSGetTokenHandler{}) - netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN), &CSGetTokenPacketFactory{}) + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{}) //获取token返回 netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler) } diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index ab0ff68..18d6283 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/goserver/core/logger" ) @@ -8,7 +9,8 @@ import ( type PlayerEx struct { *base.Player //玩家信息 - dollCardsCnt int32 // 娃娃卡数量 + clawDollState int32 // 抓娃娃状态 + dollCardsCnt int32 // 娃娃卡数量 gainCoin int64 // 本局赢的金币 taxCoin int64 // 本局税收 @@ -61,6 +63,7 @@ func (this *PlayerEx) ReStartGame() { this.gainCoin = 0 this.taxCoin = 0 this.odds = 0 + this.clawDollState = rule.ClawDollPlayerStateWait } // 初始化 @@ -88,3 +91,13 @@ func (this *PlayerEx) CanLeaveScene(sceneState int) bool { return true } + +// 获取状态 +func (this *PlayerEx) GetClawState() int32 { + return this.clawDollState +} + +// 设置状态 +func (this *PlayerEx) SetClawState(state int32) { + this.clawDollState = state +} diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index b3423f4..f43ee22 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -80,7 +80,7 @@ func (this *SceneEx) BroadcastPlayerLeave(p *base.Player, reason int) { } proto.SetDefaults(scLeavePack) - this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerLeave), scLeavePack, p.GetSid()) + this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerLeave), scLeavePack, p.GetSid()) } // 玩家离开事件 @@ -108,7 +108,7 @@ func (e *SceneEx) playerOpPack(snId int32, opcode int, opRetCode clawdoll.OpResu // OnPlayerSCOp 发送玩家操作情况 func (e *SceneEx) OnPlayerSCOp(p *base.Player, opcode int, opRetCode clawdoll.OpResultCode, params []int64) { pack := e.playerOpPack(p.SnId, opcode, opRetCode, params) - p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PLAYEROP), pack) + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYEROP), pack) logger.Logger.Tracef("OnPlayerSCOp %s", pack) } @@ -142,7 +142,8 @@ func (this *SceneEx) ClawdollCreateRoomInfoPacket(s *base.Scene, p *base.Player) HeadOutLine: proto.Int32(playerEx.HeadOutLine), VIP: proto.Int32(playerEx.VIP), - WinCoin: proto.Int64(playerEx.gainCoin), + WinCoin: proto.Int64(playerEx.gainCoin), + ClawDollState: proto.Int32(playerEx.clawDollState), } pack.Players = append(pack.Players, pd) @@ -233,7 +234,7 @@ func (this *SceneEx) IsHasPlaying() bool { } // 等待下一个玩家 -func (this *SceneEx) WaitNextPlayer() { +func (this *SceneEx) ReStartGame() { this.playingSnid = 0 } @@ -293,6 +294,25 @@ func (this *SceneEx) RemoveWaitPlayer(SnId int32) bool { return false } +func (this *SceneEx) GetPlayingEx() *PlayerEx { + if this.playingSnid == 0 { + return nil + } + + return this.players[this.playingSnid] +} + +func (this *SceneEx) SetPlayingState(state int32) { + if this.playingSnid == 0 { + return + } + + playerEx := this.players[this.playingSnid] + if playerEx != nil { + playerEx.SetClawState(state) + } +} + // 时间到 系统开始下抓 func (this *SceneEx) TimeOutPlayGrab() bool { diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 419b8ce..ec08dd2 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -109,10 +109,9 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { p.MarkFlag(base.PlayerState_WaitNext) p.UnmarkFlag(base.PlayerState_Ready) - sceneEx.AddWaitPlayer(playerEx) - //给自己发送房间信息 this.SendRoomInfo(s, p, sceneEx) + s.FirePlayerEvent(p, base.PlayerEventEnter, nil) } } @@ -249,7 +248,7 @@ func (this *PolicyClawdoll) CanChangeCoinScene(s *base.Scene, p *base.Player) bo func (this *PolicyClawdoll) SendRoomInfo(s *base.Scene, p *base.Player, sceneEx *SceneEx) { pack := sceneEx.ClawdollCreateRoomInfoPacket(s, p) - p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMINFO), pack) + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_ROOMINFO), pack) } // 广播房间状态 @@ -258,7 +257,25 @@ func ClawdollBroadcastRoomState(s *base.Scene, params ...float32) { State: proto.Int(s.SceneState.GetState()), Params: params, } - s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMSTATE), pack, 0) + s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_ROOMSTATE), pack, 0) +} + +// 玩家状态信息变化 +func ClawdollSendPlayerInfo(s *base.Scene) { + + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + playerEx := sceneEx.GetPlayingEx() + if playerEx != nil && playerEx.SnId == sceneEx.playingSnid { + pack := &clawdoll.SCCLAWDOLLPlayerInfo{ + SnId: proto.Int32(playerEx.SnId), + ClawDollState: proto.Int32(playerEx.GetClawState()), + Coin: proto.Int64(playerEx.Coin), + GainCoin: proto.Int64(playerEx.gainCoin), + } + + playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYERINFO), pack) + } + } } //===================================== @@ -343,7 +360,8 @@ func (this *StateWait) OnEnter(s *base.Scene) { } s.Gaming = false - ClawdollBroadcastRoomState(s, float32(0)) + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) } } @@ -401,8 +419,14 @@ func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, par sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin) if sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStateStart) sceneEx.playingSnid = playerEx.SnId + s.ChangeSceneState(rule.ClawDollSceneStateStart) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + + sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) } } @@ -435,6 +459,8 @@ func (this *StateStart) OnEnter(s *base.Scene) { this.BaseState.OnEnter(s) if sceneEx, ok := s.ExtraData.(*SceneEx); ok { ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + s.Gaming = false sceneEx.GameNowTime = time.Now() sceneEx.NumOfGames++ @@ -446,11 +472,11 @@ func (this *StateStart) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*SceneEx); ok { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneStartTimeout { //切换到等待操作状态 - if sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStatePlayGame) - } else { - s.ChangeSceneState(rule.ClawDollSceneStateWait) - } + s.ChangeSceneState(rule.ClawDollSceneStatePlayGame) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStatePlayGame)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) } } } @@ -462,12 +488,8 @@ func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, pa func (this *StateStart) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) { logger.Logger.Trace("(this *StateStart) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " evtcode=", evtcode) this.BaseState.OnPlayerEvent(s, p, evtcode, params) - if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if _, ok := s.ExtraData.(*SceneEx); ok { switch evtcode { - case base.PlayerEventLeave: - if !sceneEx.CanStart() { - s.ChangeSceneState(rule.ClawDollSceneStateWait) - } case base.PlayerEventEnter: if !p.IsReady() { p.MarkFlag(base.PlayerState_Ready) @@ -503,7 +525,8 @@ func (this *PlayGame) OnEnter(s *base.Scene) { s.Gaming = true - ClawdollBroadcastRoomState(s, float32(0), float32(0)) + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) } @@ -541,6 +564,10 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -572,6 +599,11 @@ func (this *PlayGame) OnTick(s *base.Scene) { } s.ChangeSceneState(rule.ClawDollSceneStateBilled) + + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) return } } @@ -625,7 +657,10 @@ func (this *StateBilled) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneBilledTimeout { s.ChangeSceneState(rule.ClawDollSceneWaitPayCoin) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneWaitPayCoin)) + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) return } } @@ -688,7 +723,12 @@ func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode i playerEx.ReStartGame() s.ChangeSceneState(rule.ClawDollSceneStateStart) - //sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + + sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) } return false } @@ -701,14 +741,6 @@ func (this *StateWaitPayCoin) OnEnter(s *base.Scene) { func (this *StateWaitPayCoin) OnLeave(s *base.Scene) { logger.Logger.Trace("(this *StateWaitPayCoin) OnLeave, sceneid=", s.GetSceneId()) this.BaseState.OnLeave(s) - if sceneEx, ok := s.ExtraData.(*SceneEx); ok { - - sceneEx.PlayerBackup = make(map[int32]*PlayerData) - - if s.CheckNeedDestroy() { - sceneEx.SceneDestroy(true) - } - } } func (this *StateWaitPayCoin) OnTick(s *base.Scene) { @@ -717,15 +749,20 @@ func (this *StateWaitPayCoin) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitPayCoinimeout { // 先设置时间 - playingEx := sceneEx.players[sceneEx.playingSnid] + playingEx := sceneEx.GetPlayingEx() if playingEx != nil { playingEx.ReStartGame() + ClawdollSendPlayerInfo(s) } - // 后重置scene数据 - sceneEx.WaitNextPlayer() + // 再重置scene数据 + sceneEx.ReStartGame() s.ChangeSceneState(rule.ClawDollSceneStateWait) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateWait)) + + ClawdollBroadcastRoomState(s) + return } } diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 30f9f00..cc583f3 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -24,46 +24,52 @@ const ( type CLAWDOLLPacketID int32 const ( - CLAWDOLLPacketID_PACKET_CLAWDOLL_ZERO CLAWDOLLPacketID = 0 //弃用消息号 - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMINFO CLAWDOLLPacketID = 5601 //房间信息 - CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP CLAWDOLLPacketID = 5602 //玩家操作(客户->服务) - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PLAYEROP CLAWDOLLPacketID = 5603 //玩家操作(服务->客户) - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMSTATE CLAWDOLLPacketID = 5604 //房间状态 - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_GAMEBILLED CLAWDOLLPacketID = 5605 //游戏结算 - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerEnter CLAWDOLLPacketID = 5606 // 玩家进入 - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerLeave CLAWDOLLPacketID = 5607 // 玩家离开 - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PLAYERINFO CLAWDOLLPacketID = 5608 // 玩家状态信息变化 - CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_GETTOKEN CLAWDOLLPacketID = 5609 // 获取token - CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_SENDTOKEN CLAWDOLLPacketID = 5610 // 获取token + CLAWDOLLPacketID_PACKET_ZERO CLAWDOLLPacketID = 0 //弃用消息号 + CLAWDOLLPacketID_PACKET_SC_ROOMINFO CLAWDOLLPacketID = 5601 //房间信息 + CLAWDOLLPacketID_PACKET_CS_PLAYEROP CLAWDOLLPacketID = 5602 //玩家操作(客户->服务) + CLAWDOLLPacketID_PACKET_SC_PLAYEROP CLAWDOLLPacketID = 5603 //玩家操作(服务->客户) + CLAWDOLLPacketID_PACKET_SC_ROOMSTATE CLAWDOLLPacketID = 5604 //房间状态 + CLAWDOLLPacketID_PACKET_SC_GAMEBILLED CLAWDOLLPacketID = 5605 //游戏结算 + CLAWDOLLPacketID_PACKET_SC_PlayerEnter CLAWDOLLPacketID = 5606 // 玩家进入 + CLAWDOLLPacketID_PACKET_SC_PlayerLeave CLAWDOLLPacketID = 5607 // 玩家离开 + CLAWDOLLPacketID_PACKET_SC_PLAYERINFO CLAWDOLLPacketID = 5608 // 玩家状态信息变化 + CLAWDOLLPacketID_PACKET_CS_GETTOKEN CLAWDOLLPacketID = 5609 // 获取token + CLAWDOLLPacketID_PACKET_SC_SENDTOKEN CLAWDOLLPacketID = 5610 // 获取token + CLAWDOLLPacketID_PACKET_CS_WAITPLAYERS CLAWDOLLPacketID = 5611 // 获取等待玩家信息 (客户->服务) + CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS CLAWDOLLPacketID = 5612 // 获取等待玩家信息 (服务->客户) ) // Enum value maps for CLAWDOLLPacketID. var ( CLAWDOLLPacketID_name = map[int32]string{ - 0: "PACKET_CLAWDOLL_ZERO", - 5601: "PACKET_SC_CLAWDOLL_ROOMINFO", - 5602: "PACKET_CS_CLAWDOLL_PLAYEROP", - 5603: "PACKET_SC_CLAWDOLL_PLAYEROP", - 5604: "PACKET_SC_CLAWDOLL_ROOMSTATE", - 5605: "PACKET_SC_CLAWDOLL_GAMEBILLED", - 5606: "PACKET_SC_CLAWDOLL_PlayerEnter", - 5607: "PACKET_SC_CLAWDOLL_PlayerLeave", - 5608: "PACKET_SC_CLAWDOLL_PLAYERINFO", - 5609: "PACKET_CS_CLAWDOLL_GETTOKEN", - 5610: "PACKET_SC_CLAWDOLL_SENDTOKEN", + 0: "PACKET_ZERO", + 5601: "PACKET_SC_ROOMINFO", + 5602: "PACKET_CS_PLAYEROP", + 5603: "PACKET_SC_PLAYEROP", + 5604: "PACKET_SC_ROOMSTATE", + 5605: "PACKET_SC_GAMEBILLED", + 5606: "PACKET_SC_PlayerEnter", + 5607: "PACKET_SC_PlayerLeave", + 5608: "PACKET_SC_PLAYERINFO", + 5609: "PACKET_CS_GETTOKEN", + 5610: "PACKET_SC_SENDTOKEN", + 5611: "PACKET_CS_WAITPLAYERS", + 5612: "PACKET_SC_WAITPLAYERS", } CLAWDOLLPacketID_value = map[string]int32{ - "PACKET_CLAWDOLL_ZERO": 0, - "PACKET_SC_CLAWDOLL_ROOMINFO": 5601, - "PACKET_CS_CLAWDOLL_PLAYEROP": 5602, - "PACKET_SC_CLAWDOLL_PLAYEROP": 5603, - "PACKET_SC_CLAWDOLL_ROOMSTATE": 5604, - "PACKET_SC_CLAWDOLL_GAMEBILLED": 5605, - "PACKET_SC_CLAWDOLL_PlayerEnter": 5606, - "PACKET_SC_CLAWDOLL_PlayerLeave": 5607, - "PACKET_SC_CLAWDOLL_PLAYERINFO": 5608, - "PACKET_CS_CLAWDOLL_GETTOKEN": 5609, - "PACKET_SC_CLAWDOLL_SENDTOKEN": 5610, + "PACKET_ZERO": 0, + "PACKET_SC_ROOMINFO": 5601, + "PACKET_CS_PLAYEROP": 5602, + "PACKET_SC_PLAYEROP": 5603, + "PACKET_SC_ROOMSTATE": 5604, + "PACKET_SC_GAMEBILLED": 5605, + "PACKET_SC_PlayerEnter": 5606, + "PACKET_SC_PlayerLeave": 5607, + "PACKET_SC_PLAYERINFO": 5608, + "PACKET_CS_GETTOKEN": 5609, + "PACKET_SC_SENDTOKEN": 5610, + "PACKET_CS_WAITPLAYERS": 5611, + "PACKET_SC_WAITPLAYERS": 5612, } ) @@ -152,15 +158,16 @@ type CLAWDOLLPlayerData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` //名字 - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //账号 - Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` //头像 - Sex int32 `protobuf:"varint,4,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 - Coin int64 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` //金币 - HeadOutLine int32 `protobuf:"varint,6,opt,name=HeadOutLine,proto3" json:"HeadOutLine,omitempty"` //头像框 - VIP int32 `protobuf:"varint,7,opt,name=VIP,proto3" json:"VIP,omitempty"` - Flag int32 `protobuf:"varint,8,opt,name=Flag,proto3" json:"Flag,omitempty"` //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备) - WinCoin int64 `protobuf:"varint,9,opt,name=WinCoin,proto3" json:"WinCoin,omitempty"` // 本局赢分 + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` //名字 + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //账号 + Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` //头像 + Sex int32 `protobuf:"varint,4,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 + Coin int64 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` //金币 + HeadOutLine int32 `protobuf:"varint,6,opt,name=HeadOutLine,proto3" json:"HeadOutLine,omitempty"` //头像框 + VIP int32 `protobuf:"varint,7,opt,name=VIP,proto3" json:"VIP,omitempty"` + Flag int32 `protobuf:"varint,8,opt,name=Flag,proto3" json:"Flag,omitempty"` //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备) + WinCoin int64 `protobuf:"varint,9,opt,name=WinCoin,proto3" json:"WinCoin,omitempty"` // 本局赢分 + ClawDollState int32 `protobuf:"varint,10,opt,name=clawDollState,proto3" json:"clawDollState,omitempty"` // 玩家状态 } func (x *CLAWDOLLPlayerData) Reset() { @@ -258,6 +265,13 @@ func (x *CLAWDOLLPlayerData) GetWinCoin() int64 { return 0 } +func (x *CLAWDOLLPlayerData) GetClawDollState() int32 { + if x != nil { + return x.ClawDollState + } + return 0 +} + //房间信息 type SCCLAWDOLLRoomInfo struct { state protoimpl.MessageState @@ -656,9 +670,11 @@ type SCCLAWDOLLPlayerInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` //玩家ID - GainCoin int64 `protobuf:"varint,2,opt,name=gainCoin,proto3" json:"gainCoin,omitempty"` //本局赢取 - Coin int64 `protobuf:"varint,3,opt,name=Coin,proto3" json:"Coin,omitempty"` // 玩家 + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + ClawDollState int32 `protobuf:"varint,2,opt,name=clawDollState,proto3" json:"clawDollState,omitempty"` // 玩家状态 + GainCoin int64 `protobuf:"varint,3,opt,name=gainCoin,proto3" json:"gainCoin,omitempty"` // 本局赢取 + Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` // 玩家 + Params []int64 `protobuf:"varint,5,rep,packed,name=Params,proto3" json:"Params,omitempty"` //操作参数 } func (x *SCCLAWDOLLPlayerInfo) Reset() { @@ -700,6 +716,13 @@ func (x *SCCLAWDOLLPlayerInfo) GetSnId() int32 { return 0 } +func (x *SCCLAWDOLLPlayerInfo) GetClawDollState() int32 { + if x != nil { + return x.ClawDollState + } + return 0 +} + func (x *SCCLAWDOLLPlayerInfo) GetGainCoin() int64 { if x != nil { return x.GainCoin @@ -714,6 +737,13 @@ func (x *SCCLAWDOLLPlayerInfo) GetCoin() int64 { return 0 } +func (x *SCCLAWDOLLPlayerInfo) GetParams() []int64 { + if x != nil { + return x.Params + } + return nil +} + //玩家进入 //PACKET_SCCLAWDOLLPlayerEnter type SCCLAWDOLLPlayerEnter struct { @@ -919,7 +949,7 @@ var File_clawdoll_proto protoreflect.FileDescriptor var file_clawdoll_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x22, 0xd8, 0x01, 0x0a, 0x12, 0x43, + 0x12, 0x08, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x22, 0xfe, 0x01, 0x0a, 0x12, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, @@ -933,111 +963,115 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x28, 0x05, 0x52, 0x03, 0x56, 0x49, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xf6, 0x02, 0x0a, 0x12, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, - 0x12, 0x36, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x6f, 0x75, - 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3e, - 0x0a, 0x0c, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x4f, 0x70, 0x12, 0x16, - 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x88, - 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x4f, 0x70, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, - 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x19, 0x53, 0x43, - 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x22, 0x43, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, - 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x02, 0x52, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x5a, 0x0a, 0x14, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x49, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6c, 0x61, 0x77, - 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, - 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, - 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, - 0x70, 0x70, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, - 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x8c, 0x03, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, - 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x5a, 0x45, - 0x52, 0x4f, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x22, 0x0a, - 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, - 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, - 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x22, 0x0a, 0x1d, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, - 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, - 0x4e, 0x10, 0xea, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, - 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, - 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, - 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, - 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x77, 0x44, 0x6f, 0x6c, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x6c, + 0x61, 0x77, 0x44, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xf6, 0x02, 0x0a, 0x12, + 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, + 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, + 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x0a, 0x0c, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x4f, 0x70, 0x52, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, + 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, + 0x85, 0x01, 0x0a, 0x19, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x77, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x6c, 0x6f, + 0x77, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x43, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, + 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x02, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x98, 0x01, 0x0a, + 0x14, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x61, + 0x77, 0x44, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x63, 0x6c, 0x61, 0x77, 0x44, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x49, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, + 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x30, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, + 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2b, 0x0a, + 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xe1, 0x02, 0x0a, 0x10, 0x43, + 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, + 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, + 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, + 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, + 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, + 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x2a, 0x64, + 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, + 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, + 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, + 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, + 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, + 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, + 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index a2d08c4..527b635 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -4,17 +4,19 @@ option go_package = "mongo.games.com/game/protocol/clawdoll"; //娃娃机 enum CLAWDOLLPacketID { - PACKET_CLAWDOLL_ZERO = 0; //弃用消息号 - PACKET_SC_CLAWDOLL_ROOMINFO = 5601; //房间信息 - PACKET_CS_CLAWDOLL_PLAYEROP = 5602; //玩家操作(客户->服务) - PACKET_SC_CLAWDOLL_PLAYEROP = 5603; //玩家操作(服务->客户) - PACKET_SC_CLAWDOLL_ROOMSTATE = 5604; //房间状态 - PACKET_SC_CLAWDOLL_GAMEBILLED = 5605; //游戏结算 - PACKET_SC_CLAWDOLL_PlayerEnter = 5606; // 玩家进入 - PACKET_SC_CLAWDOLL_PlayerLeave = 5607; // 玩家离开 - PACKET_SC_CLAWDOLL_PLAYERINFO = 5608; // 玩家状态信息变化 - PACKET_CS_CLAWDOLL_GETTOKEN = 5609; // 获取token - PACKET_SC_CLAWDOLL_SENDTOKEN = 5610; // 获取token + PACKET_ZERO = 0; //弃用消息号 + PACKET_SC_ROOMINFO = 5601; //房间信息 + PACKET_CS_PLAYEROP = 5602; //玩家操作(客户->服务) + PACKET_SC_PLAYEROP = 5603; //玩家操作(服务->客户) + PACKET_SC_ROOMSTATE = 5604; //房间状态 + PACKET_SC_GAMEBILLED = 5605; //游戏结算 + PACKET_SC_PlayerEnter = 5606; // 玩家进入 + PACKET_SC_PlayerLeave = 5607; // 玩家离开 + PACKET_SC_PLAYERINFO = 5608; // 玩家状态信息变化 + PACKET_CS_GETTOKEN = 5609; // 获取token + PACKET_SC_SENDTOKEN = 5610; // 获取token + PACKET_CS_WAITPLAYERS = 5611; // 获取等待玩家信息 (客户->服务) + PACKET_SC_WAITPLAYERS = 5612; // 获取等待玩家信息 (服务->客户) } //操作结果 @@ -36,7 +38,7 @@ message CLAWDOLLPlayerData { int32 Flag = 8; //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备) int64 WinCoin = 9; // 本局赢分 - + int32 clawDollState = 10; // 玩家状态 } //房间信息 @@ -88,9 +90,12 @@ message SCCLAWDOLLRoomState { //玩家信息 message SCCLAWDOLLPlayerInfo { - int32 SnId = 1; //玩家ID - int64 gainCoin = 2; //本局赢取 - int64 Coin = 3; // 玩家 + int32 SnId = 1; // 玩家ID + int32 clawDollState = 2; // 玩家状态 + int64 gainCoin = 3; // 本局赢取 + int64 Coin = 4; // 玩家 + + repeated int64 Params = 5; //操作参数 } From 9ea57766a41fe594c5c0d0b5c5d898b17e085073 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 18:18:36 +0800 Subject: [PATCH 044/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E5=AF=B9?= =?UTF-8?q?=E5=B1=80=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/mq/c_customlog.go | 36 +++++++++++++ dbproxy/svc/l_customlog.go | 25 +++++++++ dbproxy/svc/l_gamedetailed.go | 2 + dbproxy/svc/l_gameplayerlistlog.go | 2 + gamesrv/base/logchannel.go | 1 + gamesrv/base/scene.go | 8 +-- gamesrv/tienlen/scenedata_tienlen.go | 74 ++++++++++++++++++++++++-- gamesrv/tienlen/scenepolicy_tienlen.go | 12 +++-- model/customlog.go | 40 ++++++++++++++ model/gamedetailedlog.go | 4 +- model/gameplayerlistlog.go | 9 ++-- mq/keyconf.go | 1 + worldsrv/scenemgr.go | 11 +++- worldsrv/trascate_webapi.go | 3 +- 14 files changed, 209 insertions(+), 19 deletions(-) create mode 100644 dbproxy/mq/c_customlog.go create mode 100644 dbproxy/svc/l_customlog.go create mode 100644 model/customlog.go diff --git a/dbproxy/mq/c_customlog.go b/dbproxy/mq/c_customlog.go new file mode 100644 index 0000000..4ed99c3 --- /dev/null +++ b/dbproxy/mq/c_customlog.go @@ -0,0 +1,36 @@ +package mq + +import ( + "encoding/json" + + "mongo.games.com/goserver/core/broker" + "mongo.games.com/goserver/core/broker/rabbitmq" + + "mongo.games.com/game/dbproxy/svc" + "mongo.games.com/game/model" + "mongo.games.com/game/mq" +) + +func init() { + mq.RegisterSubscriber(mq.DBCustomLog, func(e broker.Event) (err error) { + msg := e.Message() + if msg != nil { + defer func() { + e.Ack() + }() + + var log model.CustomLog + err = json.Unmarshal(msg.Body, &log) + if err != nil { + return + } + + c := svc.DbCustomLogCollection(log.Platform) + if c != nil { + err = c.Insert(log) + } + return + } + return nil + }, broker.Queue(mq.DBCustomLog), broker.DisableAutoAck(), rabbitmq.DurableQueue()) +} diff --git a/dbproxy/svc/l_customlog.go b/dbproxy/svc/l_customlog.go new file mode 100644 index 0000000..d203cf2 --- /dev/null +++ b/dbproxy/svc/l_customlog.go @@ -0,0 +1,25 @@ +package svc + +import ( + "github.com/globalsign/mgo" + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +func DbCustomLogCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, model.DbCustomLogDBName) + if s != nil { + d, first := s.DB().C(model.DbCustomLogCollName) + if first { + d.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"-startts", "cycleid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"roomconfigid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"roomid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"startts"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"endts"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"-endts"}, Background: true, Sparse: true}) + } + return d + } + return nil +} diff --git a/dbproxy/svc/l_gamedetailed.go b/dbproxy/svc/l_gamedetailed.go index 7ed14c7..2d459f8 100644 --- a/dbproxy/svc/l_gamedetailed.go +++ b/dbproxy/svc/l_gamedetailed.go @@ -28,6 +28,8 @@ func GameDetailedLogsCollection(plt string) *mongo.Collection { c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"matchid"}, Background: true, Sparse: true}) c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "gameid"}, Background: true, Sparse: true}) c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "gamefreeid"}, Background: true, Sparse: true}) + c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "cycleid"}, Background: true, Sparse: true}) + c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) } return c_gamedetailed } diff --git a/dbproxy/svc/l_gameplayerlistlog.go b/dbproxy/svc/l_gameplayerlistlog.go index e897ad8..fcb8d74 100644 --- a/dbproxy/svc/l_gameplayerlistlog.go +++ b/dbproxy/svc/l_gameplayerlistlog.go @@ -41,6 +41,8 @@ func GamePlayerListLogsCollection(plt string) *mongo.Collection { c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "gamefreeid"}, Background: true, Sparse: true}) c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "snid", "gameid"}, Background: true, Sparse: true}) c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "snid", "gamefreeid"}, Background: true, Sparse: true}) + c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "cycleid"}, Background: true, Sparse: true}) + c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) } return c_gameplayerlistlog } diff --git a/gamesrv/base/logchannel.go b/gamesrv/base/logchannel.go index b62cd45..4f77a44 100644 --- a/gamesrv/base/logchannel.go +++ b/gamesrv/base/logchannel.go @@ -54,4 +54,5 @@ func init() { LogChannelSingleton.RegisterLogCName(model.GamePlayerListLogCollName, &model.GamePlayerListLog{}) LogChannelSingleton.RegisterLogCName(model.FriendRecordLogCollName, &model.FriendRecord{}) LogChannelSingleton.RegisterLogCName(model.ItemLogCollName, &model.ItemLog{}) + LogChannelSingleton.RegisterLogCName(mq.DBCustomLog, &model.CustomLog{}) } diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 2d7ec35..4ac97eb 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -1441,6 +1441,7 @@ type GameDetailedParam struct { Trend20Lately string //最近20局开奖结果 CtrlType int PlayerPool map[int]int + CycleId string } // 保存详细游戏日志 @@ -1461,7 +1462,7 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, - gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool, gameDetailedParam.CycleId) if log != nil { if this.IsMatchScene() { log.MatchId = this.GetMatch().GetMatchSortId() @@ -1478,7 +1479,7 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, - gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool, gameDetailedParam.CycleId) if log != nil { if this.IsMatchScene() { log.MatchId = this.GetMatch().GetMatchSortId() @@ -1516,6 +1517,7 @@ type SaveGamePlayerListLogParam struct { WinSmallGame int64 //拉霸专用 小游戏奖励 WinTotal int64 //拉霸专用 本局输赢 PlayerName string //玩家名字 + CycleId string // 房卡场对局id } func GetSaveGamePlayerListLogParam(platform, channel, promoter, packageTag, logid string, @@ -1594,7 +1596,7 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo this.GameId, baseScore, this.SceneId, int32(this.GetGameMode()), this.GetGameFreeId(), param.TotalIn, param.TotalOut, this.ClubId, this.RoomId, param.TaxCoin, param.ClubPumpCoin, roomType, param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.GetDBGameFree().GetGameClass(), - param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal) + param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal, param.CycleId) if log != nil { LogChannelSingleton.WriteLog(log) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 6b8c890..f5c8548 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -27,6 +27,11 @@ type BilledInfo struct { Score int64 // 结算后积分 } +type Item struct { + Id int32 + Num int64 +} + // 房间上的额外数据 type TienLenSceneData struct { *base.Scene //场景 @@ -65,14 +70,17 @@ type TienLenSceneData struct { BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 RoundEndTime []int64 // 每局结束时间 RoundLogId []string // 每局牌局记录id + CustomLogSave bool // 是否已经保存日志 + PlayerAward map[int32]*[]*model.Item // 房卡场最终奖励 } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { sceneEx := &TienLenSceneData{ - Scene: s, - poker: rule.NewPoker(), - players: make(map[int32]*TienLenPlayerData), - BilledList: map[int32]*[]*BilledInfo{}, + Scene: s, + poker: rule.NewPoker(), + players: make(map[int32]*TienLenPlayerData), + BilledList: map[int32]*[]*BilledInfo{}, + PlayerAward: make(map[int32]*[]*model.Item), } sceneEx.Clear() return sceneEx @@ -282,6 +290,7 @@ func (this *TienLenSceneData) OnPlayerLeave(p *base.Player, reason int) { } func (this *TienLenSceneData) SceneDestroy(force bool) { + this.SaveCustomLog() //销毁房间 this.Scene.Destroy(force) } @@ -2093,3 +2102,60 @@ func (this *TienLenSceneData) SendFirstGiveTimeItem(p *base.Player) { p.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenFirstGiveItemItem), pack) } } + +// SaveCustomLog 保存竞技馆对局记录 +func (this *TienLenSceneData) SaveCustomLog() { + if this.CustomLogSave || !this.IsCustom() { + return + } + this.CustomLogSave = true + state := int32(0) + if len(this.RoundEndTime) < int(this.TotalOfGames) { + state = 1 + } + log := &model.CustomLog{ + CycleId: this.CycleID, + RoomConfigId: this.GetCustom().GetRoomConfigId(), + RoomId: this.SceneId, + StartTs: this.GameStartTime.Unix(), + EndTs: time.Now().Unix(), + State: state, + GameFreeId: this.GetGameFreeId(), + TotalRound: this.TotalOfGames, + Password: this.GetCustom().GetPassword(), + CostType: this.GetCustom().GetCostType(), + Voice: this.GetCustom().GetVoice(), + } + for snid := range this.BilledList { + var items []*model.Item + if this.PlayerAward[snid] != nil { + items = *this.PlayerAward[snid] + } + log.SnId = append(log.SnId, model.PlayerInfo{ + SnId: snid, + Awards: items, + }) + } + + sort.Slice(log.SnId, func(i, j int) bool { + p1 := base.PlayerMgrSington.GetPlayerBySnId(log.SnId[i].SnId) + p2 := base.PlayerMgrSington.GetPlayerBySnId(log.SnId[j].SnId) + return p1.GetCoin() > p2.GetCoin() + }) + + for k, v := range this.RoundEndTime { + score := make([]int64, len(this.BilledList)) + for kk, vv := range log.SnId { + if k < len(*this.BilledList[vv.SnId]) { + score[kk] = (*this.BilledList[vv.SnId])[k].ChangeScore + } + } + log.List = append(log.List, model.RoundInfo{ + Round: int32(k + 1), + Ts: v, + Score: score, + LogId: this.RoundLogId[k], + }) + } + base.LogChannelSingleton.WriteLog(log) +} diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 5b8ce7b..1117595 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2617,11 +2617,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { GameId: int64(sceneEx.GameId), GameFreeId: int64(sceneEx.GetGameFreeId()), }) + sceneEx.PlayerAward[p.SnId] = &items } } } s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) s.SyncSceneState(common.SceneStateEnd) + sceneEx.SaveCustomLog() } } @@ -2673,10 +2675,11 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { }) // 保存玩家游戏记录 - sceneEx.SaveGamePlayerListLog(o_player.UserId, - base.GetSaveGamePlayerListLogParam(o_player.Platform, o_player.Channel, o_player.Promoter, - o_player.PackageTag, sceneEx.recordId, o_player.InviterId, totalin, totalout, o_player.BillTaxCoin, - 0, 0, o_player.GainCoin+o_player.BombCoin, validBet, validFlow, o_player.IsFirst, o_player.IsLeave)) + param := base.GetSaveGamePlayerListLogParam(o_player.Platform, o_player.Channel, o_player.Promoter, + o_player.PackageTag, sceneEx.recordId, o_player.InviterId, totalin, totalout, o_player.BillTaxCoin, + 0, 0, o_player.GainCoin+o_player.BombCoin, validBet, validFlow, o_player.IsFirst, o_player.IsLeave) + param.CycleId = sceneEx.CycleID + sceneEx.SaveGamePlayerListLog(o_player.UserId, param) } } if isSave { @@ -2685,6 +2688,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { Trend20Lately: "", CtrlType: sceneEx.ctrlType, PlayerPool: tienlenType.PlayerPool, + CycleId: sceneEx.CycleID, }) } } diff --git a/model/customlog.go b/model/customlog.go new file mode 100644 index 0000000..08e6a27 --- /dev/null +++ b/model/customlog.go @@ -0,0 +1,40 @@ +package model + +import ( + "github.com/globalsign/mgo/bson" +) + +var ( + DbCustomLogDBName = "log" + DbCustomLogCollName = "log_custom" +) + +type PlayerInfo struct { + SnId int32 // 玩家id + Awards []*Item // 奖品 +} + +type RoundInfo struct { + Round int32 // 第几局 + Ts int64 // 结算时间 + Score []int64 // 分数 + LogId string // 牌局记录id +} + +type CustomLog struct { + Id bson.ObjectId `bson:"_id"` + Platform string `bson:"-"` + CycleId string // 本轮id,多局游戏属于同一轮 + RoomConfigId int32 // 房间配置id + GameFreeId int32 // 场次id + TotalRound int32 // 总局数 + PlayerNum int32 // 最大人数 + Password string // 密码 + CostType int32 // 付费方式 1房主 2AA + Voice int32 // 是否开启语音 1开启 + RoomId int32 // 房间id + SnId []PlayerInfo // 所有玩家 + List []RoundInfo // 对局记录 + StartTs, EndTs int64 // 开始,结束时间 + State int32 // 0正常结束 1后台中途解散 +} diff --git a/model/gamedetailedlog.go b/model/gamedetailedlog.go index 6ab0260..d822146 100644 --- a/model/gamedetailedlog.go +++ b/model/gamedetailedlog.go @@ -66,7 +66,8 @@ func NewGameDetailedLog() *GameDetailedLog { } func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, playercount, gametiming, gamebasebet int32, - gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, trend20Lately string, ctrlType int, playerPool map[int]int) *GameDetailedLog { + gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, + trend20Lately string, ctrlType int, playerPool map[int]int, cycleId string) *GameDetailedLog { cl := NewGameDetailedLog() cl.LogId = logid cl.GameId = gameid @@ -88,6 +89,7 @@ func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, p cl.Ts = time.Now().Unix() cl.CtrlType = ctrlType cl.PlayerPool = playerPool + cl.CycleId = cycleId return cl } diff --git a/model/gameplayerlistlog.go b/model/gameplayerlistlog.go index baa5201..4bbd768 100644 --- a/model/gameplayerlistlog.go +++ b/model/gameplayerlistlog.go @@ -52,9 +52,10 @@ type GamePlayerListLog struct { MatchId int64 MatchType int64 //0.普通场 1.锦标赛 2.冠军赛 3.vip专属 Ts int32 - IsFree bool //拉霸专用 是否免费 - WinSmallGame int64 //拉霸专用 小游戏奖励 - WinTotal int64 //拉霸专用 输赢 + IsFree bool //拉霸专用 是否免费 + WinSmallGame int64 //拉霸专用 小游戏奖励 + WinTotal int64 //拉霸专用 输赢 + CycleId string // 本轮id,打一轮有多局 } func NewGamePlayerListLog() *GamePlayerListLog { @@ -64,7 +65,7 @@ func NewGamePlayerListLog() *GamePlayerListLog { func NewGamePlayerListLogEx(snid int32, gamedetailedlogid string, platform, channel, promoter, packageTag string, gameid, baseScore, sceneid, gamemode, gamefreeid int32, totalin, totalout int64, clubId int32, clubRoom string, taxCoin, pumpCoin int64, roomType int32, betAmount, winAmountNoAnyTax int64, key, name string, gameClass int32, isFirst bool, matchid, matchType int64, - isFree bool, winSmallGame, winTotal int64) *GamePlayerListLog { + isFree bool, winSmallGame, winTotal int64, cycleId string) *GamePlayerListLog { cl := NewGamePlayerListLog() cl.SnId = snid cl.GameDetailedLogId = gamedetailedlogid diff --git a/mq/keyconf.go b/mq/keyconf.go index 833871a..87943a5 100644 --- a/mq/keyconf.go +++ b/mq/keyconf.go @@ -23,4 +23,5 @@ const ( const ( DBVipGiftLog = "db_vipgift" + DBCustomLog = "db_customlog" // 房卡场对局记录 ) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index e381210..982790b 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -168,7 +168,7 @@ func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { // MarshalAllRoom 获取房间列表 // 返回 房间列表,总页数,总条数 func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode, clubId, sceneMode, sceneId int, - gameFreeId, snId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) { + gameFreeId, snId int32, isCustom bool, roomConfigId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) { roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes)) var isNeedFindAll = false if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 && @@ -183,7 +183,9 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && - (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll { + (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll && + ((s.IsCustom() && isCustom) || !isCustom) && + (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0) { var platformName string if s.limitPlatform != nil { platformName = s.limitPlatform.IdStr @@ -204,6 +206,11 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode CreateTime: s.createTime.Unix(), BaseScore: s.dbGameFree.BaseScore, GameFreeId: s.dbGameFree.GetId(), + MaxRound: s.totalRound, + Password: s.GetPassword(), + CostType: s.GetCostType(), + Voice: s.GetVoice(), + CurrRound: s.currRound, } if s.starting { si.Start = 1 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 8751c71..75efbcd 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1720,7 +1720,8 @@ func init() { start := (pageNo - 1) * pageSize end := pageNo * pageSize roomList, count, roomSum := SceneMgrSingleton.MarshalAllRoom(msg.GetPlatform(), int(msg.GetGroupId()), int(msg.GetGameId()), - int(msg.GetGameMode()), int(msg.GetClubId()), int(msg.GetRoomType()), int(msg.GetSceneId()), msg.GamefreeId, msg.GetSnId(), start, end, pageSize) + int(msg.GetGameMode()), int(msg.GetClubId()), int(msg.GetRoomType()), int(msg.GetSceneId()), + msg.GamefreeId, msg.GetSnId(), msg.GetIsCustom() == 1, msg.GetRoomConfigId(), start, end, pageSize) if count < pageNo { pageNo = 1 } From 49c2d8baac42cf6f9526685ebcf5d9585d48c0b3 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 09:00:58 +0800 Subject: [PATCH 045/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E6=88=BF?= =?UTF-8?q?=E9=97=B4id=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/constant.go b/common/constant.go index 9302ef2..cadbc44 100644 --- a/common/constant.go +++ b/common/constant.go @@ -171,8 +171,8 @@ func IsDaZhong(gameId int) bool { // 房间编号区间 const ( - PrivateSceneStartId = 10000000 - PrivateSceneMaxId = 99999999 + PrivateSceneStartId = 100000 + PrivateSceneMaxId = 999999 MatchSceneStartId = 100000000 MatchSceneMaxId = 199999999 HundredSceneStartId = 200000000 From 46c68b978545c6b12081b0f04265e20e1aed119b Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 29 Aug 2024 11:32:55 +0800 Subject: [PATCH 046/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BAetcd?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/keyconf.go | 2 + gamesrv/base/etcd.go | 4 + gamesrv/base/scene.go | 9 ++ gamesrv/clawdoll/action_clawdoll.go | 7 +- model/config.go | 2 + protocol/clawdoll/clawdoll.pb.go | 90 +++++------ protocol/clawdoll/clawdoll.proto | 1 - protocol/webapi/common.pb.go | 230 +++++++++++++++++++++++----- protocol/webapi/common.proto | 12 ++ protocol/webapi/webapi.proto | 1 + 10 files changed, 270 insertions(+), 88 deletions(-) diff --git a/etcd/keyconf.go b/etcd/keyconf.go index 8482f5d..938e012 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -39,4 +39,6 @@ const ( ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置 ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录 ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 + ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置 + ) diff --git a/gamesrv/base/etcd.go b/gamesrv/base/etcd.go index bce9a3e..5452a21 100644 --- a/gamesrv/base/etcd.go +++ b/gamesrv/base/etcd.go @@ -24,6 +24,8 @@ func init() { etcd.Register(etcd.ETCDKEY_ChannelSwitch, webapi.ChannelSwitchConfig{}, platformConfigEtcd) // 皮肤配置 etcd.Register(etcd.ETCDKEY_SKin, webapi.SkinConfig{}, platformConfigEtcd) + // 娃娃机配置 + etcd.Register(etcd.ETCDKEY_MACHINE, webapi.MachineConfig{}, platformConfigEtcd) } func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -41,6 +43,8 @@ func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, ev ConfigMgrInst.GetConfig(d.Platform).ChannelSwitch[d.GetTp()] = d case *webapi.SkinConfig: ConfigMgrInst.GetConfig(d.Platform).SkinConfig = d + case *webapi.MachineConfig: + ConfigMgrInst.GetConfig(d.Platform).MachineConfig = d default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index f638b54..5ab27bc 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -2755,3 +2755,12 @@ func (this *Scene) TryRelease() { this.Destroy(true) } } +func (this *Scene) GetMachineServerSecret(Appid int64, platform string) string { + config := ConfigMgrInst.GetConfig(platform).MachineConfig + for _, info := range config.Info { + if info.AppId == Appid { + return info.ServerSecret + } + } + return "" +} diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 72a0692..8c35ebe 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -93,7 +93,6 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf pack := &machine.SMGetToken{} pack.Snid = p.SnId pack.AppId = msg.Appid - pack.ServerSecret = msg.ServerSecret scene := p.GetScene() if scene == nil { return nil @@ -102,6 +101,12 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf if !ok { return nil } + serverSecret := sceneEx.GetMachineServerSecret(msg.Appid, p.Platform) + logger.Logger.Tracef("获取娃娃机serverSecret = %v", serverSecret) + if serverSecret == "" { + return nil + } + pack.ServerSecret = serverSecret sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } return nil diff --git a/model/config.go b/model/config.go index ce926e0..661d4f6 100644 --- a/model/config.go +++ b/model/config.go @@ -135,6 +135,8 @@ type AllConfig struct { *webapi.AwardLogConfig // 新手引导配置 *webapi.GuideConfig + //娃娃机配置 + *webapi.MachineConfig } type GlobalConfig struct { diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 30f9f00..ce78bf4 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -818,8 +818,7 @@ type CSCLAWDOLLGetToken struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Appid int64 `protobuf:"varint,1,opt,name=Appid,proto3" json:"Appid,omitempty"` - ServerSecret string `protobuf:"bytes,2,opt,name=serverSecret,proto3" json:"serverSecret,omitempty"` + Appid int64 `protobuf:"varint,1,opt,name=Appid,proto3" json:"Appid,omitempty"` } func (x *CSCLAWDOLLGetToken) Reset() { @@ -861,13 +860,6 @@ func (x *CSCLAWDOLLGetToken) GetAppid() int64 { return 0 } -func (x *CSCLAWDOLLGetToken) GetServerSecret() string { - if x != nil { - return x.ServerSecret - } - return "" -} - type SCCLAWDOLLSendToken struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -995,49 +987,47 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x2a, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, - 0x70, 0x70, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, - 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x8c, 0x03, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, - 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x5a, 0x45, - 0x52, 0x4f, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x22, 0x0a, - 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, - 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, - 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x22, 0x0a, 0x1d, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, - 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, - 0x4e, 0x10, 0xea, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, - 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, - 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, - 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, - 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x70, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x2a, 0x8c, 0x03, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, + 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xe1, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, + 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x4f, 0x4f, + 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, + 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x23, 0x0a, + 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, + 0xe6, 0x2b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, + 0x4c, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x21, 0x0a, + 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, + 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, + 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, + 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index a2d08c4..b2522bb 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -108,7 +108,6 @@ message SCCLAWDOLLPlayerLeave { //玩家请求进入视频地址token message CSCLAWDOLLGetToken { int64 Appid = 1; - string serverSecret = 2; } message SCCLAWDOLLSendToken { diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index 37d0471..db47b49 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8137,6 +8137,126 @@ func (x *GuideConfig) GetSkip() int32 { return 0 } +//娃娃机配置视频 +// etcd /game/machine_config +type MachineConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Info []*MachineInfo `protobuf:"bytes,2,rep,name=Info,proto3" json:"Info,omitempty"` +} + +func (x *MachineConfig) Reset() { + *x = MachineConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MachineConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineConfig) ProtoMessage() {} + +func (x *MachineConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[86] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MachineConfig.ProtoReflect.Descriptor instead. +func (*MachineConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{86} +} + +func (x *MachineConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *MachineConfig) GetInfo() []*MachineInfo { + if x != nil { + return x.Info + } + return nil +} + +type MachineInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MachineId int32 `protobuf:"varint,1,opt,name=MachineId,proto3" json:"MachineId,omitempty"` //娃娃机Id + AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` + ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` +} + +func (x *MachineInfo) Reset() { + *x = MachineInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MachineInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineInfo) ProtoMessage() {} + +func (x *MachineInfo) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MachineInfo.ProtoReflect.Descriptor instead. +func (*MachineInfo) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{87} +} + +func (x *MachineInfo) GetMachineId() int32 { + if x != nil { + return x.MachineId + } + return 0 +} + +func (x *MachineInfo) GetAppId() int64 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *MachineInfo) GetServerSecret() string { + if x != nil { + return x.ServerSecret + } + return "" +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -9421,10 +9541,21 @@ var file_common_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6b, 0x69, 0x70, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6b, 0x69, 0x70, 0x22, 0x54, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x65, 0x0a, 0x0b, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9439,7 +9570,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 96) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 98) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -9527,32 +9658,34 @@ var file_common_proto_goTypes = []interface{}{ (*AwardLogInfo)(nil), // 83: webapi.AwardLogInfo (*AnnouncerLogInfo)(nil), // 84: webapi.AnnouncerLogInfo (*GuideConfig)(nil), // 85: webapi.GuideConfig - nil, // 86: webapi.Platform.BindTelRewardEntry - nil, // 87: webapi.PlayerData.RankScoreEntry - nil, // 88: webapi.ItemShop.AwardEntry - nil, // 89: webapi.VIPcfg.AwardEntry - nil, // 90: webapi.VIPcfg.Privilege1Entry - nil, // 91: webapi.VIPcfg.Privilege7Entry - nil, // 92: webapi.VIPcfg.Privilege9Entry - nil, // 93: webapi.ActInviteConfig.PayScoreEntry - nil, // 94: webapi.SkinLevel.UpItemEntry - nil, // 95: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 96: server.DB_GameFree - (*server.DB_GameItem)(nil), // 97: server.DB_GameItem + (*MachineConfig)(nil), // 86: webapi.MachineConfig + (*MachineInfo)(nil), // 87: webapi.MachineInfo + nil, // 88: webapi.Platform.BindTelRewardEntry + nil, // 89: webapi.PlayerData.RankScoreEntry + nil, // 90: webapi.ItemShop.AwardEntry + nil, // 91: webapi.VIPcfg.AwardEntry + nil, // 92: webapi.VIPcfg.Privilege1Entry + nil, // 93: webapi.VIPcfg.Privilege7Entry + nil, // 94: webapi.VIPcfg.Privilege9Entry + nil, // 95: webapi.ActInviteConfig.PayScoreEntry + nil, // 96: webapi.SkinLevel.UpItemEntry + nil, // 97: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 98: server.DB_GameFree + (*server.DB_GameItem)(nil), // 99: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 86, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 88, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 96, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 98, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 96, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 87, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 98, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 89, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo @@ -9565,7 +9698,7 @@ var file_common_proto_depIdxs = []int32{ 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 88, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 90, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward @@ -9586,14 +9719,14 @@ var file_common_proto_depIdxs = []int32{ 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 89, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 90, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 91, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 92, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 91, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 92, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 93, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 94, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 93, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 95, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward @@ -9610,22 +9743,23 @@ var file_common_proto_depIdxs = []int32{ 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 97, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 99, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 94, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 95, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 96, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 97, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo - 80, // [80:80] is the sub-list for method output_type - 80, // [80:80] is the sub-list for method input_type - 80, // [80:80] is the sub-list for extension type_name - 80, // [80:80] is the sub-list for extension extendee - 0, // [0:80] is the sub-list for field type_name + 87, // 80: webapi.MachineConfig.Info:type_name -> webapi.MachineInfo + 81, // [81:81] is the sub-list for method output_type + 81, // [81:81] is the sub-list for method input_type + 81, // [81:81] is the sub-list for extension type_name + 81, // [81:81] is the sub-list for extension extendee + 0, // [0:81] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -10666,6 +10800,30 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MachineConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MachineInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10673,7 +10831,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 96, + NumMessages: 98, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index a62f0da..c3b53b9 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -889,4 +889,16 @@ message GuideConfig { string Platform = 1; // 平台 int32 On = 2; // 引导开关 1开启 2关闭 int32 Skip = 3; // 引导跳过开关 1开启 2关闭 +} + +//娃娃机配置视频 +// etcd /game/machine_config +message MachineConfig{ + string Platform = 1; // 平台 + repeated MachineInfo Info = 2; +} +message MachineInfo{ + int32 MachineId = 1; //娃娃机Id + int64 AppId = 2; + string ServerSecret = 3; } \ No newline at end of file diff --git a/protocol/webapi/webapi.proto b/protocol/webapi/webapi.proto index d5aedaa..d0b9589 100644 --- a/protocol/webapi/webapi.proto +++ b/protocol/webapi/webapi.proto @@ -969,3 +969,4 @@ message WindowsInfo{ int32 PartNum = 4;//参与人数 int32 GainNum = 5;//领取人数 } + From 6bd95be413053c03543d3479b13584096d67ef52 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 29 Aug 2024 11:33:52 +0800 Subject: [PATCH 047/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BAetcd?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/clawdoll/clawdoll.pb.go | 84 ++++++++++++++------------------ 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index cc583f3..b0f6fc1 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -848,8 +848,7 @@ type CSCLAWDOLLGetToken struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Appid int64 `protobuf:"varint,1,opt,name=Appid,proto3" json:"Appid,omitempty"` - ServerSecret string `protobuf:"bytes,2,opt,name=serverSecret,proto3" json:"serverSecret,omitempty"` + Appid int64 `protobuf:"varint,1,opt,name=Appid,proto3" json:"Appid,omitempty"` } func (x *CSCLAWDOLLGetToken) Reset() { @@ -891,13 +890,6 @@ func (x *CSCLAWDOLLGetToken) GetAppid() int64 { return 0 } -func (x *CSCLAWDOLLGetToken) GetServerSecret() string { - if x != nil { - return x.ServerSecret - } - return "" -} - type SCCLAWDOLLSendToken struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1031,47 +1023,45 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x2a, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2b, 0x0a, - 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xe1, 0x02, 0x0a, 0x10, 0x43, - 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, - 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, - 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, - 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, + 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, + 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xe1, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, + 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, + 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, - 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, - 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, - 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x2a, 0x64, - 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, - 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, - 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, - 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, - 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, + 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, + 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, + 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, + 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, + 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, + 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( From ccc0e976350c18fed7c9103ac24be0433a286207 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 29 Aug 2024 11:55:57 +0800 Subject: [PATCH 048/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BAetcd?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 5ab27bc..c431b64 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -2757,6 +2757,9 @@ func (this *Scene) TryRelease() { } func (this *Scene) GetMachineServerSecret(Appid int64, platform string) string { config := ConfigMgrInst.GetConfig(platform).MachineConfig + if config == nil { + return "" + } for _, info := range config.Info { if info.AppId == Appid { return info.ServerSecret From 3bff2c17f3650732f8e9e5c54daadd3d7eff7488 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 14:28:54 +0800 Subject: [PATCH 049/153] review --- common/constant.go | 11 + gamesrv/tienlen/scenepolicy_tienlen.go | 3 + worldsrv/action_game.go | 4 +- worldsrv/coinscenepool_local.go | 4 +- worldsrv/hundredscenemgr.go | 1 - worldsrv/player.go | 11 - worldsrv/playersingleadjust.go | 273 --------------- worldsrv/playgamenum.go | 47 --- worldsrv/scene.go | 446 +++++++++++-------------- worldsrv/scenemgr.go | 2 +- worldsrv/trascate_webapi.go | 4 +- 11 files changed, 221 insertions(+), 585 deletions(-) delete mode 100644 worldsrv/playersingleadjust.go delete mode 100644 worldsrv/playgamenum.go diff --git a/common/constant.go b/common/constant.go index cadbc44..625d141 100644 --- a/common/constant.go +++ b/common/constant.go @@ -876,3 +876,14 @@ const ( SceneStateStart = 1 // 开始 SceneStateEnd = 2 // 结束 ) + +const ( + // PlayerHistoryModel . + PlayerHistoryModel = iota + 1 + + // BIGWIN_HISTORY_MODEL . + BIGWIN_HISTORY_MODEL + + // GameHistoryModel . + GameHistoryModel +) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 1117595..2c52a0f 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,6 +148,9 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 玩家掉线 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 88488a4..603710c 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -229,7 +229,7 @@ func (this *CSReturnRoomHandler) Process(s *netlib.Session, packetid int, data i pack.GameId = proto.Int(scene.gameId) pack.ModeType = proto.Int(scene.gameMode) pack.Params = common.CopySliceInt64ToInt32(scene.params) - pack.HallId = proto.Int32(scene.hallId) + pack.HallId = proto.Int32(scene.dbGameFree.GetId()) gameVers := srvdata.GetGameVers(p.PackageID) if ver, ok := gameVers[fmt.Sprintf("%v,%v", scene.gameId, p.Channel)]; ok { pack.MinApkVer = proto.Int32(ver.MinApkVer) @@ -872,7 +872,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in //创建房间 csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) - roomId = SceneMgrSingleton.GenOneCoinSceneId() + roomId = SceneMgrSingleton.GenOnePrivateSceneId() if roomId == common.RANDID_INVALID { code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 6ec2898..39cd9c6 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -219,7 +219,7 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) } if baseScore == 0 { - logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! baseScore==0") + logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! BaseScore==0") return nil } scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ @@ -284,7 +284,7 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { BaseScore: baseScore, }) if scene != nil { - logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) + logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v BaseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) } } } diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index e7e5d77..2766caa 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -212,7 +212,6 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl }) if scene != nil { logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) - scene.hallId = id scene.hp = this return scene } else { diff --git a/worldsrv/player.go b/worldsrv/player.go index 2ecf0cc..654d23a 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1667,17 +1667,6 @@ func (this *Player) MarshalData() (d []byte, e error) { return } -func (this *Player) MarshalSingleAdjustData(gamefreeid int32) (d []byte, e error) { - if this.IsRob { - return - } - sa := PlayerSingleAdjustMgr.GetSingleAdjust(this.Platform, this.SnId, gamefreeid) - if sa != nil { - d, e = netlib.Gob.Marshal(sa) - } - return -} - // UnmarshalData 更新玩家数据 // 例如游戏服数据同步 func (this *Player) UnmarshalData(data []byte, scene *Scene) { diff --git a/worldsrv/playersingleadjust.go b/worldsrv/playersingleadjust.go deleted file mode 100644 index e59a3ad..0000000 --- a/worldsrv/playersingleadjust.go +++ /dev/null @@ -1,273 +0,0 @@ -package main - -import ( - "github.com/globalsign/mgo/bson" - "mongo.games.com/game/model" - "mongo.games.com/game/protocol/server" - "mongo.games.com/game/protocol/webapi" - "mongo.games.com/goserver/core/basic" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/module" - "mongo.games.com/goserver/core/task" - "time" -) - -type PlayerSingleAdjustManager struct { - AdjustData map[uint64]*model.PlayerSingleAdjust - dirtyList map[uint64]bool - cacheDirtyList map[uint64]bool //缓存待删除数据 -} - -var PlayerSingleAdjustMgr = &PlayerSingleAdjustManager{ - AdjustData: make(map[uint64]*model.PlayerSingleAdjust), - dirtyList: make(map[uint64]bool), - cacheDirtyList: make(map[uint64]bool), -} - -func (this *PlayerSingleAdjustManager) WebData(msg *webapi.ASSinglePlayerAdjust, p *Player) (sa *webapi.PlayerSingleAdjust) { - psa := model.WebSingleAdjustToModel(msg.PlayerSingleAdjust) - switch msg.Opration { - case 1: - this.AddNewSingleAdjust(psa) - case 2: - this.EditSingleAdjust(psa) - case 3: - this.DeleteSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) - case 4: - sa = this.WebGetSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) - return - } - //同步到游服 - if p != nil { - if p.scene != nil && p.scene.dbGameFree.Id == psa.GameFreeId { - gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId)) - pack := &server.WGSingleAdjust{ - SceneId: int32(p.scene.sceneId), - Option: msg.Opration, - PlayerSingleAdjust: model.MarshalSingleAdjust(psa), - } - for _, gs := range gss { - gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack) - } - } - if p.miniScene != nil { - for _, game := range p.miniScene { - if game.dbGameFree.Id == psa.GameFreeId { - gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId)) - pack := &server.WGSingleAdjust{ - SceneId: int32(game.sceneId), - Option: msg.Opration, - PlayerSingleAdjust: model.MarshalSingleAdjust(psa), - } - for _, gs := range gss { - gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack) - } - break - } - } - } - } - return -} - -func (this *PlayerSingleAdjustManager) IsSingleAdjustPlayer(snid int32, gameFreeId int32) (*model.PlayerSingleAdjust, bool) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if data, ok := this.AdjustData[key]; ok { - if data.CurTime < data.TotalTime { - return data, true - } - } - return nil, false -} -func (this *PlayerSingleAdjustManager) AddAdjustCount(snid int32, gameFreeId int32) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if ad, ok := this.AdjustData[key]; ok { - ad.CurTime++ - this.dirtyList[key] = true - } -} -func (this *PlayerSingleAdjustManager) GetSingleAdjust(platform string, snid, gameFreeId int32) *model.PlayerSingleAdjust { - key := uint64(snid)<<32 + uint64(gameFreeId) - if psa, ok := this.AdjustData[key]; ok { - return psa - } - return nil -} -func (this *PlayerSingleAdjustManager) WebGetSingleAdjust(platform string, snid, gameFreeId int32) *webapi.PlayerSingleAdjust { - key := uint64(snid)<<32 + uint64(gameFreeId) - if psa, ok := this.AdjustData[key]; ok { - return &webapi.PlayerSingleAdjust{ - Id: psa.Id.Hex(), - Platform: psa.Platform, - GameFreeId: psa.GameFreeId, - SnId: psa.SnId, - Mode: psa.Mode, - TotalTime: psa.TotalTime, - CurTime: psa.CurTime, - BetMin: psa.BetMin, - BetMax: psa.BetMax, - BankerLoseMin: psa.BankerLoseMin, - BankerWinMin: psa.BankerWinMin, - CardMin: psa.CardMin, - CardMax: psa.CardMax, - Priority: psa.Priority, - WinRate: psa.WinRate, - GameId: psa.GameId, - GameMode: psa.GameMode, - Operator: psa.Operator, - CreateTime: psa.CreateTime, - UpdateTime: psa.UpdateTime, - } - } - return nil -} -func (this *PlayerSingleAdjustManager) AddNewSingleAdjust(psa *model.PlayerSingleAdjust) *model.PlayerSingleAdjust { - if psa != nil { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - psa.Id = bson.NewObjectId() - psa.CreateTime = time.Now().Unix() - psa.UpdateTime = time.Now().Unix() - - this.AdjustData[key] = psa - logger.Logger.Trace("SinglePlayerAdjust new:", psa) - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.AddNewSingleAdjust(psa) - }), nil, "AddNewSingleAdjust").StartByFixExecutor("AddNewSingleAdjust") - } - return psa -} -func (this *PlayerSingleAdjustManager) EditSingleAdjust(psa *model.PlayerSingleAdjust) { - if psa != nil { - var inGame bool - psa.UpdateTime = time.Now().Unix() - for key, value := range this.AdjustData { - if value.Id == psa.Id { - var tempKey = key - if psa.GameFreeId != value.GameFreeId { - delete(this.AdjustData, key) - delete(this.dirtyList, key) - tempKey = uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - } - this.AdjustData[tempKey] = psa - this.dirtyList[tempKey] = true - inGame = true - break - } - } - logger.Logger.Trace("SinglePlayerAdjust edit:", *psa) - if !inGame { - //不在游戏 直接更新库 - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.EditSingleAdjust(psa) - }), nil, "EditSingleAdjust").StartByFixExecutor("EditSingleAdjust") - } - } -} -func (this *PlayerSingleAdjustManager) DeleteSingleAdjust(platform string, snid, gameFreeId int32) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if _, ok := this.AdjustData[key]; ok { - delete(this.AdjustData, key) - delete(this.dirtyList, key) - } - logger.Logger.Trace("SinglePlayerAdjust delete:", snid, gameFreeId) - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.DeleteSingleAdjust(&model.PlayerSingleAdjust{SnId: snid, GameFreeId: gameFreeId, Platform: platform}) - }), nil, "DeleteSingleAdjust").Start() -} - -func (this *PlayerSingleAdjustManager) ModuleName() string { - return "PlayerSingleAdjustManager" -} -func (this *PlayerSingleAdjustManager) Init() { - //data, err := model.QueryAllSingleAdjust("1") - //if err != nil { - // logger.Logger.Warn("QueryAllSingleAdjust is err:", err) - // return - //} - //if len(data) > 0 { - // for _, psa := range data { - // _, gameType := srvdata.DataMgr.GetGameFreeIds(psa.GameId, psa.GameMode) - // if gameType != common.GameType_Mini { - // key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - // this.AdjustData[key] = psa - // } - // } - //} -} - -// 登录加载 -func (this *PlayerSingleAdjustManager) LoadSingleAdjustData(platform string, snid int32) { - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - ret, err := model.QueryAllSingleAdjustByKey(platform, snid) - if err != nil { - return nil - } - return ret - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - if data != nil { - ret := data.([]*model.PlayerSingleAdjust) - for _, psa := range ret { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - this.AdjustData[key] = psa - } - } - })).StartByFixExecutor("LoadPlayerSingleAdjust") -} - -// 掉线删除 -func (this *PlayerSingleAdjustManager) DelPlayerData(platform string, snid int32) { - for _, psa := range this.AdjustData { - if psa.Platform == platform && psa.SnId == snid { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - if this.dirtyList[key] { - this.cacheDirtyList[key] = true - } else { - delete(this.AdjustData, key) - } - } - } -} -func (this *PlayerSingleAdjustManager) Update() { - if len(this.dirtyList) == 0 { - return - } - var syncArr []*model.PlayerSingleAdjust - for key, _ := range this.dirtyList { - syncArr = append(syncArr, this.AdjustData[key]) - delete(this.dirtyList, key) - } - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - var saveArr [2][]uint64 - for _, value := range syncArr { - err := model.EditSingleAdjust(value) - if err != nil { - logger.Logger.Error("PlayerSingleAdjustManager edit ", err) - saveArr[0] = append(saveArr[0], uint64(value.SnId)<<32+uint64(value.GameFreeId)) - } else { - saveArr[1] = append(saveArr[1], uint64(value.SnId)<<32+uint64(value.GameFreeId)) - } - } - return saveArr - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - if saveArr, ok := data.([2][]uint64); ok { - //失败处理 - for _, key := range saveArr[0] { - this.dirtyList[key] = true - } - //成功处理 - for _, key := range saveArr[1] { - if this.cacheDirtyList[key] { - delete(this.cacheDirtyList, key) - delete(this.AdjustData, key) - } - } - } - return - })).StartByFixExecutor("PlayerSingleAdjustManager") -} -func (this *PlayerSingleAdjustManager) Shutdown() { - module.UnregisteModule(this) -} -func init() { - module.RegisteModule(PlayerSingleAdjustMgr, time.Minute*5, 0) -} diff --git a/worldsrv/playgamenum.go b/worldsrv/playgamenum.go deleted file mode 100644 index 7e26726..0000000 --- a/worldsrv/playgamenum.go +++ /dev/null @@ -1,47 +0,0 @@ -package main - -import ( - "mongo.games.com/game/common" - //"mongo.games.com/game/gamerule/blackjack" - //"mongo.games.com/game/gamerule/dezhoupoker" - //"mongo.games.com/game/gamerule/fivecardstud" - //"mongo.games.com/game/gamerule/omahapoker" -) - -var minPlayGameNum = map[int]int{ - common.GameId_TenHalf: 2, - common.GameId_DezhouPoker: 2, - common.GameId_FiveCardStud: 2, - common.GameId_BlackJack: 1, - //common.GameId_OmahaPoker: omahapoker.MinNumOfPlayer, -} - -var maxPlayGameNum = map[int]int{ - //common.GameId_DezhouPoker: int(dezhoupoker.MaxNumOfPlayer), - //common.GameId_FiveCardStud: int(fivecardstud.MaxNumOfPlayer), - //common.GameId_BlackJack: blackjack.MaxPlayer, - //common.GameId_OmahaPoker: omahapoker.MaxNumOfPlayer, -} - -func GetGameStartMinNum(gameid int) int { - return minPlayGameNum[gameid] -} -func GetGameSuiableNum(gameid int, flag int32) int { - minNum, maxNum := minPlayGameNum[gameid], maxPlayGameNum[gameid] - if flag == MatchTrueManForbid { - if minNum == maxNum { - return minNum - } else { - return maxNum - 1 - } - } else { - if minNum == maxNum { - return minNum - } else { - return maxNum - 2 - } - } -} -func IsRegularNum(gameid int) bool { - return minPlayGameNum[gameid] == maxPlayGameNum[gameid] -} diff --git a/worldsrv/scene.go b/worldsrv/scene.go index de9b098..fd9f401 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -6,7 +6,6 @@ import ( "time" rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" @@ -21,35 +20,21 @@ import ( "mongo.games.com/game/srvdata" ) -const ( - // PlayerHistoryModel . - PlayerHistoryModel = iota + 1 - - // BIGWIN_HISTORY_MODEL . - BIGWIN_HISTORY_MODEL - - // GameHistoryModel . - GameHistoryModel -) - type PlayerGameCtx struct { - takeCoin int64 //进房时携带的金币量 - enterTs int64 //进入时间 - totalConvertibleFlow int64 //进房时玩家身上的总流水 + takeCoin int64 //进房时携带的金币量 + enterTs int64 //进入时间 } // Scene 场景(房间) -// todo 结构优化 type Scene struct { sceneId int // 场景id gameId int // 游戏id - gameMode int // 游戏模式(玩法) + gameMode int // 废弃,游戏模式(玩法) sceneMode int // 房间模式,参考common.SceneMode_XXX params []int64 // 场景参数 playerNum int // 房间最大人数 robotNum int // 机器人数量 robotLimit int // 最大限制机器人数量 - preInviteRobNum int // 准备邀请机器人的数量 creator int32 // 创建者账号id replayCode string // 回放码 currRound int32 // 当前第几轮 @@ -66,13 +51,11 @@ type Scene struct { sp ScenePolicy // 场景上的一些业务策略 createTime time.Time // 创建时间 lastTime time.Time // 最后活跃时间 - startTime time.Time // 开始时间 - applyTimes map[int32]int32 // 申请坐下次数 + startTime time.Time // 游戏开始时间 limitPlatform *Platform // 限制平台 groupId int32 // 组id - hallId int32 // 厅id dbGameFree *serverproto.DB_GameFree // 场次配置 - gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境,没有机器人数据 SnId BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 SceneState int32 // 房间当前状态 State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 @@ -89,8 +72,6 @@ type Scene struct { func NewScene(args *CreateSceneParam) *Scene { gameId := int(args.GF.GetGameId()) gameMode := int(args.GF.GetGameMode()) - gameFreeId := args.GF.GetId() - sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode) @@ -99,7 +80,6 @@ func NewScene(args *CreateSceneParam) *Scene { s := &Scene{ sceneId: args.RoomId, - hallId: gameFreeId, playerNum: int(args.PlayerNum), creator: args.CreateId, gameId: gameId, @@ -141,7 +121,18 @@ func NewScene(args *CreateSceneParam) *Scene { s.replayCode = SceneMgrSingleton.AllocReplayCode() if s.dbGameFree.GetMatchMode() == 0 { - s.RandRobotCnt() + // 普通匹配设置最大机器人数量 + number := s.dbGameFree.GetRobotNumRng() + if len(number) >= 2 { + if number[1] == number[0] { + s.robotLimit = int(number[0]) + } else { + if number[1] < number[0] { + number[1], number[0] = number[0], number[1] + } + s.robotLimit = int(number[1]) + } + } } s.sp.OnStart(s) return s @@ -178,10 +169,13 @@ func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { } // PlayerEnter 玩家进入场景 -// todo 优化 func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos) + if this.dbGameFree == nil { + return false + } + // 机器人数量限制 if p.IsRobot() && this.robotLimit != 0 { if this.robotNum+1 > this.robotLimit { @@ -224,15 +218,15 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } - p.scene = this - this.players[p.SnId] = p - this.gameSess.AddPlayer(p) - takeCoin := p.Coin leaveCoin := int64(0) gameTimes := rand.Int31n(100) - var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 + if this.IsCustom() { // 房卡场初始1000金币 + takeCoin = 1000 + } + + var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 if this.IsMatchScene() && p.matchCtx != nil { takeCoin = int64(p.matchCtx.grade) matchParams = append(matchParams, p.matchCtx.rank) //排名 @@ -246,108 +240,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId } - if this.IsCustom() { - takeCoin = 1000 - } - - if p.IsRob && !this.IsMatchScene() && !this.IsCustom() { - if this.dbGameFree != nil { //机器人携带金币动态调整 - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.dbGameFree.GetId()) - if gps != nil { - dbGameFree := gps.DbGameFree - flag := false - if common.IsLocalGame(this.gameId) { - baseScore := this.BaseScore - arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr - tmpIds := []int32{} - for i := 0; i < len(arrs); i++ { - arr := arrs[i] - if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { - betRange := arr.GetBetRange() - if len(betRange) == 0 { - continue - } - for j := 0; j < len(betRange); j++ { - if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { - tmpIds = append(tmpIds, arr.GetId()) - break - } - } - } - } - if len(tmpIds) > 0 { - randId := common.RandInt32Slice(tmpIds) - crData := srvdata.PBDB_CreateroomMgr.GetData(randId) - if crData != nil { - goldRange := crData.GetGoldRange() - if len(goldRange) == 2 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) - flag = true - } else if len(goldRange) == 1 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) - flag = true - } - leaveCoin = int64(goldRange[0]) - for _, id := range tmpIds { - tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() - if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { - leaveCoin = int64(tmp[0]) - } - } - } - } else { - logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " baseScore: ", baseScore) - } - if leaveCoin > takeCoin { - logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) - } - if takeCoin > p.Coin { - p.Coin = takeCoin - } - } - - if !flag { - takerng := dbGameFree.GetRobotTakeCoin() - if len(takerng) >= 2 && takerng[1] > takerng[0] { - if takerng[0] < dbGameFree.GetLimitCoin() { - takerng[0] = dbGameFree.GetLimitCoin() - } - takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) - } else { - maxlimit := int64(dbGameFree.GetMaxCoinLimit()) - if maxlimit != 0 && p.Coin > maxlimit { - logger.Logger.Trace("Player coin:", p.Coin) - //在下限和上限之间随机,并对其的100的整数倍 - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - if maxlimit == 0 && this.IsCoinScene() { - maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - } - takeCoin = takeCoin / 100 * 100 - //离场金币 - leaverng := dbGameFree.GetRobotLimitCoin() - if len(leaverng) >= 2 { - leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) - } - } - - // 象棋积分 - chessScore := dbGameFree.GetChessScoreParams() - if len(chessScore) == 2 { - p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) - } - - if takeCoin > p.Coin { - p.Coin = takeCoin - } - } - } - } - if p.IsRob { this.robotNum++ p.RobotRandName() @@ -356,95 +248,180 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { p.RandRobotPetSkillLevel() name := this.GetSceneName() logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit) + + if !this.IsMatchScene() && !this.IsCustom() { + flag := false + // 本地游戏机器人携带金币 + if common.IsLocalGame(this.gameId) { + baseScore := this.BaseScore + arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr + var tmpIds []int32 + for i := 0; i < len(arrs); i++ { + arr := arrs[i] + if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { + betRange := arr.GetBetRange() + if len(betRange) == 0 { + continue + } + for j := 0; j < len(betRange); j++ { + if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { + tmpIds = append(tmpIds, arr.GetId()) + break + } + } + } + } + if len(tmpIds) > 0 { + randId := common.RandInt32Slice(tmpIds) + crData := srvdata.PBDB_CreateroomMgr.GetData(randId) + if crData != nil { + goldRange := crData.GetGoldRange() + if len(goldRange) == 2 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) + flag = true + } else if len(goldRange) == 1 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) + flag = true + } + leaveCoin = int64(goldRange[0]) + for _, id := range tmpIds { + tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() + if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { + leaveCoin = int64(tmp[0]) + } + } + } + } else { + logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " BaseScore: ", baseScore) + } + if leaveCoin > takeCoin { + logger.Logger.Warn("robotSnId: ", p.SnId, " BaseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) + } + if takeCoin > p.Coin { + p.Coin = takeCoin + } + } + + // 非本地游戏机器人携带金币 + if !flag { + takerng := this.dbGameFree.GetRobotTakeCoin() + if len(takerng) >= 2 && takerng[1] > takerng[0] { + if takerng[0] < this.dbGameFree.GetLimitCoin() { + takerng[0] = this.dbGameFree.GetLimitCoin() + } + takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) + } else { + maxlimit := int64(this.dbGameFree.GetMaxCoinLimit()) + if maxlimit != 0 && p.Coin > maxlimit { + logger.Logger.Trace("Player coin:", p.Coin) + //在下限和上限之间随机,并对其的100的整数倍 + takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + if maxlimit == 0 && this.IsCoinScene() { + maxlimit = int64(common.RandInt(10, 50)) * int64(this.dbGameFree.GetLimitCoin()) + takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + } + takeCoin = takeCoin / 100 * 100 + //离场金币 + leaverng := this.dbGameFree.GetRobotLimitCoin() + if len(leaverng) >= 2 { + leaveCoin = leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0]) + } + } + + // 象棋积分 + chessScore := this.dbGameFree.GetChessScoreParams() + if len(chessScore) == 2 { + p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) + } + + if takeCoin > p.Coin { + p.Coin = takeCoin + } + } } data, err := p.MarshalData() - if err == nil { - var gateSid int64 - if p.gateSess != nil { - if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { - sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) - gateSid = sessionId.Get() - } - } - msg := &serverproto.WGPlayerEnter{ - Sid: proto.Int64(p.sid), - SnId: proto.Int32(p.SnId), - GateSid: proto.Int64(gateSid), - SceneId: proto.Int(this.sceneId), - PlayerData: data, - IsLoaded: proto.Bool(ischangeroom), - IParams: p.MarshalIParam(), - SParams: p.MarshalSParam(), - CParams: p.MarshalCParam(), - } - p.takeCoin = takeCoin - p.sceneCoin = takeCoin - p.enterts = time.Now() - - if !p.IsRob { //保存下进入时的环境 - this.gameCtx[p.SnId] = &PlayerGameCtx{ - takeCoin: p.takeCoin, - enterTs: p.enterts.Unix(), - totalConvertibleFlow: p.TotalConvertibleFlow, - } - this.lastTime = time.Now() - } - msg.TakeCoin = proto.Int64(takeCoin) - msg.ExpectLeaveCoin = proto.Int64(leaveCoin) - msg.ExpectGameTimes = proto.Int32(gameTimes) - msg.Pos = proto.Int(p.pos) - if matchParams != nil { - for _, param := range matchParams { - msg.MatchParams = append(msg.MatchParams, param) - } - } - - // 道具 - dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) - if dbItemArr != nil { - msg.Items = make(map[int32]int64) - for _, dbItem := range dbItemArr { - msg.Items[dbItem.Id] = 0 - itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) - if itemInfo != nil { - msg.Items[dbItem.Id] = itemInfo.ItemNum - } - } - } - - // 排位积分 - ret := RankMgrSingleton.GetPlayerSeason(p.SnId) - if ret != nil && ret.PlayerRankSeason != nil { - msg.RankScore = make(map[int32]int64) - for k, v := range ret.RankType { - if v != nil { - msg.RankScore[k] = v.Score - } - } - } - - if p.IsRobot() { - msg.RankScore = make(map[int32]int64) - rankScore := this.dbGameFree.GetRankScoreParams() - if len(rankScore) == 2 { - switch { - case this.dbGameFree.GameDif == common.GameDifTienlen: - msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1]))) - } - } - } - - proto.SetDefaults(msg) - this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg) - logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos) - FirePlayerEnterScene(p, this) - return true - } else { - logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v, %v) Marshal player data error %v", this.sceneId, p.SnId, pos, err) - this.DelPlayer(p) + if err != nil { + logger.Logger.Errorf("Scene PlayerEnter MarshalData failed, err:%v", err) return false } + + var gateSid int64 + if p.gateSess != nil { + if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { + sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) + gateSid = sessionId.Get() + } + } + msg := &serverproto.WGPlayerEnter{ + Sid: proto.Int64(p.sid), + GateSid: proto.Int64(gateSid), + SceneId: proto.Int(this.sceneId), + PlayerData: data, + TakeCoin: takeCoin, + IsLoaded: proto.Bool(ischangeroom), + IsQM: false, + ExpectLeaveCoin: leaveCoin, + ExpectGameTimes: gameTimes, + IParams: p.MarshalIParam(), + SParams: p.MarshalSParam(), + CParams: p.MarshalCParam(), + SnId: proto.Int32(p.SnId), + Pos: int32(p.pos), + MatchParams: matchParams, + } + // 道具 + msg.Items = make(map[int32]int64) + dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) + for _, dbItem := range dbItemArr { + msg.Items[dbItem.Id] = 0 + itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) + if itemInfo != nil { + msg.Items[dbItem.Id] = itemInfo.ItemNum + } + } + // 排位积分 + ret := RankMgrSingleton.GetPlayerSeason(p.SnId) + if ret != nil && ret.PlayerRankSeason != nil { + msg.RankScore = make(map[int32]int64) + for k, v := range ret.RankType { + if v != nil { + msg.RankScore[k] = v.Score + } + } + } + if p.IsRobot() { + msg.RankScore = make(map[int32]int64) + rankScore := this.dbGameFree.GetRankScoreParams() + if len(rankScore) == 2 { + switch { + case this.dbGameFree.GameDif == common.GameDifTienlen: + msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1]))) + } + } + } + this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg) + logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos) + + p.scene = this + p.takeCoin = takeCoin + p.sceneCoin = takeCoin + p.enterts = time.Now() + this.players[p.SnId] = p + if !p.IsRob { //保存下进入时的环境 + this.gameCtx[p.SnId] = &PlayerGameCtx{ + takeCoin: p.takeCoin, + enterTs: p.enterts.Unix(), + } + this.lastTime = time.Now() + } + this.gameSess.AddPlayer(p) + FirePlayerEnterScene(p, this) + return true } func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { @@ -476,7 +453,6 @@ func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { PlayerData: data, TakeCoin: takeCoin, IsLoaded: proto.Bool(ischangeroom), - IsQM: false, IParams: p.MarshalIParam(), SParams: p.MarshalSParam(), CParams: p.MarshalCParam(), @@ -674,6 +650,9 @@ func (this *Scene) GetAudienceCnt() int { // IsFull 是否满人 // 不包含观众 func (this *Scene) IsFull() bool { + if this.playerNum == 0 { + return false + } return this.GetPlayerCnt() >= this.playerNum } @@ -717,15 +696,7 @@ func (this *Scene) SendToGame(packetId int, pack interface{}) bool { return false } -func (this *Scene) SendToClient(packetId int, pack interface{}, excludeId int32) { - for v, value := range this.players { - if v == excludeId { - continue - } - value.SendToClient(packetId, pack) - } -} - +// IsLongTimeInactive 房间是否长时间没有活动 func (this *Scene) IsLongTimeInactive() bool { tNow := time.Now() // 房间没有真人,没有观众,长时间没有真人进出房间 @@ -765,7 +736,7 @@ func (this *Scene) IsHundredScene() bool { // IsPrivateScene 私人房间 func (this *Scene) IsPrivateScene() bool { - return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private + return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId } // IsCustom 房卡场房间 @@ -804,23 +775,6 @@ func (this *Scene) GetSceneName() string { return "[unknow scene name]" } -func (this *Scene) RandRobotCnt() { - if this.dbGameFree != nil { - number := this.dbGameFree.GetRobotNumRng() - if len(number) >= 2 { - if number[1] == number[0] { - this.robotLimit = int(number[0]) - } else { - if number[1] < number[0] { - number[1], number[0] = number[0], number[1] - } - this.robotLimit = int(number[1]) //int(number[0] + rand.Int31n(number[1]-number[0]) + 1) - } - } - return - } -} - func (this *Scene) IsPlatform(platform string) bool { if platform == "0" || platform == this.limitPlatform.IdStr { return true diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 982790b..2c6e824 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -493,7 +493,7 @@ func (m *SceneMgr) OnMiniTimer() { logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) s.SendGameDestroy(false) } - if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) { + if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum(common.SceneMode_Public) > int(s.dbGameFree.GetCreateRoomNum()) { logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) s.SendGameDestroy(false) } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 75efbcd..7106457 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -662,7 +662,7 @@ func init() { //gameid := 112 switch int(historyModel) { - case PlayerHistoryModel: // 历史记录 + case common.PlayerHistoryModel: // 历史记录 task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { var genPlayerHistoryInfo = func(logid string, gameid int32, spinID, username string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *qpapi.PlayerHistoryInfo) { player.SpinID = proto.String(spinID) @@ -728,7 +728,7 @@ func init() { } }), "CSGetPlayerHistoryHandlerWorld").Start() return common.ResponseTag_TransactYield, pack - case GameHistoryModel: + case common.GameHistoryModel: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *qpapi.GameHistoryInfo) { From 33eab3f5bc517de0fdb12ab8308f2f491a5bf800 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 16:30:08 +0800 Subject: [PATCH 050/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E5=88=97=E8=A1=A8=E5=8F=98=E6=9B=B4=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 15 +++++++ worldsrv/action_game.go | 2 + worldsrv/cachedata.go | 2 + worldsrv/horseracelamp.go | 2 +- worldsrv/playermgr.go | 21 +++++----- worldsrv/playernotify.go | 79 +++++++++++++++++++++++++++++++++++++ worldsrv/scene.go | 45 +++++++++++++++++++++ worldsrv/scenepolicydata.go | 12 ++++-- 8 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 worldsrv/playernotify.go diff --git a/common/constant.go b/common/constant.go index 625d141..77c7b8d 100644 --- a/common/constant.go +++ b/common/constant.go @@ -887,3 +887,18 @@ const ( // GameHistoryModel . GameHistoryModel ) + +type ListOpType int // 列表操作类型 + +const ( + ListModify ListOpType = 1 // 修改 + ListAdd ListOpType = 2 // 增加 + ListDel ListOpType = 3 // 减少 + ListFind ListOpType = 4 // 查询 +) + +type NotifyType int // 通知类型 + +const ( + NotifyPrivateRoomList NotifyType = 1 // 私人房间列表 +) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index ee8f584..d53bca5 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1410,6 +1410,8 @@ func CSTouchTypeHandler(s *netlib.Session, packetId int, data interface{}, sid i return nil } + PlayerNotifySingle.AddTime(p.SnId, common.NotifyPrivateRoomList, time.Second*15) + return nil } diff --git a/worldsrv/cachedata.go b/worldsrv/cachedata.go index 76ab4b5..dd13cdb 100644 --- a/worldsrv/cachedata.go +++ b/worldsrv/cachedata.go @@ -113,6 +113,7 @@ func (this *CacheDataManager) CacheBillNumber(billNo int, platform string) { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) this.addCacheData(AfterHour, key, key) } + func (this *CacheDataManager) CacheBillCheck(billNo int, platform string) bool { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) if _, ok := this.HourCache.Load(key); ok { @@ -121,6 +122,7 @@ func (this *CacheDataManager) CacheBillCheck(billNo int, platform string) bool { return false } } + func (this *CacheDataManager) ClearCacheBill(billNo int, platform string) { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) this.HourCache.Delete(key) diff --git a/worldsrv/horseracelamp.go b/worldsrv/horseracelamp.go index 85a23e2..bdef8f5 100644 --- a/worldsrv/horseracelamp.go +++ b/worldsrv/horseracelamp.go @@ -400,7 +400,7 @@ func (this *HorseRaceLampMgr) BroadcastHorseRaceLampMsg(horseRaceLamp *HorseRace if len(horseRaceLamp.Target) == 0 { PlayerMgrSington.BroadcastMessageToPlatform(horseRaceLamp.Platform, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) } else { - PlayerMgrSington.BroadcastMessageToTarget(horseRaceLamp.Platform, horseRaceLamp.Target, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) + PlayerMgrSington.BroadcastMessageToTarget(horseRaceLamp.Target, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) } } diff --git a/worldsrv/playermgr.go b/worldsrv/playermgr.go index 9ee00c9..73a1678 100644 --- a/worldsrv/playermgr.go +++ b/worldsrv/playermgr.go @@ -426,20 +426,19 @@ func (this *PlayerMgr) BroadcastMessageToGroup(packetid int, rawpack interface{} } // BroadcastMessageToTarget 给某些玩家发消息 -func (this *PlayerMgr) BroadcastMessageToTarget(platform string, target []int32, packetid int, rawpack interface{}) { - players := this.playerOfPlatform[platform] +func (this *PlayerMgr) BroadcastMessageToTarget(target []int32, packetid int, rawpack interface{}) { mgs := make(map[*netlib.Session][]*srvproto.MCSessionUnion) - for _, p := range players { - if p != nil && p.gateSess != nil && p.IsOnLine() /*&& p.Platform == platform*/ { - if common.InSliceInt32(target, p.SnId) { - mgs[p.gateSess] = append(mgs[p.gateSess], &srvproto.MCSessionUnion{ - Mccs: &srvproto.MCClientSession{ - SId: proto.Int64(p.sid), - }, - }) - } + for _, v := range target { + d := this.snidMap[v] + if d != nil && d.gateSess != nil && d.IsOnLine() { + mgs[d.gateSess] = append(mgs[d.gateSess], &srvproto.MCSessionUnion{ + Mccs: &srvproto.MCClientSession{ + SId: proto.Int64(d.sid), + }, + }) } } + for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go new file mode 100644 index 0000000..64db7bf --- /dev/null +++ b/worldsrv/playernotify.go @@ -0,0 +1,79 @@ +package main + +import ( + "time" + + "mongo.games.com/game/common" +) + +func init() { + ClockMgrSington.RegisteSinker(PlayerNotifySingle) +} + +var PlayerNotifySingle = &PlayerNotify{ + players: make(map[int32]map[int32]*PlayerNotifyInfo), +} + +type PlayerNotifyInfo struct { + SnId int32 // 玩家id + Ts int64 // 失效时间戳 +} + +type PlayerNotify struct { + BaseClockSinker + players map[int32]map[int32]*PlayerNotifyInfo // 消息类型:玩家id:玩家信息 +} + +func (p *PlayerNotify) InterestClockEvent() int { + return 1 << CLOCK_EVENT_MINUTE +} + +func (p *PlayerNotify) OnMiniTimer() { + now := time.Now() + for _, v := range p.players { + var ids []int32 + for k, vv := range v { + if vv == nil || vv.Ts <= now.Unix() { + ids = append(ids, k) + } + } + for _, id := range ids { + delete(v, id) + } + } +} + +// AddTime 延长某个类型消息的通知时间 +// snid 玩家id +// tp 消息类型 +// d 延长时间 +func (p *PlayerNotify) AddTime(snid int32, tp common.NotifyType, d time.Duration) { + if _, ok := p.players[int32(tp)]; !ok { + p.players[int32(tp)] = make(map[int32]*PlayerNotifyInfo) + } + p.players[int32(tp)][snid] = &PlayerNotifyInfo{ + SnId: snid, + Ts: time.Now().Add(d).Unix(), + } +} + +// GetPlayers 获取某个类型消息的玩家id +// tp 消息类型 +func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { + now := time.Now() + var ret []int32 + for k, v := range p.players[int32(tp)] { + if v == nil || v.Ts <= now.Unix() { + continue + } + ret = append(ret, k) + } + return ret +} + +// SendToClient 发送消息给客户端 +// tp 消息类型 +func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { + ids := p.GetPlayers(tp) + PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) +} diff --git a/worldsrv/scene.go b/worldsrv/scene.go index fd9f401..bd5e0eb 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -15,6 +15,7 @@ import ( "mongo.games.com/game/gamerule/tienlen" "mongo.games.com/game/model" "mongo.games.com/game/proto" + "mongo.games.com/game/protocol/gamehall" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" @@ -923,3 +924,47 @@ func (this *Scene) CanAudience() bool { return true } } + +func (this *Scene) ProtoPrivateRoom() *gamehall.PrivateRoomInfo { + if !this.IsCustom() { + return nil + } + needPassword := int32(0) + if this.GetPassword() != "" { + needPassword = int32(1) + } + ret := &gamehall.PrivateRoomInfo{ + GameFreeId: this.dbGameFree.GetId(), + GameId: int32(this.gameId), + RoomTypeId: this.RoomTypeId, + RoomConfigId: this.RoomConfigId, + RoomId: int32(this.sceneId), + NeedPassword: needPassword, + CurrRound: this.currRound, + MaxRound: this.totalRound, + CurrNum: int32(this.GetPlayerCnt()), + MaxPlayer: int32(this.playerNum), + CreateTs: this.createTime.Unix(), + State: this.SceneState, + } + for _, v := range this.players { + ret.Players = append(ret.Players, &gamehall.PrivatePlayerInfo{ + SnId: v.SnId, + Name: v.Name, + UseRoleId: v.GetRoleId(), + }) + } + return ret +} + +// NotifyPrivateRoom 通知私人房列表变更 +func (this *Scene) NotifyPrivateRoom(tp common.ListOpType) { + if this.IsCustom() { + pack := &gamehall.SCGetPrivateRoomList{ + Tp: int32(tp), + Datas: []*gamehall.PrivateRoomInfo{this.ProtoPrivateRoom()}, + } + PlayerNotifySingle.SendToClient(common.NotifyPrivateRoomList, int(gamehall.GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST), pack) + logger.Logger.Tracef("NotifyPrivateRoom: %v", pack) + } +} diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 75f4cc6..015e7b0 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -22,10 +22,13 @@ func (spd *ScenePolicyData) Init() bool { return true } -func (spd *ScenePolicyData) OnStart(s *Scene) {} +func (spd *ScenePolicyData) OnStart(s *Scene) { + s.NotifyPrivateRoom(common.ListAdd) +} // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { + s.NotifyPrivateRoom(common.ListDel) } // 场景心跳事件 @@ -35,12 +38,12 @@ func (spd *ScenePolicyData) OnTick(s *Scene) { // 玩家进入事件 func (spd *ScenePolicyData) OnPlayerEnter(s *Scene, p *Player) { - + s.NotifyPrivateRoom(common.ListModify) } // 玩家离开事件 func (spd *ScenePolicyData) OnPlayerLeave(s *Scene, p *Player) { - + s.NotifyPrivateRoom(common.ListModify) } // 系统维护关闭事件 @@ -52,8 +55,10 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { s.SceneState = int32(state) switch state { case common.SceneStateWaite: + s.NotifyPrivateRoom(common.ListModify) case common.SceneStateStart: + s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { for _, v := range s.players { spd.CostPayment(s, v) @@ -61,6 +66,7 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { } case common.SceneStateEnd: + s.NotifyPrivateRoom(common.ListModify) } } From a77cfa41dda7a864eae87621f31ae7eae1648adc Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 16:54:30 +0800 Subject: [PATCH 051/153] =?UTF-8?q?=E7=A6=BB=E5=BC=80=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 42 +++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 4245e12..344fa6e 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -293,10 +293,48 @@ func CSRoomEvent(s *netlib.Session, packetid int, data interface{}, sid int64) e return nil } +func CSDestroyRoom(s *netlib.Session, packetid int, data interface{}, sid int64) error { + logger.Logger.Trace("CSDestroyRoomHandler Process recv ", data) + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSDestroyRoomHandler p == nil") + return nil + } + scene := p.GetScene() + if scene == nil { + logger.Logger.Warn("CSDestroyRoomHandler p.GetScene() == nil") + return nil + } + if !scene.HasPlayer(p) { + return nil + } + + pack := &gamehall.SCDestroyRoom{ + RoomId: scene.SceneId, + OpRetCode: gamehall.OpResultCode_Game_OPRC_Error_Game, + } + send := func() { + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_DESTROYROOM), pack) + logger.Logger.Tracef("SCDestroyRoom: %v", pack) + } + + if scene.Creator != p.SnId { + logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") + send() + return nil + } + // 房卡场开始后不能解散 + if scene.IsCustom() && scene.NumOfGames > 0 { + send() + return nil + } + scene.Destroy(true) + return nil +} + func init() { // 房间创建者解散房间 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &CSDestroyRoomHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &CSDestroyRoomPacketFactory{}) + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &gamehall.CSDestroyRoom{}, CSDestroyRoom) // 离开或暂离房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_LEAVEROOM), &CSLeaveRoomHandler{}) From 958a3b1ba4c2dbe3fa66eee19da998c6daab2c4b Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 30 Aug 2024 11:56:15 +0800 Subject: [PATCH 052/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E7=AD=89?= =?UTF-8?q?=E5=BE=85=E7=8E=A9=E5=AE=B6=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 7 +- gamesrv/clawdoll/player_clawdoll.go | 2 - gamesrv/clawdoll/scene_clawdoll.go | 34 ++- gamesrv/clawdoll/scenepolicy_clawdoll.go | 112 ++++++++- protocol/clawdoll/clawdoll.pb.go | 297 +++++++++++++++++------ protocol/clawdoll/clawdoll.proto | 21 +- 6 files changed, 390 insertions(+), 83 deletions(-) diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index b207785..b1c0813 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -33,9 +33,10 @@ const ( // 玩家操作 const ( - ClawDollPlayerOpPayCoin = iota + 1 // 上分 投币 - ClawDollPlayerOpGo // 下抓 - ClawDollPlayerOpMove // 玩家操控动作 // 1-前 2-后 3-左 4-右 + ClawDollPlayerOpPayCoin = iota + 1 // 上分 投币 + ClawDollPlayerOpGo // 下抓 + ClawDollPlayerOpMove // 玩家操控动作 // 1-前 2-后 3-左 4-右 + ClawDollPlayerCancelPayCoin // 取消投币 ) // 1-前 2-后 3-左 4-右 5-投币 diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 18d6283..34f3441 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -1,7 +1,6 @@ package clawdoll import ( - rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/goserver/core/logger" ) @@ -63,7 +62,6 @@ func (this *PlayerEx) ReStartGame() { this.gainCoin = 0 this.taxCoin = 0 this.odds = 0 - this.clawDollState = rule.ClawDollPlayerStateWait } // 初始化 diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index f43ee22..3347ea6 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -73,16 +73,37 @@ func (this *SceneEx) delPlayer(p *base.Player) { } } +// 广播玩家进入 +func (this *SceneEx) BroadcastPlayerEnter(p *base.Player, reason int) { + pack := &clawdoll.SCCLAWDOLLPlayerEnter{} + + pack.Data = &clawdoll.CLAWDOLLPlayerDigestInfo{} + + pack.Data.SnId = p.GetSnId() + pack.Data.Head = p.Head + pack.Data.HeadUrl = p.HeadUrl + pack.Data.Name = p.Name + + proto.SetDefaults(pack) + + this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerEnter), pack, p.GetSid()) +} + // 广播玩家离开 func (this *SceneEx) BroadcastPlayerLeave(p *base.Player, reason int) { scLeavePack := &clawdoll.SCCLAWDOLLPlayerLeave{ - Pos: proto.Int(p.GetPos()), + SnId: proto.Int32(p.SnId), } proto.SetDefaults(scLeavePack) this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerLeave), scLeavePack, p.GetSid()) } +// 玩家进入事件 +func (this *SceneEx) OnPlayerEnter(p *base.Player, reason int) { + this.BroadcastPlayerEnter(p, reason) +} + // 玩家离开事件 func (this *SceneEx) OnPlayerLeave(p *base.Player, reason int) { this.delPlayer(p) @@ -309,6 +330,17 @@ func (this *SceneEx) SetPlayingState(state int32) { playerEx := this.players[this.playingSnid] if playerEx != nil { + oldState := playerEx.GetClawState() + if oldState != state { + if oldState == rule.ClawDollPlayerStateWait && (state >= rule.ClawDollPlayerStateStart && state <= rule.ClawDollPlayerWaitPayCoin) { + ClawdollBroadcastPlayingInfo(this.Scene) + } + + if state == rule.ClawDollPlayerStateWait && (oldState >= rule.ClawDollPlayerStateStart && oldState <= rule.ClawDollPlayerWaitPayCoin) { + ClawdollBroadcastPlayingInfo(this.Scene) + } + } + playerEx.SetClawState(state) } } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index ec08dd2..4128a09 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -112,6 +112,11 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { //给自己发送房间信息 this.SendRoomInfo(s, p, sceneEx) + ClawdollBroadcastRoomWaitPlayers(s) + ClawdollBroadcastPlayingInfo(s) + + // 玩家数据发送 + sceneEx.OnPlayerEnter(p, 0) s.FirePlayerEvent(p, base.PlayerEventEnter, nil) } } @@ -166,6 +171,8 @@ func (this *PolicyClawdoll) OnPlayerRehold(s *base.Scene, p *base.Player) { p.MarkFlag(base.PlayerState_Ready) } this.SendRoomInfo(s, p, sceneEx) + ClawdollBroadcastRoomWaitPlayers(s) + ClawdollBroadcastPlayingInfo(s) s.FirePlayerEvent(p, base.PlayerEventRehold, nil) } } @@ -183,6 +190,9 @@ func (this *PolicyClawdoll) OnPlayerReturn(s *base.Scene, p *base.Player) { p.MarkFlag(base.PlayerState_Ready) } this.SendRoomInfo(s, p, sceneEx) + ClawdollBroadcastRoomWaitPlayers(s) + ClawdollBroadcastPlayingInfo(s) + s.FirePlayerEvent(p, base.PlayerEventReturn, nil) } } @@ -273,11 +283,65 @@ func ClawdollSendPlayerInfo(s *base.Scene) { GainCoin: proto.Int64(playerEx.gainCoin), } + proto.SetDefaults(pack) + playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYERINFO), pack) } } } +// 广播房间里所有等待玩家信息 +func ClawdollBroadcastRoomWaitPlayers(s *base.Scene) { + pack := &clawdoll.CLAWDOLLWaitPlayers{} + + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + for _, playerEx := range sceneEx.players { + // 玩家信息 + if playerEx.SnId != sceneEx.playingSnid { + pd := &clawdoll.CLAWDOLLPlayerDigestInfo{ + SnId: proto.Int32(playerEx.SnId), + Head: proto.Int32(playerEx.Head), + HeadUrl: proto.String(playerEx.HeadUrl), + Name: proto.String(playerEx.Name), + } + + pack.WaitPlayersInfo = append(pack.WaitPlayersInfo, pd) + } + } + + s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS), pack, 0) + } +} + +// 广播房间正在控制娃娃机的玩家信息 +func ClawdollBroadcastPlayingInfo(s *base.Scene) { + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + + if !sceneEx.IsHasPlaying() { + pack := &clawdoll.CLAWDOLLPlayerDigestInfo{ + SnId: proto.Int32(0), + Head: proto.Int32(0), + } + + s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYINGINFO), pack, 0) + return + } + + playerEx := sceneEx.GetPlayingEx() + if playerEx != nil && playerEx.SnId == sceneEx.playingSnid { + pack := &clawdoll.CLAWDOLLPlayerDigestInfo{ + SnId: proto.Int32(playerEx.SnId), + Head: proto.Int32(playerEx.Head), + HeadUrl: proto.String(playerEx.HeadUrl), + Name: proto.String(playerEx.Name), + } + + s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYINGINFO), pack, 0) + //playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYERINFO), pack) + } + } +} + //===================================== // BaseState 状态基类 //===================================== @@ -426,6 +490,8 @@ func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, par ClawdollBroadcastRoomState(s) ClawdollSendPlayerInfo(s) + ClawdollBroadcastPlayingInfo(s) + sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) } } @@ -636,6 +702,26 @@ func (this *StateBilled) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, p func (this *StateBilled) OnEnter(s *base.Scene) { logger.Logger.Trace("(this *StateBilled) OnEnter, sceneid=", s.GetSceneId()) this.BaseState.OnEnter(s) + + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return + } + + playerEx := sceneEx.GetPlayingEx() + if playerEx != nil { + pack := &clawdoll.SCCLAWDOLLRoundGameBilled{ + RoundId: proto.Int32(int32(sceneEx.RoundId)), + ClowResult: proto.Int32(0), + Award: proto.Int64(playerEx.gainCoin), + Balance: proto.Int64(playerEx.Coin), + } + + // logger.Logger.Trace("SCSmallRocketRoundGameBilled is pack: ", pack) + proto.SetDefaults(pack) + + playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_GAMEBILLED), pack) + } } func (this *StateBilled) OnLeave(s *base.Scene) { @@ -661,6 +747,7 @@ func (this *StateBilled) OnTick(s *base.Scene) { ClawdollBroadcastRoomState(s) ClawdollSendPlayerInfo(s) + return } } @@ -729,7 +816,30 @@ func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode i ClawdollSendPlayerInfo(s) sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) + + case rule.ClawDollPlayerCancelPayCoin: + if sceneEx.playingSnid != playerEx.SnId { + logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----sceneEx.playingSnid:", sceneEx.playingSnid, " playerEx.SnId: ", playerEx.SnId) + return false + } + + // 先设置时间 + playingEx := sceneEx.GetPlayingEx() + if playingEx != nil { + playingEx.ReStartGame() + ClawdollSendPlayerInfo(s) + } + + // 再重置scene数据 + sceneEx.ReStartGame() + + s.ChangeSceneState(rule.ClawDollSceneStateWait) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateWait)) + + ClawdollBroadcastRoomState(s) + ClawdollBroadcastPlayingInfo(s) } + return false } @@ -762,7 +872,7 @@ func (this *StateWaitPayCoin) OnTick(s *base.Scene) { sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateWait)) ClawdollBroadcastRoomState(s) - + ClawdollBroadcastPlayingInfo(s) return } } diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index b0f6fc1..04e9a9f 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -37,6 +37,7 @@ const ( CLAWDOLLPacketID_PACKET_SC_SENDTOKEN CLAWDOLLPacketID = 5610 // 获取token CLAWDOLLPacketID_PACKET_CS_WAITPLAYERS CLAWDOLLPacketID = 5611 // 获取等待玩家信息 (客户->服务) CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS CLAWDOLLPacketID = 5612 // 获取等待玩家信息 (服务->客户) + CLAWDOLLPacketID_PACKET_SC_PLAYINGINFO CLAWDOLLPacketID = 5613 // 正在控制娃娃机的玩家信息 (服务->客户) ) // Enum value maps for CLAWDOLLPacketID. @@ -55,6 +56,7 @@ var ( 5610: "PACKET_SC_SENDTOKEN", 5611: "PACKET_CS_WAITPLAYERS", 5612: "PACKET_SC_WAITPLAYERS", + 5613: "PACKET_SC_PLAYINGINFO", } CLAWDOLLPacketID_value = map[string]int32{ "PACKET_ZERO": 0, @@ -70,6 +72,7 @@ var ( "PACKET_SC_SENDTOKEN": 5610, "PACKET_CS_WAITPLAYERS": 5611, "PACKET_SC_WAITPLAYERS": 5612, + "PACKET_SC_PLAYINGINFO": 5613, } ) @@ -670,11 +673,10 @@ type SCCLAWDOLLPlayerInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID - ClawDollState int32 `protobuf:"varint,2,opt,name=clawDollState,proto3" json:"clawDollState,omitempty"` // 玩家状态 - GainCoin int64 `protobuf:"varint,3,opt,name=gainCoin,proto3" json:"gainCoin,omitempty"` // 本局赢取 - Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` // 玩家 - Params []int64 `protobuf:"varint,5,rep,packed,name=Params,proto3" json:"Params,omitempty"` //操作参数 + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + ClawDollState int32 `protobuf:"varint,2,opt,name=clawDollState,proto3" json:"clawDollState,omitempty"` // 玩家状态 + GainCoin int64 `protobuf:"varint,3,opt,name=gainCoin,proto3" json:"gainCoin,omitempty"` // 本局赢取 + Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` // 玩家 } func (x *SCCLAWDOLLPlayerInfo) Reset() { @@ -737,13 +739,6 @@ func (x *SCCLAWDOLLPlayerInfo) GetCoin() int64 { return 0 } -func (x *SCCLAWDOLLPlayerInfo) GetParams() []int64 { - if x != nil { - return x.Params - } - return nil -} - //玩家进入 //PACKET_SCCLAWDOLLPlayerEnter type SCCLAWDOLLPlayerEnter struct { @@ -751,7 +746,7 @@ type SCCLAWDOLLPlayerEnter struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Data *CLAWDOLLPlayerData `protobuf:"bytes,1,opt,name=Data,proto3" json:"Data,omitempty"` + Data *CLAWDOLLPlayerDigestInfo `protobuf:"bytes,1,opt,name=Data,proto3" json:"Data,omitempty"` } func (x *SCCLAWDOLLPlayerEnter) Reset() { @@ -786,7 +781,7 @@ func (*SCCLAWDOLLPlayerEnter) Descriptor() ([]byte, []int) { return file_clawdoll_proto_rawDescGZIP(), []int{7} } -func (x *SCCLAWDOLLPlayerEnter) GetData() *CLAWDOLLPlayerData { +func (x *SCCLAWDOLLPlayerEnter) GetData() *CLAWDOLLPlayerDigestInfo { if x != nil { return x.Data } @@ -800,7 +795,7 @@ type SCCLAWDOLLPlayerLeave struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` //玩家位置 + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` //玩家id } func (x *SCCLAWDOLLPlayerLeave) Reset() { @@ -835,9 +830,9 @@ func (*SCCLAWDOLLPlayerLeave) Descriptor() ([]byte, []int) { return file_clawdoll_proto_rawDescGZIP(), []int{8} } -func (x *SCCLAWDOLLPlayerLeave) GetPos() int32 { +func (x *SCCLAWDOLLPlayerLeave) GetSnId() int32 { if x != nil { - return x.Pos + return x.SnId } return 0 } @@ -937,6 +932,125 @@ func (x *SCCLAWDOLLSendToken) GetToken() string { return "" } +type CLAWDOLLWaitPlayers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + WaitPlayersInfo []*CLAWDOLLPlayerDigestInfo `protobuf:"bytes,1,rep,name=WaitPlayersInfo,proto3" json:"WaitPlayersInfo,omitempty"` +} + +func (x *CLAWDOLLWaitPlayers) Reset() { + *x = CLAWDOLLWaitPlayers{} + if protoimpl.UnsafeEnabled { + mi := &file_clawdoll_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CLAWDOLLWaitPlayers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CLAWDOLLWaitPlayers) ProtoMessage() {} + +func (x *CLAWDOLLWaitPlayers) ProtoReflect() protoreflect.Message { + mi := &file_clawdoll_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CLAWDOLLWaitPlayers.ProtoReflect.Descriptor instead. +func (*CLAWDOLLWaitPlayers) Descriptor() ([]byte, []int) { + return file_clawdoll_proto_rawDescGZIP(), []int{11} +} + +func (x *CLAWDOLLWaitPlayers) GetWaitPlayersInfo() []*CLAWDOLLPlayerDigestInfo { + if x != nil { + return x.WaitPlayersInfo + } + return nil +} + +// 玩家摘要信息 +type CLAWDOLLPlayerDigestInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` //账号 + Head int32 `protobuf:"varint,2,opt,name=Head,proto3" json:"Head,omitempty"` //头像 + HeadUrl string `protobuf:"bytes,3,opt,name=HeadUrl,proto3" json:"HeadUrl,omitempty"` //头像 + Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"` //名字 +} + +func (x *CLAWDOLLPlayerDigestInfo) Reset() { + *x = CLAWDOLLPlayerDigestInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_clawdoll_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CLAWDOLLPlayerDigestInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CLAWDOLLPlayerDigestInfo) ProtoMessage() {} + +func (x *CLAWDOLLPlayerDigestInfo) ProtoReflect() protoreflect.Message { + mi := &file_clawdoll_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CLAWDOLLPlayerDigestInfo.ProtoReflect.Descriptor instead. +func (*CLAWDOLLPlayerDigestInfo) Descriptor() ([]byte, []int) { + return file_clawdoll_proto_rawDescGZIP(), []int{12} +} + +func (x *CLAWDOLLPlayerDigestInfo) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *CLAWDOLLPlayerDigestInfo) GetHead() int32 { + if x != nil { + return x.Head + } + return 0 +} + +func (x *CLAWDOLLPlayerDigestInfo) GetHeadUrl() string { + if x != nil { + return x.HeadUrl + } + return "" +} + +func (x *CLAWDOLLPlayerDigestInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + var File_clawdoll_proto protoreflect.FileDescriptor var file_clawdoll_proto_rawDesc = []byte{ @@ -1006,7 +1120,7 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x02, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x98, 0x01, 0x0a, + 0x20, 0x03, 0x28, 0x02, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x61, @@ -1014,54 +1128,68 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x52, 0x0d, 0x63, 0x6c, 0x61, 0x77, 0x44, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x67, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x49, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x12, 0x30, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, - 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x2a, 0x0a, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0x4f, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, + 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xe1, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, - 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, - 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, - 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, - 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, - 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, - 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, - 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, - 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, - 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x63, 0x0a, 0x13, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, + 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, + 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, + 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, + 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, + 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, + 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, + 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, + 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, + 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, + 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, + 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, + 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, + 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, + 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1077,7 +1205,7 @@ func file_clawdoll_proto_rawDescGZIP() []byte { } var file_clawdoll_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_clawdoll_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_clawdoll_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_clawdoll_proto_goTypes = []interface{}{ (CLAWDOLLPacketID)(0), // 0: clawdoll.CLAWDOLLPacketID (OpResultCode)(0), // 1: clawdoll.OpResultCode @@ -1092,16 +1220,19 @@ var file_clawdoll_proto_goTypes = []interface{}{ (*SCCLAWDOLLPlayerLeave)(nil), // 10: clawdoll.SCCLAWDOLLPlayerLeave (*CSCLAWDOLLGetToken)(nil), // 11: clawdoll.CSCLAWDOLLGetToken (*SCCLAWDOLLSendToken)(nil), // 12: clawdoll.SCCLAWDOLLSendToken + (*CLAWDOLLWaitPlayers)(nil), // 13: clawdoll.CLAWDOLLWaitPlayers + (*CLAWDOLLPlayerDigestInfo)(nil), // 14: clawdoll.CLAWDOLLPlayerDigestInfo } var file_clawdoll_proto_depIdxs = []int32{ - 2, // 0: clawdoll.SCCLAWDOLLRoomInfo.Players:type_name -> clawdoll.CLAWDOLLPlayerData - 1, // 1: clawdoll.SCCLAWDOLLOp.OpRetCode:type_name -> clawdoll.OpResultCode - 2, // 2: clawdoll.SCCLAWDOLLPlayerEnter.Data:type_name -> clawdoll.CLAWDOLLPlayerData - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 2, // 0: clawdoll.SCCLAWDOLLRoomInfo.Players:type_name -> clawdoll.CLAWDOLLPlayerData + 1, // 1: clawdoll.SCCLAWDOLLOp.OpRetCode:type_name -> clawdoll.OpResultCode + 14, // 2: clawdoll.SCCLAWDOLLPlayerEnter.Data:type_name -> clawdoll.CLAWDOLLPlayerDigestInfo + 14, // 3: clawdoll.CLAWDOLLWaitPlayers.WaitPlayersInfo:type_name -> clawdoll.CLAWDOLLPlayerDigestInfo + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_clawdoll_proto_init() } @@ -1242,6 +1373,30 @@ func file_clawdoll_proto_init() { return nil } } + file_clawdoll_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CLAWDOLLWaitPlayers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clawdoll_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CLAWDOLLPlayerDigestInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1249,7 +1404,7 @@ func file_clawdoll_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_clawdoll_proto_rawDesc, NumEnums: 2, - NumMessages: 11, + NumMessages: 13, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index 893b281..68e1b44 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -17,6 +17,7 @@ enum CLAWDOLLPacketID { PACKET_SC_SENDTOKEN = 5610; // 获取token PACKET_CS_WAITPLAYERS = 5611; // 获取等待玩家信息 (客户->服务) PACKET_SC_WAITPLAYERS = 5612; // 获取等待玩家信息 (服务->客户) + PACKET_SC_PLAYINGINFO = 5613; // 正在控制娃娃机的玩家信息 (服务->客户) } //操作结果 @@ -94,21 +95,19 @@ message SCCLAWDOLLPlayerInfo { int32 clawDollState = 2; // 玩家状态 int64 gainCoin = 3; // 本局赢取 int64 Coin = 4; // 玩家 - - repeated int64 Params = 5; //操作参数 } //玩家进入 //PACKET_SCCLAWDOLLPlayerEnter message SCCLAWDOLLPlayerEnter { - CLAWDOLLPlayerData Data = 1; + CLAWDOLLPlayerDigestInfo Data = 1; } //玩家离开 //PACKET_SCCLAWDOLLPlayerLeave message SCCLAWDOLLPlayerLeave { - int32 Pos = 1; //玩家位置 + int32 SnId = 1; //玩家id } //玩家请求进入视频地址token message CSCLAWDOLLGetToken { @@ -117,4 +116,16 @@ message CSCLAWDOLLGetToken { message SCCLAWDOLLSendToken { string Token = 1; -} \ No newline at end of file +} + +message CLAWDOLLWaitPlayers { + repeated CLAWDOLLPlayerDigestInfo WaitPlayersInfo = 1; +} + +// 玩家摘要信息 +message CLAWDOLLPlayerDigestInfo { + int32 SnId = 1; //账号 + int32 Head = 2; //头像 + string HeadUrl = 3; //头像 + string Name = 4; //名字 +} From fa57f5e8e632ae708119701930bf6a35798ebe51 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 14:49:55 +0800 Subject: [PATCH 053/153] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/slice.go | 16 ++++ dbproxy/svc/u_playergamedata.go | 71 ++++++++++++++ gamesrv/base/player.go | 37 ++++--- gamesrv/base/scene.go | 4 +- gamesrv/tienlen/scenepolicy_tienlen.go | 14 +-- model/player.go | 7 ++ model/playergamedata.go | 56 +++++++++++ worldsrv/player.go | 17 +++- worldsrv/playerinfo.go | 128 +++++++++++++++++++++++++ 9 files changed, 328 insertions(+), 22 deletions(-) create mode 100644 dbproxy/svc/u_playergamedata.go create mode 100644 model/playergamedata.go create mode 100644 worldsrv/playerinfo.go diff --git a/common/slice.go b/common/slice.go index 4fc046f..cfc077f 100644 --- a/common/slice.go +++ b/common/slice.go @@ -452,6 +452,22 @@ func SliceValueWeight(sl []int, index int) float64 { return float64(value) / float64(totle) } +func GetMapKeys[K comparable, V any](data map[K]V) []K { + var ret []K + for k := range data { + ret = append(ret, k) + } + return ret +} + +func GetMapValues[K comparable, V any](data map[K]V) []V { + var ret []V + for _, v := range data { + ret = append(ret, v) + } + return ret +} + type Int32Slice []int32 func (p Int32Slice) Len() int { return len(p) } diff --git a/dbproxy/svc/u_playergamedata.go b/dbproxy/svc/u_playergamedata.go new file mode 100644 index 0000000..f3dc288 --- /dev/null +++ b/dbproxy/svc/u_playergamedata.go @@ -0,0 +1,71 @@ +package svc + +import ( + "errors" + "net/rpc" + + "github.com/globalsign/mgo" + "github.com/globalsign/mgo/bson" + + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +var ( + PlayerGameDataDBName = "user" + PlayerGameDataCollName = "user_gamedata" + PlayerGameDataColError = errors.New("PlayerGameData collection open failed") + PlayerGameDataSvcSingle = &PlayerGameDataSvc{} +) + +func PlayerGameDataCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, PlayerGameDataDBName) + if s != nil { + c, first := s.DB().C(PlayerGameDataCollName) + if first { + c.EnsureIndex(mgo.Index{Key: []string{"snid", "id"}, Unique: true, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"id"}, Background: true, Sparse: true}) + } + return c + } + + return nil +} + +func init() { + rpc.Register(PlayerGameDataSvcSingle) +} + +type PlayerGameDataSvc struct{} + +func (p *PlayerGameDataSvc) Save(req *model.PlayerGameSaveReq, b *bool) error { + c := PlayerGameDataCollection(req.Platform) + if c == nil { + return PlayerGameDataColError + } + + for _, v := range req.Data { + _, err := c.Upsert(bson.M{"snid": v.SnId, "id": v.Id}, v) + if err != nil { + return err + } + } + *b = true + + return nil +} + +func (p *PlayerGameDataSvc) Find(req *model.PlayerGameDataFindReq, res *model.PlayerGameDataFindRes) error { + c := PlayerGameDataCollection(req.Platform) + if c == nil { + return PlayerGameDataColError + } + + var ret []*model.PlayerGameData + err := c.Find(bson.M{"snid": req.SnId}).All(&ret) + if err != nil { + return err + } + res.Data = ret + return nil +} diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 721aeef..9b29b76 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -68,8 +68,8 @@ const ( ) type Player struct { - model.PlayerData //po 持久化对象 - ExtraData interface{} //扩展接口 + model.WGPlayerInfo + ExtraData interface{} //具体游戏对局中的玩家扩展信息 gateSess *netlib.Session //所在GateServer的session worldSess *netlib.Session //所在WorldServer的session scene *Scene //当前所在个Scene @@ -141,13 +141,15 @@ func NewPlayer(sid int64, data []byte, ws, gs *netlib.Session) *Player { RankScore: make(map[int32]int64), } - // 需要make的,统一在这里初始化默认值,别的地方就不用再初始化了 - p.PlayerData = model.PlayerData{ - //TotalGameData: make(map[int][]*model.PlayerGameTotal), - GDatas: make(map[string]*model.PlayerGameInfo), - ShopTotal: make(map[int32]*model.ShopTotal), - ShopLastLookTime: make(map[int32]int64), - IsFoolPlayer: make(map[string]bool), + //todo 初始化 + p.WGPlayerInfo = model.WGPlayerInfo{ + PlayerData: &model.PlayerData{ + GDatas: make(map[string]*model.PlayerGameInfo), + ShopTotal: make(map[int32]*model.ShopTotal), + ShopLastLookTime: make(map[int32]int64), + IsFoolPlayer: make(map[string]bool), + }, + GameData: make(map[int32]*model.PlayerGameData), } if p.init(data) { @@ -373,7 +375,20 @@ func (this *Player) OnAudienceLeave(reason int) { } func (this *Player) MarshalData(gameid int) (d []byte, e error) { - d, e = netlib.Gob.Marshal(&this.PlayerData) + // 防止参数遗漏 + for k, v := range this.GameData { + if v.SnId == 0 { + v.SnId = this.SnId + } + if v.Platform == "" { + v.Platform = this.Platform + } + if v.Id == 0 { + v.Id = k + } + } + + d, e = netlib.Gob.Marshal(&this.WGPlayerInfo) logger.Logger.Trace("(this *Player) MarshalData(gameid int)") return } @@ -382,7 +397,7 @@ func (this *Player) UnmarshalData(data []byte) bool { if len(data) == 0 { return true } - err := netlib.Gob.Unmarshal(data, &this.PlayerData) + err := netlib.Gob.Unmarshal(data, &this.WGPlayerInfo) if err == nil { this.dirty = true return true diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 4ac97eb..fd3f0f7 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -1984,7 +1984,7 @@ func (this *Scene) TryBillExGameDrop(p *Player) { itemData := srvdata.GameItemMgr.Get(p.Platform, id) if itemData != nil { p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: nil, GainWay: common.GainWay_Game, Operator: "system", @@ -2021,7 +2021,7 @@ func (this *Scene) DropCollectBox(p *Player) { if itemData != nil { pack.Items = map[int32]int32{itemData.Id: 1} p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: []*model.Item{ { ItemId: itemData.Id, diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 58c5db6..34581f3 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -1803,7 +1803,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(losePlayer.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&losePlayer.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(losePlayer.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if losePlayer.GetWeekCardPrivilege(2) { @@ -1945,7 +1945,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(lastWinPlayer.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&lastWinPlayer.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(lastWinPlayer.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if lastWinPlayer.GetWeekCardPrivilege(2) { @@ -2056,7 +2056,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2161,7 +2161,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2310,7 +2310,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2442,7 +2442,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2613,7 +2613,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { } } p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: items, GainWay: common.GainWayRoomGain, Operator: "system", diff --git a/model/player.go b/model/player.go index 6f867ea..ca719c8 100644 --- a/model/player.go +++ b/model/player.go @@ -344,6 +344,13 @@ type MatchFreeSignupRec struct { UseTimes int32 //累计使用免费次数 } +// WGPlayerInfo 游戏服玩家信息 +// 大厅玩家信息发送给游戏服 +type WGPlayerInfo struct { + *PlayerData + GameData map[int32]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 +} + type PlayerData struct { Id bson.ObjectId `bson:"_id"` AccountId string //账号id diff --git a/model/playergamedata.go b/model/playergamedata.go new file mode 100644 index 0000000..0fd4a07 --- /dev/null +++ b/model/playergamedata.go @@ -0,0 +1,56 @@ +package model + +import ( + "time" + + "mongo.games.com/goserver/core/logger" +) + +type PlayerGameData struct { + Platform string `bson:"-"` + SnId int32 + Id int32 // 游戏id或场次id + Data interface{} // 数据 +} + +type PlayerGameSaveReq struct { + Platform string + Data []*PlayerGameData +} + +func SavePlayerGameData(platform string, data []*PlayerGameData) error { + if rpcCli == nil { + logger.Logger.Error("model.SavePlayerGameData rpcCli == nil") + return nil + } + b := false + err := rpcCli.CallWithTimeout("PlayerGameDataSvc.Save", &PlayerGameSaveReq{Platform: platform, Data: data}, &b, time.Second*30) + if err != nil { + logger.Logger.Error("model.SavePlayerGameData err:%v", err) + return err + } + return nil +} + +type PlayerGameDataFindReq struct { + Platform string + SnId int32 +} + +type PlayerGameDataFindRes struct { + Data []*PlayerGameData +} + +func GetPlayerGameData(platform string, snid int32) ([]*PlayerGameData, error) { + if rpcCli == nil { + logger.Logger.Error("model.GetPlayerGameData rpcCli == nil") + return nil, nil + } + res := &PlayerGameDataFindRes{} + err := rpcCli.CallWithTimeout("PlayerGameDataSvc.Find", &PlayerGameDataFindReq{Platform: platform, SnId: snid}, res, time.Second*30) + if err != nil { + logger.Logger.Error("model.GetPlayerGameData err:%v", err) + return nil, err + } + return res.Data, nil +} diff --git a/worldsrv/player.go b/worldsrv/player.go index 654d23a..874ebae 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1663,14 +1663,21 @@ func (this *Player) OnLogouted() { } func (this *Player) MarshalData() (d []byte, e error) { - d, e = netlib.Gob.Marshal(this.PlayerData) + data := &model.WGPlayerInfo{ + PlayerData: this.PlayerData, + } + info := PlayerInfoMgrSingle.Players[this.SnId] + if info != nil { + data.GameData = info.GameData + } + d, e = netlib.Gob.Marshal(data) return } // UnmarshalData 更新玩家数据 // 例如游戏服数据同步 func (this *Player) UnmarshalData(data []byte, scene *Scene) { - pd := &model.PlayerData{} + pd := &model.WGPlayerInfo{} if err := netlib.Gob.Unmarshal(data, pd); err != nil { logger.Logger.Warn("Player.SyncData err:", err) return @@ -1687,6 +1694,12 @@ func (this *Player) UnmarshalData(data []byte, scene *Scene) { this.GDatas[v] = d } } + // PlayerInfo 同步 + info := PlayerInfoMgrSingle.Players[this.SnId] + if info == nil { + PlayerInfoMgrSingle.Players[this.SnId] = &PlayerInfo{} + } + info.GameData = pd.GameData this.LastRechargeWinCoin = pd.LastRechargeWinCoin oldRecharge := int64(0) diff --git a/worldsrv/playerinfo.go b/worldsrv/playerinfo.go new file mode 100644 index 0000000..850c073 --- /dev/null +++ b/worldsrv/playerinfo.go @@ -0,0 +1,128 @@ +package main + +import ( + "strconv" + + "mongo.games.com/goserver/core/basic" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/task" + + "mongo.games.com/game/common" + "mongo.games.com/game/model" + "mongo.games.com/game/worldsrv/internal" +) + +/* +玩家信息加载,缓存,持久化,缓存释放 +*/ + +func init() { + internal.RegisterPlayerLoad(PlayerInfoMgrSingle) +} + +var PlayerInfoMgrSingle = &PlayerInfoMgr{ + Players: make(map[int32]*PlayerInfo), +} + +type AllPlayerInfo struct { + GameData []*model.PlayerGameData +} + +// PlayerInfo 玩家信息 +type PlayerInfo struct { + GameData map[int32]*model.PlayerGameData // 游戏数据 +} + +type PlayerInfoMgr struct { + Players map[int32]*PlayerInfo +} + +func (p *PlayerInfoMgr) Load(platform string, snid int32, player any) *internal.PlayerLoadReplay { + var err error + allPlayerInfo := &AllPlayerInfo{ + GameData: make([]*model.PlayerGameData, 0), + } + // 游戏数据 + gameData, err := model.GetPlayerGameData(platform, snid) + if err != nil { + logger.Logger.Errorf("GetPlayerGameData snid:%v error: %v", snid, err) + goto here + } + allPlayerInfo.GameData = gameData + // ... + +here: + return &internal.PlayerLoadReplay{ + Platform: platform, + Snid: snid, + Err: err, + Data: allPlayerInfo, + } +} + +func (p *PlayerInfoMgr) Callback(player any, ret *internal.PlayerLoadReplay) { + if ret.Err != nil { + return + } + data, ok := ret.Data.(*AllPlayerInfo) + if !ok { + return + } + info := &PlayerInfo{ + GameData: make(map[int32]*model.PlayerGameData), + } + + // 游戏数据 + for _, v := range data.GameData { + info.GameData[v.Id] = v + } + // ... + + p.Players[ret.Snid] = info +} + +func (p *PlayerInfoMgr) LoadAfter(platform string, snid int32) *internal.PlayerLoadReplay { + return nil +} + +func (p *PlayerInfoMgr) CallbackAfter(ret *internal.PlayerLoadReplay) { + +} + +func (p *PlayerInfoMgr) Save(platform string, snid int32, isSync, force bool) { + var err error + f := func() { + data, ok := p.Players[snid] + if !ok { + return + } + + // 游戏数据 + err = model.SavePlayerGameData(platform, common.GetMapValues(data.GameData)) + if err != nil { + logger.Logger.Errorf("SavePlayerGameData snid:%v error: %v", snid, err) + } + // ... + } + + cf := func() { + + } + + if isSync { + f() + cf() + return + } + + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + f() + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + cf() + }), "SavePlayerInfo").StartByFixExecutor("SnId:" + strconv.Itoa(int(snid))) +} + +func (p *PlayerInfoMgr) Release(platform string, snid int32) { + delete(p.Players, snid) +} From 3a6e420e987b4340279a2c28964269af6cc8d90e Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 30 Aug 2024 15:34:28 +0800 Subject: [PATCH 054/153] =?UTF-8?q?token=E6=B5=8B=E8=AF=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index e999d63..58f05f2 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -101,11 +101,12 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf if !ok { return nil } - serverSecret := sceneEx.GetMachineServerSecret(msg.Appid, p.Platform) + //serverSecret := sceneEx.GetMachineServerSecret(msg.Appid, p.Platform) + serverSecret := "cd542003758ffce2ef28b0801f60c2ca" logger.Logger.Tracef("获取娃娃机serverSecret = %v", serverSecret) - if serverSecret == "" { - return nil - } + /* if serverSecret == "" { + return nil + }*/ pack.ServerSecret = serverSecret sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } From 18a884da4342bd5a203aefa132606e7175bd73cd Mon Sep 17 00:00:00 2001 From: tomas Date: Fri, 30 Aug 2024 15:59:55 +0800 Subject: [PATCH 055/153] 11 --- common/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/constant.go b/common/constant.go index 77c7b8d..a9de6f5 100644 --- a/common/constant.go +++ b/common/constant.go @@ -93,7 +93,7 @@ const ( GameId_Clawdoll = 608 // 娃娃机 __GameId_ThrGame_Min__ = 700 //################三方类################ GameId_Thr_Dg = 701 //DG Game - GameId_Thr_XHJ = 901 //DG Game + GameId_Thr_XHJ = 901 ///DG Game ) const ( From ece16ac947cfcae4e99e82b8bc00532ec015413d Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 30 Aug 2024 16:45:07 +0800 Subject: [PATCH 056/153] =?UTF-8?q?=E8=8E=B7=E5=8F=96token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 58f05f2..e999d63 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -101,12 +101,11 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf if !ok { return nil } - //serverSecret := sceneEx.GetMachineServerSecret(msg.Appid, p.Platform) - serverSecret := "cd542003758ffce2ef28b0801f60c2ca" + serverSecret := sceneEx.GetMachineServerSecret(msg.Appid, p.Platform) logger.Logger.Tracef("获取娃娃机serverSecret = %v", serverSecret) - /* if serverSecret == "" { - return nil - }*/ + if serverSecret == "" { + return nil + } pack.ServerSecret = serverSecret sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } From 9ab3da69a4695435927e9c949ef6cae4bf1b1a4a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:18:06 +0800 Subject: [PATCH 057/153] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 7 +- data/DB_GameFree.dat | Bin 23210 -> 24124 bytes data/DB_GameFree.json | 266 ++++++++++++++++++++++++++++- data/DB_GameRule.dat | Bin 1273 -> 1417 bytes data/DB_GameRule.json | 67 ++++++-- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 2 +- data/DB_VIPShow.json | 2 +- data/gameconfig/fortunedragon.json | 10 ++ data/gameconfig/fortunemouse.json | 10 ++ data/gameconfig/fortuneox.json | 10 ++ data/gameconfig/fortunerabbit.json | 10 ++ data/gameconfig/fortunetiger.json | 10 ++ worldsrv/bagmgr.go | 12 -- xlsx/DB_GameFree.xlsx | Bin 63243 -> 65652 bytes xlsx/DB_GameRule.xlsx | Bin 12785 -> 12969 bytes xlsx/DB_VIPShow.xlsx | Bin 14551 -> 14545 bytes 19 files changed, 372 insertions(+), 34 deletions(-) create mode 100644 data/gameconfig/fortunedragon.json create mode 100644 data/gameconfig/fortunemouse.json create mode 100644 data/gameconfig/fortuneox.json create mode 100644 data/gameconfig/fortunerabbit.json create mode 100644 data/gameconfig/fortunetiger.json diff --git a/common/constant.go b/common/constant.go index a9de6f5..3c4f59c 100644 --- a/common/constant.go +++ b/common/constant.go @@ -77,7 +77,12 @@ const ( GameId_IceAge = 304 // 冰河世纪 GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 - GameId_Richblessed = 307 // 多福多财 + GameId_Richblessed = 307 // 多福 + FortuneTiger = 308 // FortuneTiger + FortuneDragon = 309 // FortuneDragon + FortuneRabbit = 310 // FortuneRabbit + FortuneOx = 311 // FortuneOx + FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index f91cbf96ddf4a88212669a12c826ac2ef671a4fe..10d42c96c3bcf614300371a1a122b24f45367bd7 100644 GIT binary patch delta 641 zcmZ3rm2uA=#tjZpfjJxp|LtZJ;&IC_Dk;rN4arPTEs|n1RM^5~ap41_1G5KX5~D!| zQwJlEw}J5m`wkG}5F?ABfq}s#Mn;BLK-|T|$gqKl@emWUv4O>8!ARMlT#k!p_Am0&|X0s!tl;`jgn delta 53 zcmdn9hjGSn!05p^`D3i&eEZlF?#flqsX-#0e%$h6WRlDKVKCOnjxwWMVQ|k`c%;oNUVo;IUwc}We?Cj_|4@6yQ5+4BNnb$4i*%L!yJrm0N6o5gYQ5c2y+O`qhJpL<-s0M QV&_-{^yn96E(Y2{0AnINH2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%*Cq@i+fPr!3lOp!`eqIT(KN1V28jAhA9L)0B8`*Ltqa8`M4~;19dn! SAe7iS76Co_g_(^9Dv4W}xuJHf8}PsPKe^ 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 bs1RvE|7J1&7v%j^2I&DSqCJW@@pkU7mEbfw delta 53874 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

    wJ%#O?E@PpjF&zab`;-yZFEnQ0c> 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 KK=t-t;{O0!^p-RL diff --git a/xlsx/DB_VIPShow.xlsx b/xlsx/DB_VIPShow.xlsx index 7a8b23db8cb78a95ff222ad94842765daf72d035..5e3be2e2107d0750b358d19289d4ca27b47a0dbf 100644 GIT binary patch delta 2914 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 delta 2916 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 From 74efab000e8ebbfe732c905156e690a6d97a1db5 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:18:06 +0800 Subject: [PATCH 058/153] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 7 +- data/DB_GameFree.dat | Bin 23210 -> 24124 bytes data/DB_GameFree.json | 266 ++++++++++++++++++++++++++++- data/DB_GameRule.dat | Bin 1273 -> 1417 bytes data/DB_GameRule.json | 67 ++++++-- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 2 +- data/DB_VIPShow.json | 2 +- data/gameconfig/fortunedragon.json | 10 ++ data/gameconfig/fortunemouse.json | 10 ++ data/gameconfig/fortuneox.json | 10 ++ data/gameconfig/fortunerabbit.json | 10 ++ data/gameconfig/fortunetiger.json | 10 ++ worldsrv/bagmgr.go | 12 -- xlsx/DB_GameFree.xlsx | Bin 63243 -> 65652 bytes xlsx/DB_GameRule.xlsx | Bin 12785 -> 12969 bytes xlsx/DB_VIPShow.xlsx | Bin 14551 -> 14545 bytes 19 files changed, 372 insertions(+), 34 deletions(-) create mode 100644 data/gameconfig/fortunedragon.json create mode 100644 data/gameconfig/fortunemouse.json create mode 100644 data/gameconfig/fortuneox.json create mode 100644 data/gameconfig/fortunerabbit.json create mode 100644 data/gameconfig/fortunetiger.json diff --git a/common/constant.go b/common/constant.go index 77c7b8d..97273a0 100644 --- a/common/constant.go +++ b/common/constant.go @@ -77,7 +77,12 @@ const ( GameId_IceAge = 304 // 冰河世纪 GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 - GameId_Richblessed = 307 // 多福多财 + GameId_Richblessed = 307 // 多福 + FortuneTiger = 308 // FortuneTiger + FortuneDragon = 309 // FortuneDragon + FortuneRabbit = 310 // FortuneRabbit + FortuneOx = 311 // FortuneOx + FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index f91cbf96ddf4a88212669a12c826ac2ef671a4fe..10d42c96c3bcf614300371a1a122b24f45367bd7 100644 GIT binary patch delta 641 zcmZ3rm2uA=#tjZpfjJxp|LtZJ;&IC_Dk;rN4arPTEs|n1RM^5~ap41_1G5KX5~D!| zQwJlEw}J5m`wkG}5F?ABfq}s#Mn;BLK-|T|$gqKl@emWUv4O>8!ARMlT#k!p_Am0&|X0s!tl;`jgn delta 53 zcmdn9hjGSn!05p^`D3i&eEZlF?#flqsX-#0e%$h6WRlDKVKCOnjxwWMVQ|k`c%;oNUVo;IUwc}We?Cj_|4@6yQ5+4BNnb$4i*%L!yJrm0N6o5gYQ5c2y+O`qhJpL<-s0M QV&_-{^yn96E(Y2{0AnINH2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%*Cq@i+fPr!3lOp!`eqIT(KN1V28jAhA9L)0B8`*Ltqa8`M4~;19dn! SAe7iS76Co_g_(^9Dv4W}xuJHf8}PsPKe^ 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 bs1RvE|7J1&7v%j^2I&DSqCJW@@pkU7mEbfw delta 53874 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

    wJ%#O?E@PpjF&zab`;-yZFEnQ0c> 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 KK=t-t;{O0!^p-RL diff --git a/xlsx/DB_VIPShow.xlsx b/xlsx/DB_VIPShow.xlsx index 7a8b23db8cb78a95ff222ad94842765daf72d035..5e3be2e2107d0750b358d19289d4ca27b47a0dbf 100644 GIT binary patch delta 2914 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 delta 2916 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 From 0ba53df8ec96580f2683dbed185287d715de51a1 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:29:11 +0800 Subject: [PATCH 059/153] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/constant.go b/common/constant.go index 3c4f59c..c43faf4 100644 --- a/common/constant.go +++ b/common/constant.go @@ -78,11 +78,11 @@ const ( GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 GameId_Richblessed = 307 // 多福 - FortuneTiger = 308 // FortuneTiger - FortuneDragon = 309 // FortuneDragon - FortuneRabbit = 310 // FortuneRabbit - FortuneOx = 311 // FortuneOx - FortuneMouse = 312 // FortuneMouse + GameId_FortuneTiger = 308 // FortuneTiger + GameId_FortuneDragon = 309 // FortuneDragon + GameId_FortuneRabbit = 310 // FortuneRabbit + GameId_FortuneOx = 311 // FortuneOx + GameId_FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 From 89bdfac420287dfdbd0d71ac1729060463932513 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:29:11 +0800 Subject: [PATCH 060/153] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/constant.go b/common/constant.go index 97273a0..5794f0f 100644 --- a/common/constant.go +++ b/common/constant.go @@ -78,11 +78,11 @@ const ( GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 GameId_Richblessed = 307 // 多福 - FortuneTiger = 308 // FortuneTiger - FortuneDragon = 309 // FortuneDragon - FortuneRabbit = 310 // FortuneRabbit - FortuneOx = 311 // FortuneOx - FortuneMouse = 312 // FortuneMouse + GameId_FortuneTiger = 308 // FortuneTiger + GameId_FortuneDragon = 309 // FortuneDragon + GameId_FortuneRabbit = 310 // FortuneRabbit + GameId_FortuneOx = 311 // FortuneOx + GameId_FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 From fe26aa3d37f10477747d34e39c7139dbb9a54d5b Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 30 Aug 2024 18:15:44 +0800 Subject: [PATCH 061/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A7=86=E9=A2=91=E6=B5=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 22919 -> 23284 bytes data/DB_GameFree.json | 101 ++++++++++++++++++++- gamesrv/base/scene.go | 10 +-- gamesrv/clawdoll/action_clawdoll.go | 24 +++-- protocol/clawdoll/clawdoll.pb.go | 134 +++++++++++++++------------- protocol/clawdoll/clawdoll.proto | 5 +- protocol/machine/machine.pb.go | 63 +++++++------ protocol/machine/machine.proto | 3 +- xlsx/DB_GameFree.xlsx | Bin 62170 -> 62948 bytes 9 files changed, 235 insertions(+), 105 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index c6c3839bde5091c19fa3eee95313d65914f6add5..ff8a119357821ffc092bb98270782e597ebcac4d 100644 GIT binary patch delta 213 zcmZqQ%=l$1;|AGC`4W!Cp3h7|oKIIY1JScNyQFxYE?ExYJ)N^_vSFkSBje<_NKI|7 y5{@Q(N);ZkSTx*bc3|{inrsuPh|txHuItH;wQvg%x|qSbm|%9b5T}a;p$hswN9Nzpf9eYmsg_VcvWG(R7XWY(T{0FB?E@#+Mf{z zZez}6F19F6>riBFzA)3q!(a||easIFh3I^;sEyyj^}^hi+;M+1XgqEERbuz~>9yCX zgRGE#e8B!)x#c*8kK2Tc?-%2G5YNSGfBs0NmLY$N$;^aQ7Vuk$I4(^308yr6BMdEm)1f#&;_g5y+ z2{%9b;`f}rB%yfm?k;95bwpRo@Uw7vs|kJX$+nWNWJX@s}lWZ*76`-J~qhrLd<2(UaPvCDa z@vFTo)|sm0rBf1~|D=H(g)o|?b=R^m(G8dOyrEYgDX~5~>4I;)H)ZYa;(yH~Ok7p| zYX_%~bRcaW|9boS3{f_Bak;QO2V5PjWYsWc^RxcJTB04MEfAL zg^{r3x=ATq88{mq6!jK5IT)SuIXzjAzqh#G4fQ#pS-8Gr7X_}58l}$-0X=3ol_+o$ z^h2|IA<#{QAgs22Hex$I9XPvKJqF)mZ&Nwl=d|>0Njjo&8{R4eoEF|8W|?5802Juj>MD+7spO5AnZuy+;Xnzmy@25DvHjF&KnzW*DM2L!bpQW4D5n0wf z_B+{ZFQbB<8oENiH~F|#9WEtbf4SCcI$Z+#^5+IbuU7l6x}kFK{rV$Z?OINEM&r}3 zuXc5&FLsu|cZsf_xw=?}dL=sShfQ4_oQ_^!ovd?hS-L&XwZ}W#w(ElXxY2%)uR>u~ z?e=*r2f^|F+`6(;^X8$?^>yB%;8g6jj0s>KwtQW3$DK=c{%oHYxH!qj2hP{yF9Bu1 z`|LEz@M^D}JkjFotj}5ZdDOyPGfY?L>_b2BK9}7SyV~Z3UI?ij_VYr$P7FtZYgHY) zE$_y9*i|hr+W-(LSVh-&J{pViHQn;#{g+x^p--+$qHB0^`nYxFHwwRAXm?laZhpR= zYlyC~esWqSt#dK?_K9D5*OTjUSwL{EWmeZysqt&`#pHCE;GNe;g?6W9HE}p4wL}gR zN)QBe+GQD9gZAmA`jb<;urUWySJ%yrDPpMv@rdhp75A;nmhy6oE+lB1E{~YeECOw7 zh-YU`T=to1EI!*daLryGL2Ia!@{`$Ap;iJ(X$v0;*DLBp7I?UYy8(-HS75F*9iE(& zy&%fcmPsk?qXjxj`-b#|X6E6ibjK;XrpS4RR;9F8Aho+b< zCAf3nkW_4tzwouwUBPQ913SP{&h~50l*jod>^d|yB2cw8yeFjYW~o zSB>a5y4O9^6BiGzGbN@@%Pf0pC=J1Po`9bvSCwE-okUF=;0RDqjoZ*b{9cMSKQMT*^GQw66j5-%+7Ru zpVHX{lOh&Got^{NosOO|`wkaDk=6^=dk!~;(o>gYwi^~Ek=H}FbPXNHHZ2^GhlchI z8x|hm(b1l|&1IE?_Ne29OxO+y=6q@1%1Kn>txB1f1{+qNBCiVwyV84n?jvJhtAQmB zhw-~s^+eMQ#GNtgm}FM|qA++W4p_l}dyfMcTo1d`J;{Ere}18EIhi|x_jDoDZ0OCj z^Y;VpzViHft}6*n)JlG;Z)tBwK;W-6)u%=k$gVT{>Ml1YTpDL+)*B79HY}AOTei)R zkjK{9o3(k&vIwg|Cko3ZtK$VK5#X$w*Fj2sX{S-|$EWp@Cp2z8Sh~MQ4IV0)dN6OG=9mx`p~5B#A$sO;qB=r@FctHBc0_*@Wt-I zEA<%xlr+9<7P&zmv#Q4=Bu6ky4pl4#CZcLkbgQQ%B*$2FHZ#>o)ZT=B_AGcKMX$4+ zIYN?Z(Haz7uG=(EXjbdiNjqS>8!D4CJ5N&fg~Ga}CILJTsdew9h1>1}p)wt_OC)7K zFcqi3hcPL7gWcdpSkru5(}NK0rb^OO@bzc5`=Q!bk=&IfCp=|tbkF!UcS5zXvWZGg zDxbTt6qGbl=?*H`whpasn^&t~7WV{||@nrWe2`!(*P0)|i!* zoVcp#=>#yIlWQhqCo=sIhDY`UxtNOXW%lz0ds(pK(Nax^W`n2Z`Svm++^9~6L{cyS z5j#tACEE0wJL+`6{nH_VbQzKA0aD~mFa_aXsL86r>dB2PhfQBMK+buZGBrflaH z{4)=k^$UW|OlKePmZzp?wSeEO9~oM=WIOwW%nu1brNI}r6Yvj<BcY;A`^@#88#K20XCUXq|=bssLmkE>afS{IS*n4S3* z7gf+$-zrZPtxaj)YM3G+Ij4Bl&#!?d@w2}EyET=nn`6wR2+i)&(=u<#g?>eYbGbJR z`-{8ONv65a-FK&D-oO_PGbD03JLkWa`9EbhI1e64z7TXO$O!~0?HyaK4J{Q7nvUY8 z7NxAAUw#Dk+B=F_Lp7}Wq&Q+c>X$;mW7}-fl1sJv&Ek5+E5!y4Mrn4P^IQk=W{b`E zIG9R^?cU&s8R94{#RL+0(dhKLUeTcXsIM2Y2Y%oT@&o_pVHT%3@+sg)0|GcWJ$rY-a$rjfUjppPvpQU%e9yQ!=K*+k~(C*%JzhP<$Hf5x$lN8pM z1(_bb915v9_?BX2-cuv-{^g4(lpJRvtanM6fj&`qx6)8#GnG+u#8Spb0q9%>71WBj-5@{#k42-PJRDJ7J?c5MFY%zZ- zOAmkV^*d9uEj)^Z%WQ>>QgfnUGJa6qV8-^+kjm$D^ZFEe1%-N_?Ok6~U6@y1%+=~% zx9r=MCtjzx0O7|r1>x&x*XK*p_dF{;wDMjtG74ScuL|YFQhclu)VI!I&21lYvp)Y| z6W1OT=;x1kA5q~$FYAbv!=_xfS3@};u9c=0OLRA+H@jG&1afZ39hb%_Ov~%87nk6$ z@0BA%)wri-8v#?(<`EdJRC`w|R4jb&&Fd;_I~W<8H6Z7v-j8lqq`R%?3~esls^uML zJ<4k+gKO{(C$9~-tIx986?s0%v&?0IzBoo`?@zAy*q4!OJEiyGIqoKYZ=mAe{knke z$fP5FmmecxWbxLE-a%6o+F2QF-TKuh!r#BCqgbk#KXgm`K#Eeig)ZxDVD`%y3y$(& z)yH0Cb`G#@prV{}9cU)?SqWd-`K1%OBhRMTMs>8e;&pwMoiggBCMu>Jy;l~xgGR_u zYjB4z|6(XMkDo=|X--Av3&om`MNY*+8DS^ylWDx32b4Ow;c|BTsvZb-2@Q75tIgNW zaNAx(*ZuU-&%1fJaZdV+3TNH^8mnc)Akf>Liomsm5%kG9!`YfaUQ-J+yD9KaW>5QBgeUwaN7U{9LjXrCXVYji>soon6uSrsAQ||3(&g@>Jm^0Z_OAmA(iQ z3>JMkJfi3IR_$s-MoEx(^;?R`F7|&x-Ic)>Vo*ZK;Ydf5^%Lm(wtu$?1q|~42Kuvm z*Yniadk5J-eh6@~zBW*QJdd9`{D@Ldo)D<#;R*q!`m*;a*ySUx+b=zROKA=P!-w;j z;wmo9_una9WisMIEEXTCrwu1?OO|8~cU3P92{@-Lc2i(2-gPy2nZ2hw5KD2TdeU-` zW59GRShWWoU4(8er-*37oijNvsT|b~p@DNJ%P>YpKGwk426PABAwbte$fo#;+{)AU z3+};Ok|Zj*<80*789s-bjGa1AJ@S?E&}s25i0Ol88f^pXqSZ_GkHsE(vq6>*p}&+i zf_i1mb@0af)&UN8%o4`mirn~3g=sTzjX~=_sM`ENb~ts--~O+ zhX&Q_+@aU&S%7`KYe(0|u!v~6>Qi|~`^0()(V1gfdY^e<6IoE)BB{_6EFCbYad#hl zv%LS{Ojv;04UIZLq{OJ6SsV$q<1Kksc9bX24bWs+%bxEDpxdE@A3*tf&W&TPwtK}` zQU|ZuppI9mb+Zz7Tp`$#d&=rMmx%V|D8Nfyq-eMN{IY%NBz9+TG>F|+DrO0LcSXFj z7So6tfGt2+XRenu2@R;x=z6SCUAuViG)O(bvXG;|kI+$tC8)CuMQG$nM#x51z&fT- zA9hL<$9~e=;aK5WRdLTX$Q4*QQlDvw?@nBg?7fVE&Hmgou8qTIE~Si((;q(!aq`a6 z@1vZJe4Tm#?+uHKCmksn&(3`GMa&(wgfTx5a1olyTgx=6HRlMy79!;{5`1vs;&Oc7 zNG0W7Eu#*;U(pl2cDRHtrM@tp6>N3vw9%8$yx>t8U(`B|38&6aVe-aLp038Vw*uuX z&2_XWx0TAs6zP6d_I4SZj{R_I%nS|S9T(ckW4a61IEE#!`GDDA0^YYZ#lwW-yaq=A zu2I{Uyha&fDHJhHDdx`6QgcXxkg_ieGwi+7AY0Ex8lR}|PAD*}MU|kgXMmyri9)e) zOs_e6@U5Wf1@@bzmsn|9&)C?X?>uT7abiPR+(Ua|=Hh)F_p2=Vw z>2J(=!R0x|b>Rc)7`JzjI+ukuJSv#uv9nfJYKS{&9i83?sU7Bo+%L(PLN#rJTvIgD5^lwRM z(wK$P-B?EKsY-nlSZn8r1MlZN=ov{uAf?SJ>Rq(+riT$1-Fb zcP^4trNP1Y+y9ol_Hy%Y`>UEtUTg7C7j^}^VG8f~=3ZWdjEUTV&qZ3Vb`y)r%sOsn zXIJB|mJjuHKV}}6z@t(c&asv>4$|0kDgG1@#4^YGQI==TbJ^&=^eAd8|L%bBe|JD{ z`;P#5y&2F2tEkg({U!EGxPyKNRp)a%xv8jcPzw6YDN#pM8vZMi-go z8y95Spwe!|q73Z%5xP87@hPbXT?W;&d)*j$!0y+podaRX6dkI^a+V(97CF$x58mlH zD~wrOl~u&T%ENagUk4E8`jn|12uRrxM8wv4XfURAd_?Tvd0TiLPhn@`Pw|9b2aAki z>de&AZ_uhO#&H-t!!nz&mRgp4NIv=m(P;8<|L!*L)M!{B^&D{(Lmq!5YYXG9wg}Bz zMG*QUwph}ejs zqhto!lUc54yP|w-MUCk*-P$FysM#O*JFI`rs#?Phks2jFRQi31<+-*~zgcJM;q-ua zlP!w3_Ej^){Q~6#+rZtxcA9OuMjl5u9kM>-CcvL5*=*cTbBKjKUEW&Js})v9Ty08af!#YSfqj)orJD9dwj4juf6*aJnXSE7k3Rr)&C< zt4Wuy?&G5@yF7}xcB8ZtFfPm{MfGp61A;@ISu49y^ih}-XS1T~5X=dtRp5G>1DlTO zwVP1>Hg1l{rxJ}N>|0uJaEVt6z8orUT$^ordbwzqNI|3Y-O-;RV*kN#Cm-q9^6?_@ zVFf3P_)=r|@QF(cs2fh)lk);=S9jMSNoepq#$S+zbvTfxy9x1l z<&kWgSG$S_J|s^))BXLkx__^t>SAR}tBHKho#bqF~FA1!9SVuo7-`PcFZ zh+r|PUTQd7@oFRRr1lb+`IlJNwL~rN$x9Mrq2ZeVm}(rK3kM+ zZ2h3!XWy%}u4X!54aQ*w2x8eRG7hz52$l6#HO5int5hFXp`r@MVA3)Hpcos(TbnF6 zH^fUxa;qSv+k>jO!(Y!YbkTPTy#SV?i?1`-w&1UIU;15r8qJjB@c3z z@AUK2BDO82*XkHrqdWko^*Q|HJw>*e?H*SvCjjv%_A>QSBmBuil3`uG*k^e6)b$lx zSc@f91B`{LZghLa81K8`aWw*WfQwNbC9;?JT?WRd=bc6{VF9iz-SdfCosxaTewQtW zqz`|vCMAB!0Jsukw3Ypegzt`ueH)#Kp|1a$exx+E1W#X|iqQqm>4f0Z+cs)>8ssz6 z>^y+HUR4K-i@QnjEBNpy|1?;e6uH}A8V{QkdBGIKZdR;Sv`KjVDlb+Ut;8^IO!?M$ zr6-g6O82qDsF&Wrk(u1$_#E}KGW&aKa@6_wx`tx&RJki0S;mRJ&8BnoW0b?{l9n^( zj2>xOq(HEX+3oPev*xxM|C`)1PEWfuN=&5)mD%6enTR&ox`F*KXQ#b0+FDkEF z1+rZO`O3P3PFE|sT~t-AY3+OMio)T$z8otLyh~PWPNO%AVyPIL=8U>~uGUZc`!RkH z{@|WP2%hqf=3JDI+pGHSq0gS}na=dCzAc3Sh#C6*LYZPZmnt2Ti^W;!xVW>|;;Sq3 zvJu+m+yvS9lv|V}L_=vKVxc&G5O%g?h``-*Xp$e^qtRj5wz#3ftI5_xff*C}jyADG zAzg(R?dhv8{xe^~k3kXlPCx8$@FWJ1RD z$PfVye(*e*vZ*}InV$EZlBZXLXPuI}Wy!)g?||+$B%+;?Afgq|%0fiFIZ*i!6T@!< zDQU^>gVzB=skGoIAdCZ~Lcg4&< z#o51_nPp%0HT0IJ_W|p|GFf{0dN~mOK2wHN-r(7-)QmEc)Dl{19Lqg5nVcOTKZ=Kb zjpX+`tJj~|H1ti!#3-!Y(xntdX^GrRn;8+vvduH#{6(i~A}6k(uk)D0C(iz=r~^Lf zH{|6Er3%2Rp%=(cnI4ZgPx&QnQz0N(a+0pf8;wW(Qxl?Q*YZ_pDt zVrTijTeC8a1}_AewyC6t7q_}j#=B3&=S!HMR7Wj_d7XBIz*QMh?{u%PG1%%lgy>7> zN|KF6!yuL_axaJt^j~*f+?TmMXKI~RbB~{qZe*uJgYw*QQ<#xX&W(jmAUXElI99G? zg*%QGF0gac0QcelNx%ciumg5{j=P7jehC_Eom6r-9=EOQEk)SO z&(&!5rfKU%EGpj0;e_4$eD9&hOy^r~Pi0C54*FmaLmD|t@6TDwj2<5>wB_D7wzSo7 z75x{&yh*jJ7NGu{wYPS*GQ>}ZCVAY?u5o?~>-c;HHf=s*pPz2Aq{{L8tq2hUGkb{t zOlSC~35_la<5M*^(IARGg?c<)qV9R&ULMA$Bav~YI&?qo6V-UBn_F@i(-y<*9kpGl_we}`t<_mu`9rTw?@C-re;;>?v}$VTA{bZF{+n$B((z5t+!tagXty=rdwJ8 zPXT>s|N4K@jq>cK{~_C8cSG%}@fO6x-}B!su zKMM_Iji~Chg7|_{re*j`vF_Rf@f?DatBHE!5Rfozj~2#v8~J z`yR6E6N?>I^+|l_C?2IG{wP1N(bnNJzT|#Jj)ir2kW({k*a&u?#_e557I&zLz^6vY zru^;jwpFdPp&I;pjxRQ8%#6?Y2#r-l2IGmR(mVnBhUXW0y5JAvsB)q3nnzzK>jQea{Loz&^tnD`b)>7jdv z)b1RU;b(*JhLKB-c_cxLdg3a2ux4=I(qQ39j;PQ&K4JbMzud5?WPZKT!SUjU6#yrz zBkW(Oy3k>65FC02KyaFshRG${KV=;>my~ryL{&lnB$kl{yx+jASo zq}#QRdZZf|F8$)TZvzd7R64h3kK7da3ng10AJbxDBe^X{ACgp9DeWf&tAXUKw~R>C zM|^SKrfys{)-m4LOjG#t!>8iA1aYcgzrGQ0FjEof_orvGUpIf`No8PJEjXLN(i!`y z`=?}U-_~YB6w~VCrrLFpYK=>fmoBc54pyV3pwo>?)w zQ3#Q4-Y-P4+B&n_E;eR9IeK5fXKS1e<%(LHE_&pskVSmoUQq{x_@TKlMhhHiMV$m&^NX z!}jVJJ_O6yUXsSQS$JM_Ne?g++P|uj?P&eLqaZnBq+25YwLh$myDhuM;OFF#1Lj#D zzMT*Ivi%O{qb!vX{90DI>W96>598D}r$wUFR^KU%iksdW2|=-~JrrE+Y#sH%`) zZBc?Z+)6?%WBEtV|$S;y|ebHCL0bb7k!K zb!b}t3TD>WHXZo&p8+8_o}>^>pFJY00Y1(!9@OO;6 z_^EL$X}I|EJV*x*$v*`>Wjaf3JI8e)UZ0b*u+5VV>R(DavZLdweg7(Ju117S?wZed zWdd*n7+tdEZ6%Z#hwVW8ph)}fxUdZ}V>nDqTtxx&|% zfxm?BvU5- z#Y`r13V2qf0_~H@pP1a9$3IgP(v3_v)RTZpuuot4-M3DW%$U1R*R%0YcRnP~ay`Rk zC~0Gq&Tko1I}nm$C)hk7mzKITFxC~nAt5SI`8mzxg~l0I?jI@d&D+5-${ssvMS~r4 zNF&|id274py1#qtGbf%FEhnw^s(K(aFn`AfPjD%LjH2eLlH!>*YLe~?reRx{87bY+ zRu3eqj4IuK7(U_>;*uXG<`r5^K0PWO;zDjy>|9vmzF8yf)>h;~zA?c#Wa}8Fb*?4D z;fg8@@s28SpYF|A31(@fJJUvzonzP#f20Yvh^5v%a5fi(I~+_()|ab z+52>|7a&B1&fyjXvjnMKF20+VBua$2e=({i?^5^|MvWjwpEbD);~U8UbET%LT~Q-g zA|>T;vEIp&-$Fz^Xlp_|K$OBm$H=Gm86Fked}aIE=YFVUDj-tte0z*Mi$H&|*Znqg z>RR-VlI;p^W!(ojaRsi^f)&A@Kps5N-*2Rw@$1DN2vbZF4F{0u5wA=YVO<4Bx9OxB zOHNCA&GrNAlK?{KAZxA+n{^`GLpSzU0)N{?tPUtbtl3{9Z6HnuWrE|WYJGiz=&Ay_@yN5XTO z;q(wvUNVt8y>tj8`^{JkZNYW9Lja}{W_QAh>uu)Dw}<39`^f48KHFsY1((Um!){7_ ze)iv~T46q}Jj2_775XI`Pnl;D9Xzk_H^igI16h2KHHb1Bo)?r~yBZBPLNK2MS0KmE zEhgC*xD;Ys^tN5A<+1dKJc20PI>1REE``- zwAK&Zr>)gy+c~OLxC}W&F{m3bH&i7A%ZCQZ%0^8IC7k-5RwFhah9%?)Zl`u$)4HZ#;!?`u&a_9fS~DLbKCT{#ov2Voxd z<7yb*-%hxh}@lYAi=dnhTNmJ1@DP+x!}ECN6swoC(OSdw*(;l$o-X}n=a2>IS2 z+HmRKdydgiz5f)w@;wIc$;vE)xNhhAV%4D_EQct4@SaG#*i}6e zO_f70YFmaL)H>LCrGBqb6YcT~V~wYrN62o>$qH0TzmnqV>rz%+MttCw<2ZBi4F4_!)O7DZk`N+PE`f zO~H+ZDeCfJH~g|7mK@K_trU>_c;|kqVsD_8UuEW0)6AMX$OJ)BXx{j@sjO~78ph#y z^j~XN-+Cl(Wz?hi?i<(D@O}D&2!B6#rE1lGTeB0WQ?PHwjmbv_F*{g3aTDZ(_VNcQw zeb_UrvnYooMSInJv545&DKnGuo6S2mlX48>(f`cR91sn(cQ}D6vUkguo_3=6MA^Y9 z0S4wG^jMN+2!BC;JjwVH;?*J8xIqPL(C3CuBU$z6EbKtxm`C_~Gg87jC;-VdPlfSY ziyW;XQbGpb`K;7TsyU!lbbHGxWlf5< zsoUU|_YP!vEfgI6ykUu=XgmJRK>?UQ>>K=AIlWpLoJ^1rTHeE>ayyI|KKR=YD_NR? zCwam8T0p|_4yYa_SDP>d0ZIT}mb7YZb$NNjSR-lEkQ&RBt%7M(dvk#9V+V@fQiv03 zM9t&FKu$gX0_pdgnI-XLtwy@nAo-rWHE~PXp@i_R%Q@-Tt)=^$b0v{9X?34!iiCz8 zs3-QS<7!?;e8h{i_}(nKFqKV~>EBJ3S@kkP1)@SroII(8i> zuRuUSZbSi6q#Il#R9Z@^eIisY*5AgHeMpE0YaEJc1|o*( zF-RRwz>rk~L$+R4bNl1y%OVWj2c&cb_l8(MAD;R9K@d$v=_oIt8+yqdv0O&Q*9e#q&!IvTx?g-PW$xhv7Fnf^FtoFU8q7uIk@CkkORNN<_`4 ztecn|i!+o~b;U?E!`Y^qsM2PdIP^0|0lb|=q5XZuY1@Bj#Ana{(1^4Nu$WfYu72P6 zKWN1BOs_V}3!q_CXWQ6@1UQF@FDNti2AduJ{JgGRszCj4)-F0l`!+1Rl|KUBe^(HDhIBnJ+(6eO{dQXy*ULi8O30(PQxcEJ@pOn|p2$3uX}UTL zo#6UJOc&KsuQHGT{sdM76WlUxvBJ88K#bC_dR*n334!`F-}?hg7Bgi~VG>cy25~*h z^8TBVp&$68{REznHEw2)p{Q381b;YVy&MN-N#g(2L zq2faRkKdhA4V!;4u8*PLc=83`NJO1rV+qrg>ysjM(|}n(m+Fl!-J#fR&^IIs4g{zV zKS*(CI()HLJg=qE8I{$H6=k}pI{d&oKlWOOYRqZq{C3@x8nt9*&Wovm+x`%3>LzB! zLd;uq6CY!=*r=v-BJbSOy!Gpw=kEk-Px}xKKPYW5sAk(wY?`S&{?_9*U+M22@Ucx& zn=)&UyO3aHM-nMiQh2I8j@^0n*a_e%Bq+jV@;BMmX`o;dV{-Da6)=$|8 z2WRk_FX9YynL1E$hAYL20EZmazLNQ>BJpxrwyMTj8mli8RFq^v!RmXDZajhjBh$Og z7%#wPh4d@`x26q%qPBQ}pdpjL$4gSzjZ*1C610eI%5&-iR9N6H)o?x>;~R&NF}pDY zg_BYBS%cwM`>N8PPYB-Cx?>t z&SZ9pNZVmz;j=E0AR_`h*IW%J$B$OWVSCVd<0T!K^>kp?-vc#CjL?4O0?OZivR?0R z)>HPtZ)~}f|7pwZ>WH0Yji1H6*tP3ri9<U=SwGFRd+ zK}F*SWBH(RA+rD~7sVfJiqvpHGXRf@YpP=fDE}#huo&BWB{p3#g2hgVq4^>t%hr-4 zgWMAOn~@_I?-jjH2|Aa~k&C#1l!>_p&I?Ziv2GRJ3wgcqf_t*20=5nPcbHIv+t%H} zvW;HVKcq_7TYQYMY{@JbBZo5WxZUycM#ugC!wm5FzkpULm*M4Xbt#wOQ&cQM!wC=E zo>O8FDP}?qTYTOK2(~u8WkUT1rtTB^e9>J3IIEyE*B6WoZ*3eDxk1ZR6DP8t|0q8C zbST+b|5eOh;l#ESgKQN`o!ymtK#%cb#5F2x;9w`%z%(-QT7m?~T9y2YqL3fh$^cR% zyl#*pO`!eM%e@cM_(viZ<==;mtK3IaZ@*;y=<=mQHJW`{Uggfzo?>e5*Y}$_@Mpg^ zKbaV%zB4?e5f_lpve3YL;W_Q$9{dgL-F!AV z>_AsIaq~Z}um=;U;dX+Qz5Fj_uL;5Byu*GsmR+XA5Rdq}AwI_6cF0k&57@=UI4x}} za`;A5|6|Kg5^3{|P(7VA-eexQ={H;~*yXMpjZK=Y?0Ur0LrB*~ZvCJAiB%Tpzs6P; z?6rY*Rx}X;kRa7NpiHE6UB8EH);r83${bWug{~Y*?uV?QCPa0$K4X6n7>PvmJ_hj9 zCYSmjNO3;VhUZfZ%iZ>^Hq9OA_5C(s=PYLAX~~PjXP-m!ik@=z=|^p%!(>_gZz(x@ zLnvRwH3;9MZ#HXSV8O5mM6>T;OxzlTl-#=OLjFJlW9h!-8HD^b2D8+HsU{o2i+5=? zpQ>vjnb0hhA5jG-+!dXK$Ao48{@tM&RWGGLQbb6ctgUuKia<_O^OqChzqK1(m;$#J z{tr$hr6O{N`zkf~5YEqV1xr>R>O69jQIP8I+PDU2S03=}=f!6RST2sW9}bT8kpgWQPb5Al>zIj5Y1_>yAh501{*HlJU) zczP+ww3IRf7)SQj7kT=7@ejAEyZ1^pG~dhwcpfr7e97sd!bKVVZBBF}e9k4B5MmoX z*B1?46TFV6@v1&EqkGgJ;}JV-gAL%z2?M<;c~o5w7Nmsb?)DZ>hHeq-jCuv3l5=j< zJ$w_?)NAy8p`cN*vs5U;$TrU@GNjaUhslpS0?Q~R*0Da7qP6($XA97F-pstpz4deM zcQd4%rNCxqBR%w^)68($^LV{cUD7%+wM5C;sEVp?^6o)Fs}s#_(VVc3AQ|nIp;JKY z;gf*SfZEN*FEvH;s+lGcT@ecjTPr){^fqVbQNYPoKGn6#+Cu>eK4CLVO@XY9@_p*X z24be6q#z4(F@$EVjRU1wGf}Pk#^6*#nP2Q=W8=akSFZ;{a;oC(xaZ-stC}g_?Ft{( zF5476yD8I2xPPr9kKe$}Yu}D2Fa8lQ48gvR+LrcG@6!#W@sC zO{U4THaw1*%R}fp;Kjc?P|HO{cF`;lfIaS)1sE@@1^zg`T1oB##Knc>CRH)BD09&g zw>*v7nhIou83~ad5~gp2r5Tn?!%Fa+T?qyKx#;8JnGF_U8=lE(;B{8L6#BEul7bgp za?b0_9}9C*e5`douk_>V4Yr=(RQNQ_!ex7LP<8n$)*v_(HVKjF_Cj?#A2wHmA3W*@ zAe?O0F{d6hQLDGMc&eZ~A5{5%zQN&?;$`bz7iU?rB#&U0Kl7m3zGMtaC&XI|S^H%b zBv!v_(S{7ggtzul4dn4D7kfpb4&Qms}me*ENj(24F9t>v0u2AI+F;HKt zLxIzs(*-Jo!oxD9akZ?iJa8@=ExE|xvK4<;NXL__m(aZT*y0?o8lF@^&NzlinBp4n zfKrpF91?p^P4R)vdFGf>5stOLxzB478N1qaF>X{45ENnFF+9IKHY^l zwW8U){4-l{tF|@viWP+nJRO((D#op9V-UbCe2j>eLsc6>s8pMoE>FwCKJP3y$4gky6 z^@^mmKq&{LNaJ1&8=IWU%M4u~RdFI&JBOXmz0M&FDP#A-sz1M~(-A+Hg-;JDnT$UP zlo`jcd6?^`L4*ZM)6>#bQ+$`IX`B+|g~vQ(%?QNGp2^(q2u< zbIwC}ZsaH8;*gQts+ZiV5EVsYAX)qO=-Tp)=0)G~m-r@b-PDEU+CRh>?4>v6)0d~c z*yR&tPeVmDhz{C4>LEyN!3xwC;L{crPsLU!dtZR!A`(*laQuXf&?b6(No4}id6J5K zt>}2iD~iEyk&y3T81sIGX?(W{xwjrVWod7 z;ByeMd^O>J_TjW0We>&@ z|NKJf1^fBQByT}x&TUJe3y2Y*;|@qZ*GnM1EAbi$Y!;0!IwR9Rz^);t5d3nT`yWRY zLT@7#1qP-eR(2*E_RT;U`nz4qEeH-DWrvocDHqLv!%xk^S)<9tOh(#SMQD#0=yHml zO&uXBr#}_7k^TNzrWw#`E8|<#Hq*t>F_|e;DV(}bXajgfP9j?RnaQ#^JX(rmv1Pmv z6{70f`g;tj`k0S3rB+9N<`jW*22*H%aYgTk+QM7ls?o*Y1_sKst0Ca-14se?yZ-kM zR$jzlIIYtI_?*GE4Mi>;ZvMe{&VvWr*q2AYwcU*z_s^RH{26fgTL7`AJnr9|?=~dZ zG7=Gf23I6DV6_F`K^NorNOr&I(m3|-U~I|u;8NI~+5@ROScaxOmRmmH&*Cb+BiWdR z<`O*p*B>k|VDPq!k7bUJv>)EGB6yc+JYy>3FCs};9wXz#2<00_;GEy0iufZu0RJct z0~3-YNuAG(Oam!Gx;o6=0);hx;$fE%-KY{s4igeCxxmoFLtq$465V9gkly%wwh5cBmoU=?MdnY znl9baRkxy`CA-ZhneU#a;wdz%ObF={B@s9G9~l}Te0qR3tki1!@9KKn;H-2{FE$1# zD+~ptY*jFeQ?(J)T}7?XigqsoD|`N_fIki1exk2YIBB>T>_TVwHQ`{5oX;|7vieaB z`ts7Tgnl0}p5k&-Z%e}3_%wHpDg6^yQpf?8oBPQVJsL(ien~SAT4=9^%idWGX1|-M z9B&w7Tb2@vSbc@yVLBnfQ)PIK(004cT=G`q^R3QNEonNMv?C>r`3g`+q$Okrey1As zmF)~Xr7?g|&v!0$D*v-%h_CavFJ+J2P=F}KfAuBZr}Ky^t@SW)=Yf!(8rT4QdhTw+hOC| zHbGM0LN2sb>AvqI5lblJ4N}6bNmyfqmux#H=`Po7bp}-Rn`&L5K0&qzd}S-H_Q}JH z^BOsz8PB8O<4=AL|1rsZT|Ed zD&Tjt_VwO-_lOvRh)%zg@NK;NM8pX6b~iK-4zDZHFzB{iJ`k9gwI2e__i2x0k@JXUo49t;elUaL)bO=v8d# zy~%c!F?-N%e}kImW@OWu%wfOvJwJm+RB%JdiWUb+GeI-I`F!)w!UH`LGSMRZOiLZo zu?O;@|KgdMF7fu-ueHW=IA+HA0LS^%{>y*Vg3*BOUuXPI#6`SFtpMTEDwXN&gLL%U z2`o}2o7Mj`Xb&f_K_|B^99wqxJ{p7liU;9Z-(Y2pzSzT?4TfaF!F*JW_K@(T44?)7 zTL4u{gXYnMNF`fTw8KD#6wKPwjyOedoxk;F;{j;S6vp4WVTsWm@jC_ZRFI2Jzi1BY zFHZZjjS6#*04dF%6>*P1FsMN9&iyY)#}Ka&4`oBF%TPo3IOzHN;Ib!2_5D<8mMGgQ zJXsP_&1ol$!CInI?L5 zf(KcIa8q{w&vqnz*>#8)NZa3Yh-!s+9mg|tQ83bP6kH9d9tBfz)XqkM_R*tw-!sRl zL0wRc0-gV#j|7hkjvhIz-R(`)JkuAH0A2qIzvm${D>@S|V&}iE@pa;LFagsAt;5Kb zaBXWX=y;~k>n;w8%o(fWvj|nUU$y*Sypq88?w8Pz?qBDvS#Bi^d*IVG@xezMduaP+ z`|YrCx@pVuGq`3HSZm31vu%Vl{Qq|nrumul9W;8mT5Lkip8)Y@4aNHV?w<01&lqU< zBO$AG`fdX*zom)V8Aw4x&i=}tVfJip&!PVze~QDLlB)+oGO^Om9~eq{Zfe*+C9Fl> zrN=L8)K-yn;GbqG21ho_lUqAju!ByI4+#8w;rP|z>0U9U^tRpD4NKS5AAl$=XuKb- zPaATEKe8}G_JP7Z9o19iCnM-Qc?g0KY`Nz`?VLqCL4Nl;JNlyg23t772eiz8PzsG!fUH#0`=b%s1{M-*RE`<<_;|3AjwJDlqNj~^Eq z*>XZw*$3HsCtKD*lvR}N*ej}IZ^`L$^Zne9$Mf-)9zLZIJMt;^TE}Z*Kf5Vir}&I^ONqZH@;2f+V`(6hH~dEO<;EL~ z78esc{}z?P;^FN!^u^SIG+q3FAL6-OOFSwHmxy59KBHA!gtWVp!DHh;o!}C`UPr&h zIGN9!WG+>B;Ae>XW7n@1x@+J{FK!!J6dn}oJs4Qsso-`Kz&-Ba-b5APXE;zPt46v-yF!LTVgzDObxumc%P_DM ztJATH&dcdpBSpzk(Y4rSb7~e8xnA{G$5-iIF=#WdQ?hdDnTAY zL(h@~rk0vER4kVy`g7+2_0QUIA1Q|Psqc-0an?kzTddS%4`#Su{MwwddQi2ZPV`-i zSrFTerdYx*fT0AA)hmp6OKpRlW0ND`pzWG?-JsM9nq&jE{PVAxKAEJH^$F)u_id>k zO{cIYX%jMu>kuZZvIScCwgY&7b|vxx-p~0L-aoq7@ta@3`zft|Mjh(*wxFRRYB1^$ zG8*2kY|tyR0Te~{K(I6QG^z(ZIf*tQ8Iy3!%VL4vSpb_jdM#j5O~`kCyuRp4KcbpM;P zb?*f-4OJ^FeR2SrUhm;3y6()d_$vwR$7mq?fufpg8G!oNXoIPP%f*&+5GR-6{{Dmv zN1+%;v&0h_edw;SyzBK?S8y)i;VB@5iF=stNFv@m57gT_4CxtTEiLl+@R| zZB2{(Ai>I!CXsB0@jiZLQFK4E1UmD+WXVQTPn#-+tYv}efj}b)@L#WK-TlL%m6!%s zDgc<~2F!UC1PYlh`zcuG&_7mYYzdQmS@OaXR_`)@BQtHPzk_BMut6V21=WE6hF(Fi z)M*!f=+!6tzcJ}s8~~HnLt)Y(y<Msi3y5f6}A`Q$AxKt2tzI{rqQ@h|%J+VrXLB4Y$$+K*yGPO6$ zha_S{598byBztdV+__|SJrLC_{6ZbEKt2e(QvQweBeJys&_AMBT2vz+=~@sL)diqF z<;Ed9#}0PPvAfkzNn&uVF$=PMFgwo#Z%g*Rtoy|9RPriWi0eaTOkX%2%1KvzG#e>r zyx+O8hNimc{p`RIYnhrXq$bh?AU|-?pDzVn zLGLitHGQ^aAY}vd`6Pv6&6Cd=!o$u|#EB)OLG<&>brWYX98tq42QiU`S!nF?@SEmeV^l2eH=) zI)Zazii?IMb?FNijgxfIv>U@0p|6V_N&X87PG(w_f_&ySZqTb$I-qVm0tUUq9ad<5 zN~Z4zrJ%M(3^7_N<55xc^E`As+E^5dFE_@fJ;Lh0a)=qLf49qf|DSAT8YcH(>BSmL1Sd%)Ot3F@tV z+#y1$jZ+q+W&YG(!%2RVYuf5=FmX%N)fu=BeT@rKQ#<%UR#Ll+M8H7Xk+!<*3-$+ z%p-YwV*saRq4XY++j(0h(e@9br4Cp=yCY+J+W&)Sg=GC%t_1arfmY*sd zse2|@7m?5xok?8TP0+3?B0X8=oj|G$>>)pv1vcvM%>skGYu8aSIN)5EG) z5VZxNizkNRn*Tko{-J|*KB(toyis!I`Htz^Lx`$U;-6jbx1YoN8TYs3{p5J$MDY`` z>}2ovdm%)3(C&D@7ss(>Pt!M|9at|(#H}#byiss1%$D_JcYRM@<)A<6P$^iDSUST5 zjV#FZVaO$4_;PssZi|;d6N7%}C2)U)-Qra#r|)*oxbGe@LGuAgG);*IB+-#zfDQu2 zlu4SOTN76cz*B16iE4JR~)$p_aFxA&H8^x_ib-M*r!pvO61P4 zFEYf}MnJKa-v2@c{n#}Ouvy!Y0i2%RhunXb#o-~Bb{hJZFRqVJ+jmzkshcYORkve8 zFa3*kz<4wy-uCFyWh3au(@E10hOeM5)KNhHin>O~p5LkLkJ}VjPSc>ya{>##yV=mn z-_W=X6)ip39Rlli0aP*SJQE09Aag0Gd2kPB0J;)Kj$Re*!Ie&GXF3*QUkd55|FVjE z#2B0=&EvIhxrp5c(?7cl=hes0ZSHitLA6#^#D$fB&@Xuo#;mm@cC2E+FFz7_i2um* z>r)e^W)yo5>n#QZ*XQ^1rg(w8Ct!1Jpf?L=@odngCGs+n@XIJ?(23 zG#v`)jZD3Iirk0WY|Elomat9>4BNjI4ps0Hd$<&_^8;*Jn&;7T1ZFV8uaLF$B?&?3 zrJ%36SQj7>{3wU*7k=-C3#OmtG+45?p#3MPDFA`jkIH<9x8%Tlc))zF*?|gs z3Gcw|iY#P@Wes`@`;n*szWmchXh}CHI~>>_YNH%){-&2HfU2{XiQqw`S7Me>#)z?>!|M5YVd{pV7hu(2->2K-@YT6gy%uS(j zTv1egM755*EO4o+%fkKiI})Bf!GROvQ;ObqivIKzwn^bk5}YF&l+M5=MtslmAPWI4 zCMe-RSrZ1Vxio}qcvOBU4SQtUI0BWE#${JB4@E~^5+*RqT`F0;$7IEO681PE#OEq) zsLxksIq6bqn1+p!%5OA{pXwh{c?4*MFhF9Y_>&mReu_Rs@k(JDbrhwq0yz-p`*g&g zh58wFe%6%a3EKgwVEt5d(b}(c#_zVnj zBuwO{3%5q|K?H7q?I!f+_nc>tb(#qcDo58KNDiLt$<2jeVts3UzYeSZZv{WyE`b9j z&U--|*n6)9rVAdO}x!?cNVIrYP0 z>KLBt&DPE2I8&_@;Y1vV2N|^lyZTn6YqfB}E)u)`PygZVfg7AX$ey6Y&wnq{3x_qH zcPPXT=}yhst%$`{#bDjd^KA{?o1MGrf{1wWVI$CJQ}jpaeYxjTChgQ^Q0cPsoAgkE zr^n35V(3$|mY#+f-Bezj`sd(FRVLQ3+)5L3?plouHf0yUi!FE4mcovQI(yzZ zIHi<0T%mbuM>&m&(ewEsyJ&vhtFnRn1490ftuC)v!QVk?EkP26qOV`kn0RITUaynX}jV{ntQcNs=G@{a?CLTXide=my3cV07Eel1@~4}pGZ zG;g3e?x`AQ*V{pa_F&7I?^P@q21#0uT@|4?{pjJh{t!}_CAH9GEjQKDw&E3TsfTQB zeWMuqhV9gJen-w=`=`+h;fPI)aD;%yi#RT(w#74>>7dh}vs0Sx?1AM@?ks_BPVQWR zQ$T5x+7|J~LcC$++v%CeS@O4IKf_A(U)>X5c#Wp>zYY9Ch}5R(rmi$ozX~NO3(r2@ z@Z!~faZ5?$$Pxu1Zj~4T})S251H{QgFauBq*1fS(A`JrPQZfbS@mtHiRU64-+a(vFZNh=5_Nak=KQZE7*ys} z)`=};^Pa9_j%@Sxt$XW>Cb(y{!j>uzN|$kHimJ-q@FSEeb03pZ3RUR)XPNB}SbtBe zG^8PWw)@O-q?XRGG{!DWNtT?Ia;gtZp@3BneCqL(7IU<6VGy~2y zsiu@?bcf8PnWiFXz!Z<^@rQ(Nk5=$qC&G@5ref;tCIy zifMJ`v8+T`OTNglFx-F4Rkh^|*f5EEmpK#`h`5RI(=>4An1+@^7u3zrD(L zc1K4-*+C>(D!CI}CvbG40`OOw#r;~z?4@WVlOy+u`460odZ=FP<>(mzJe2Z0xvHvX zH3uf*OvQLp#0J6YW=5yB8!j7|XwQW3p}+l&)hVXs{9~fxTj-uy)iw;JP#w;*mCR&S$!0fxU3Ppt@vsS!uV2wJ|g1Tfj z#6fnOTms&!2t{}1ggR1u%&`)$ej4TYM;fv76K{vRob#^~u9Ds}?UB}wT}H>e_uz|^D$leLD)YB7Eb*i#k9e8R6-0jbT+^3L~TbOi(MS{{UJST z?(xd~mPaCJPtgC-@HTAWMW7MFZ<3vocA6+8z`y@-h$L%5jHyd~^Agu^3g-~&=HZsF zHd5*CgE%k@eO>Wg=8+W({vk4~_r}uHOgGmGp4}3!V@_2nZry^JT??@g)X}1AlleHm z7LDFTHbz4#?QK@er1jdTb6MBuy2vCmiBPpkK8NCc+Y#=J4~&aHUy&k=+BxuS^Y4mp zs>!pK7xW6#i>7=JNoce^@^$POM?SqiCsU?e8C&+Xl5?J{j!%|tuq z`;jk~n(8KqCC2Et5Or`^SAQ5sdMnk&mbG|ARGChJLH)BdSr(N(;^7}# z7uIgo7bjwysZ_G_2Bu^`zo=cAOQs=lcPj+V^omwX*1;_bqUGK}3>)Xlf*OXuKdOAu zodLSjK95`~L{*vd4O;k5%rPxC)RXxB;aNmxM!nMlr!0+9mWAi4L zipW(K9$&-`UWR7&=ea4t0ShswLq%CA30N*scxTGBIHpE5gxZS)iomf+R%HslW{=Y zUK@Qc7W>{Key+-e`Kp&iPYdmPYzmnawS8i7@)38rSFS{mvNobE#=miY{`?A-gYQ** z`wiWXRbLSw^EKlVh6fqg8kLERuP`56ZoR5Pt6)%cnf*-PA4?364*j*<-KRGlk6(rF zSuqX!)b2ABb!|j^2i0+>@5aU`-E4_FDv>SmlZTzrN-UYpT>&>1f5{j086!OYQiV7i z@)$Wyp+u@faJ0r1EUrm(%Ksh#Q}5bqKICZ~4$!bU$RT;yWlvAz|p_ zYD>f+yz+54Ei>lrXVLAo$3hC!{n1IBn$VHi!_P4YM{{obF?`x=qKT!&qyb*RWDA%h ztr7=Dp=I@V6GT*F8BTku+x$fH#;3?or6CJyk~U{*tNfDd1H8oknhz#f)s5$25&@M0 zB*B5XDsKxj^qAL^-9ObzeS2U3@rKD~t*5btey??N;Ulr4Uztl)ek4j-bJy;a8F1BR zZ9r8I##fgTlqa)~=HLnZliBe=CxUe{`^yYGfdp)}^AP3BDPYG1j#@UzsKoCx7STM5 zP0&SXIEk{xb>+-E6)n6ce}9zrG<;yW!X-$UY3Q7^lPBWQBd)Hw2Lav2Z%Vdvf)Ty) z=^vJ4-qRnsCK6{M3iMOy7+^lT1m?3cqO*$jnJaS&R&{Kj@B-4Dc1n>>2&q935ijB#lPY2p(;3`7Yf1Df3hq zQ1VvK8F_=$W@C9GX#jYoNRGb5Ooqr^FqM0o5FwSC_p6#R!-Lo(LINdG;JXyTE|F3k zsL`X_HG}zB!w5|NI=yt379q$bR_Z9T_tM=%p-6p5_ib0F?>symtPCNx`Ev|fgds@4 zZYYU|dVFuy<&x`#i$?Cu8(ftO94awHE@6$)Lj$kMmCMfs31`p2^s^KZy>z&XO@L3$ z56|i=K+2$Wkyv5Q7TvxK^gJg38G(9S*&NV^)P4*`>QX_g2nspu+I+IiUhCdbWwPr( z0U~gecKs^bf?W{1emwX-yY!EOS~d6oV1F}T9FbOXTs5^=4T^TlDwkKYnF(By2eb*le^<%JmO zWUiEsQ>qe{AjTteH`6A>Iax0w24 zQQFdbArKnmR*9X%H2%~)w?lAF;S*(u1PwJwF!q4~_G@6Nh>*z<+1`8t$V9+UoLl29 zVmU5bqbmZjHLAO9WBisis(dYD{93?5_wD+_K-;fgivU46=9~fK^2$+``nHd<6j6v8 z`DvWz!W>ymHGoUH6HdM(0}YyIQ-8r z1my9MuYbHv5PL3(p*#Ps_07+4!d2DBK-58cuPv5Voj-8fREK&7vD;3;MdACk9qc;U zJOt%ndnhn2V~F`$G;)cI$w|z{mf1|iRJQl-lMyL$5skgi@MuC@*j`V#tL%%6F=zCs zP-G5wWN_Kt7a3r_ygaXgT)N0x;#T<(R#Dj*%c-(RxqcnC!HhThKv(J9zxKd=E#rpa zgBU2{e~tED>A+dGH#G78&A%o%1hw~eOzZqrUKFy-?uQ^w4`;ucoDj&2e6W#x(YU-Z z{9;W`7mFz2+nd3@8!7c*Mlzv69Wb5GNPB5@h~G3$dDq`+OF2u$G6S3c@C>ij?$y$~ z_;T{DETY#lOpU=)aSU{`r1FG_*XDCCKwAaYNfX!W(*|yA0Epf)*vGtD;1lC=s*g2{ zdQMbGfsC{$i5@v!#w*D?pLD`ZH13l#Z6d^}=(rN(lVdIa9g)6%6|;P(4CnP=9JE3p zL~vv~yHGQ8n%LiIrY!uH&Q^)QHX!EI#7h78PDtz9QO!cOJ)QdA<%SUeR*46P3@hhs z=x0n5cFg+*)JrOdze}0*GlFQux9fKXvp5(psezwy)T$nURr?cg_X&twq(B;DDukf4 z^4X3J;yE19X}U5W+-1F#y}G!QVB)Fw{A2$@PpEAI4Pd*C0s!NgBoK*EM=4d}qmJr_ zQ+l*y^EUt7iX{C<;$Y!}(fi}c!F?W&h+fNaBFnKh$n&Pp>4N9Ra$c&{DY4=+Z3KM4 zgg6VnClt*Huvpig&3XF$TdCZaal*tzS_c_5l3p|Y>o?*Z)k;Jh^|zd3c%m*zQYPc? ztd3@rzS1iZ@edXU*{o}5luTMA+Tx=CrNSp38oSXNdUyb|MzkFMq_-qi^2gHr(5KYf ziRrsW;<2)P+re_E+9H*Ql(Vjz07qj~bjvCkE%;JzBL|wQ&00Viy7|^|%hJ zK9NKDRX5P1Ic@Y@z#hsRao97BQx$J!4+i+3EPQ$741#XbcqnO^2kRJ&~jex7-!$2C~+ zJoZ$8P0o9U8q0i$C7+nR|L;8Ge^$?_%i#)3R`+2`@{55^Q-UxPLb?6RZ!d#&ug0`S5|kJ z>s16gJm9P6w)WMoPve|XbXUjmc59`|9^D_;f@PeSZ)Nf zy-1nM3n2v~Jkc>iy@KoD!(R#qLPhiaK&VI%=oBUXk4{mtU~_Kn)IXTCmD94A&Q$fN zr2HlVbx=tM|M>=~P9ZX|U^5QpFG2uC>A^7s33M=XWZxi`#dK*1KVR0yxN8 z=f}C0geUkEVTJuqZU-ZBL2LAHI{w1VwsP>#jY5LKaZ1Wa02fpZp}y$4IdM?F*-CWq zId#b3GoMz3=jQha)*&f4^OV>c?fbfX!=b>2P&|TT+Q4&NP$DIu3p)8y{Y{umR7Ct2 zisK7S9#cIm&$5YBY_cukt zzZ}`U!v7T`wb#dzXMilqh^bDW^A*VY$rF2aYDiXldg-3XwYG|1_@o9K)ng{|CJ0sY zVA-am7@@&5iL794R;;l)1D&zzo#)LP<1|Y*XWncuI#7K>P`z`Z=~B@tKB)?odXk^h zyymnHPN#BNWOfY1P|NYRe79ux!FD`m)~mbJO^{XdZI{HiciLAgX}`e}Q<99>3fa`O zUYoBdD^_L|iPa4-?h1C@vg?1cgAnYxY1fax^QW=92l_h$u&G3|(-MIS<~mHim=~IR zD>Wdjjd3ecy<@ko6)42H!oo1_9Qikc2ikl7KyzE^h{VOz{xcRB%-#HVDi{0oBdUP7NV%{*UNd7WnbzJtfm z2(Rp~AT&)U4cm4BPN>+VEu(3mSK->5Gs5Z^8Ug*M#!enYpElDr8e$PSsyC?H;IUlb ze5#5eVtIJIEWJpK8&~~AFfg{w$pyP?!IIs7ah1>p^vH1lf++N@$`HLh(K{CBJNj$_ z2LI@SJ+WlDx%_xQEwYdQG#zbl37J?EnpNunBbuMd=OkM_{WXd$HB2!f2Hj=)F>w6PZe{ z%pi8RcNbE78|V!Eb+ie7rN_KW+aBMCA~A#hjqbC_$KUw#0zi#ubQDRa~EJh~0}z zN-O^YP0|v&wO^;2%=>%_{V6I9CypH!$QZ{F-l6NiAI_hbnSzNg# zFZlMV+!E_)q7`6)g28PC)O1ewL}pOa-;q=4FwftWU)5#a_s-Ob@6m#ElrQw}i07(w zT8GK<5bA}+w<9j=X(4Hht?z*QDR$DJ$$QLReJEA#KTWoUZhXVvsauCRYcu|;aaB1R zIVQLVc_*Jbij}1#n2$YG#zkOdc@-teX?5zuvQMh|th_p9cg=SXBUe|Zy@qEWuQj`W z3AG4SDr3`3L;+}GEAfaupr&Tlp~PGoJTEJTi5$H=u`?=Lu4&io{Ncr&+OK~3h&ovF z$W-gb?7U4JFNTgN8()KW*@Jd`U$`MxJ_jpb0nEURVvS4^%GU`GyTj6iO7e~Eqa%1X ziIZ{)YgF6uQRAHnZ$Uv4LDBbS-VEnu8%;An(z@Ov_|Oc22J!-LMuSm`z!xyEbc~_Y znfN}B@%x^uGwlrneU`OaRVTpZx>U1HyAWV1e^k?VY#Q*qG_Sp$x^}O4Y^U(3M4YG{ zf0vR07UoNqvG1F+M>iW|aj{4?YZ$KL#n7NU0#bC5$rmurXzcYrc^+|oIAtooEXKvR zrzz<2Lbthl@cKvzxbHDquukUb-_EczunRB#D&9Muq0Er%S;(KQFG_ua>DwQ?2kv|{ z8T2Vw1I~hBmQl0H6MXpSeTEeVwM9_6>A#u1J_YH zRK&IUf@oQhsecRXj{Zkrw?I&N>S-wt1EHJ1i9u~SmWLhT!pC^>Ieg2&1%Jqw@oU>a!8v-^iUs!ydKH6UHxVsRf5-v&HfbEyl(Ar)jgO z+jkm5O^3|l9k*=8iZ(#NGPQ?KyhdDZ?~C91q)zMkRP1$e@P$!uk?s*;|}zWyEl7IQKi7xW$*o{0-S<(BB~ zi5nj8jay)nzNP!2g?6Ec=RYmqUw^Jx2|V%PEyehQMBUqQ7_wP6AU>c*AufuPCE=gT zC#JrCfHH9R6oTOz@R#CB%gpfx7heM$V$dNLW>{pM(JgV@GkilF_qlrcE|6_&v|Z?6 zzf^8F?=z6v8pED!{4hdNud>pIP<@G5a-XN1qTegU^meykTJ1HvFOTeEtcnmpeNFf> zgj`N<4!<lU9wV(R!CXZ>6`E ze5RF{aEM50kI2~;4T=+kNG;Ywm^sC=FK6sKWA(({H8xp?hoh2!N&(D%i16jvdIRBP z2i!0MCd}{zvtySgs{fLT$|7P&)-gq}_?gGe(75oRj+x*xd_2~i_nS5BS12INEseE4 z?EXsT(M_47YZNR*50~16kaxbf;s*2~WWOa2}qZa{e?>4 z0evCfWcC%5hJ8zbztR!b@Ug$rc3_iVNWi>4s-{7h7Z3ur>NBT_&f^A*1J)5w?koJsod=AHAkBD~N zbBbo_(Z|mf44K;*@{F~ore^6b z1RR=|&$C|u?cNc`6s18}Ywr9fn?Y~er-QH})@4KTaSm27C>YWK@H(|Vn9b) z^Fp4*4al>&Apns}>@C5{OOwPRF|?e#yA!ZSMc>}io!j&+`9C%d0mcM2&8bI~urWh! zqKO}~fi4P1btA_v3fqBIz7YGPp=Ww2*e-!j!=I#6U~{wvVUf%JWzr3=CBunJ(C`yT zhSndASbJ~k5$Y_k8~>a7BPIa<~sFW?1=q|As>dd{a&F##`&hO~)7`ojB^HxYyJ!EI*Vl z&xZ_93w~T4kG~>cZnze!NB9~+`rw_-eY-hcg=<*CJ+ycIjf*+nItu4;7xWIZwmFO2 zve;=G--e_dg2iOaZIQ>=$Xi4t!c@8x%hN%z;`=CaaT6dHHvw|7u{M=91*lubsIr9% z%2wf@vITVTf0r$k!WdXlN-X{cUzdTEY4S~!w}B1rLEBR&jJC~BbF`J>rcyCy;@7mcH9-f8CG#d ziqe#^wMkjh6V1ml(gg)PJz(_9jfh^+Sy_in^5pT_tXOMbr?fp=9!ToaG`sIM$8#`Kl(&3Nh>hxm5y+ELMLW^IU|L$O8vH$5{FI{x7%|Q12qJwq* z7D~_&wv%4+qa$pV$P}x#`u#I&Nsew`-sT$SfLYdO=e9Ka%a-v#ov|9U012mmtI@Xq z*OthK`1Tx>S563Q}~uIpv-5PnlF*!5ihd=TsDBPQ)S9!7PU*Vx$>-*blJ zz-)~;SC)tBQvJJCmmdr`Sdy#Pp_(s$esFa**>3#H!t;QFp8}Z*rfw|xSxQ>Amy>1MGh;ulDf~z* z6eiBeo3xt*hJDd#5>vQbFglYc(O~M;wA{R)2)- zYnXEJFP1gBf}4-7J`W7QOnSY0LrT6vE#%UgWTApSx1s(Etyx4svxot(BwJv)d#i{YvB6Op1Y#-+Ye<-*5F zupWX_)mVnF94p&X2!r(ZBC@(}U3Cs>Iv1v1&%2tPQnB|_{xS`UE6clEgf#J_rSA2g zF}LB66I*}l*i!2%3YAGxy; ze~Y7c{DRQ7U+yAU71`nny!m>OkiS;Tpy>59F9T<;T-hUQL~q#fE>1%vG?h zE}^Ag5o98Vzs3=uFmI|Mhm}JaMi^k&*x-KiB}cPqczlotWk0O7tKe7NWx{0LpI|4z z_hTT7<-P1cKOLL(RaoG@xbQ4qbN7Jf%@w8^QhSmgUzw5Mo_eK4kZZ-O|7B<{`EY3T zNjN(qzDPi>_Ru#sy5QCn*p2Pp9$+Zq7>xtM)baxy%Fq=r&9ymB!Noa1<$4O_g>`1M zdo{`~+|0iEV%&$i|9*!7bj7qb|51dLeRb*=H-Yw~+~$|POE-$)6u(HGhiuKYO7zOo z-wOzm++>*HRWN+8weGQ?{^BuRHf&Ps`oyxA zOh2ZEes#GsTyPiMWJ;`uoahJ*$4Os_{#+$M`7QXdXkSUZT>T&&uIWB1Il==z$afp6 zSVX$ue3j9jWc)ygI$og&NX>JTl*gXOZTA4m2eL!?1WypP!waS~pu_*{;ay8@buqp# z^Q`^p@I87wP}u8oI@mY<+faTms?TDIez@t1*e)MC9doqZ)vV)7jav-mc*}jjP&7ST z-9q{C`FkZ8kZATIxQNx*;iQPoFBo5(eV}quaxuB~=THyA8=4&UcOUe@$o1~Vs9Lqa zGAHM#A%Ui$h5NxUCW?z)cSy)Uf$eoFWlS{Fa&V2#i2L&TPhiB&UYR@nOR_y$!;#F2 z2Qz7JxaM-kUZobl{B(zKN> zPf&)VsthOGEHX_7LW}Bp_#K#3PV6IbL@zJWv6)&~=c!wc(7u;wmL&(WYpdUFJ+9ME zs&3lQFAZY3^@qaGY(+t_A=yL!S>59S1%ddVP00T>9uetjuOn0nf1LoSXX%`TXXjZD z+lSTz)=mxJj52H=TNt_^wXyZ+4p`tz2QKkwg8c!I>jg>n3F=PyKmDR;|S0!kbH7)Ed3pb&1e<~QrQ926*bM{^S6*GOD^;nz9yIY?Zr`CkJ6Yp;mM zB%h+gE!saf+q{Z|%d$dv(7E9*;<17SzkAEcpA^P50~-)a4Du-T&Ltm1)Z}7-90ubm zCYSl$u#TZ_eWuKHc5{W1{Vv^Sp&jn}L$K4Uy~w^0JL^(-7n*z<>q-1|IDzrZMN*9?5iXEazp2aGgqkwuW|WEB4$xIKU-ZWo#DW^df{#Z zNICMUE{^GspG6xY3w$xwLq4D9e+ut*lIHLrK76sh5(Fx23s)`70A5B?P|)i{j<_9E zfFc0wFh{yrbm!gnGd`@`Px%ZG+7AHMM#b!ZLUyGW#3~rd+ltTEZKx`HL6`VHL-s8r zIonY6q0!0eMEpefw&M4!XXXgdB9iOxsr&>8t-32Me-Y1EmXyj8n9gS|Ac4PRN&Xtn z#U7Lo5`7H>$Vo;O>NO+2KdK68w@-JfA+>Ew{2u~K)&X@5>`3~{xGcxO8go*lyX?*< zF@G9qpYRyG^`TKn`};;45o}pR&0UHSUWFk7<+sxDUbc8_&hy?C&{1Z1_6c+Odj+kI zFLbX*(gn8FGQmq7{5s6=A|k!rrR|pSUsAwh>6gpiWjtk-Sef~fk34zf9efjPHWVGF z#Ayt^MoC-pQW?e1ZbWv>*=OA~CtZFg=r(20-#W!TL=E^70GdTHe-Rhd-`_70kvRGf zN7{2;OUByDZo8;uWTVw6vv#5Xs>^%1qnclwdq_7O!USD90yz=cq`o5*sRZ;QE621F z(24(H;i&x0!YTL${}F`XoXT2~kk4_D%7i0skPsB5N@Z=Q@}U1Xiz)+pWNY2#clVZV z8=0($y4Df%2v^C%sMS^Msf9Y@`0m71gk5|0k_(;b<@m){04A=R`U@3bQuwPSo`z4_ zy^nq2tU=JIuZk~vA6xTtinKXDv1~KQY$Nu^eixI6&DPu=e_fcRE3H83g>sHBqCJD|t98OJo+myj1?Uy(n3THiN)5ENuso0h1)`RopNVQXHK!!L7@XYcH3XjM0S z9#w_8D{+_BY2H6;cP-}shTHahinvDTjDz1GLEka*m)pq=(TPaX#sd+=$!&XGTZt&& zlX`I<7RM`QI|ZC`58H^FP9!;oO%erv%1z8Nd3Mbh-}m-3!=w^)SC%{UZhdXQ|AqI= zJ>$JR^X%f?D}vn5Eq1Xw&fKN3?*6*|Ozw;*X~yxUu`5B`_fqT>@9rJJ{@ac&>t^!p zm0#K4({}}4dn##%+5mB;0~xW8nzx2oxJzloWUVlA&d7XLRqyQOyfvWFG~Tx=&3{~Vg%RV zHXWsVFVx@s`YnD8_h&T}b9h}1G8TPDID-u=Z^DWTD_$Xcb~BJr;$SR>kf_ECWM&16 zZYBj1YU!B~O-_{YN{G^-RjZj5D$&KwraYQK@@Rot5UX>V9m>syyLW>P*PZw-77Wrn zrXnN9Q*W^@GGVzIcr93xO_?$kp*4|ukTtrfy+~qz{>cuS4sM5NO7(9~r9sK^SaB`A z7;8mJ2|^%D_G9B24{$L%;cBo3?@>G+T=9HpkEjmBxe?%U9+;6pJ(QV-&hAzY3im7G5_RE#d~Uh30CC3+)<% z0Y>U0!8_%%ccSh@cm!wOW~2;LRK|*kikeL^?0wH16;&oA`Sb^|5^H!(?;Dw@rh^7q z%|6=jOMFqrkT;FG_K#v9OF%hn>t;e&l!?38`#VbKA9l)eRY6HW3Vxh##aRzX+mCA`>z-;+d7~)Zo7KN>|1O4=n2a(H8_+Sf_92Gk$_@ z6=dFCy|3AWNpvd`f_ip;e^^D_h7#91f?j#0ipuMrYMLL0=vmRQ1B*5A4YXkv)J^>M z4EKZL8k_jMa@6cYWwjczPE^uu{ovD(P6Y&xu7RTVQc7MBt}ODUtTwMZBo=aT5<)0Q z5?fNs)4m!Qq-^;;yp`tawW@ycGc_eoe!|Y6fXGK!4;y`8+G)Quv>SYbctb*F);n?K zT27Fqi(xs1H{_V$_4MBqVBY)bxn9^2Uj0c99ovIQ%{rN4rUR|BK`K_Vyriu;e=J0m zE9?2E_FMhz{N=QPqbkw_#BUe_@Z1&oAlP(yV($d{3`WW1=&S3-*qbAm#w6E*Zs*ha zwI7p9nilt5@#*i8)kb4}hckkfJw(q|y1Db7+Q;AGfi=lBueO|rP#<6hAfxV%r3R6) z09N4j%AjJM<_^E)rs0moiD*>uvuZIt`I)-GOAIgjd_@*n8I<&73(CT}5r2)wGDVYw z(^1pB*Ors0^#)zggdxvRm_k4z7t=75WjToBCzBdK{Y4ZkXA(4@3BGaCv5Ji}cEfC^6V4?BZ~=tr{KDE`89oe2Vd+GaPYG?Uts**gSqZ zO;n~(PMLIMlC15RGl?qn5io`dMLLFX58D;s@$4);qH(0ojc0OdXxW3rcT7+5QhDz$ zU2e2=q-R0XnmYFa?!tWu7M2IrAj&UX{+J4rTq7DUi4!4FiQIhvVS?K^@5~xQcH|kp zx?2g$U9ru~l%Tw125F|?_AN?l$c6SGa-q}Gx2_}7C??G)*+P!wth<-h^rg;jUwAS$ z@Z`l>!yo8Gw3l*3=HljDxSkPZLg(jKd4$gH$-P%pg(+e%E_da@H8P=~zhh__Uw~jz z6I;akQDCOrgILh8<5o=@Ge+NxWk(zVi^(@bkfz03_|seR%8QNlS$@{jq@D6hItGfG z$5gDu!Db9mAoFBqR+#HL7X)W!uFGlSZVbvWW(iR`wLWfEQnqJcTJNRcX1Ffzef=3G zw!D(}nT*mUBIFk+Ye0E?K$OXg-chHz{vi<0We+2lGcs>`BBm2Ffpbb+cxM%P9d=aA zan&xuH}ifbGplyCQeUFhSel|Hdij!kNM)B2?w^Oi3LXN)d6^OOksd*`bp{I}^h`0` z0o)~qKe|XODWZ)W9*pF4?T1p%SIeZ69!cJ*nDs$^=zng29J0W&|mv_z~pVk`(0H)=gv>5~P%mcVOo!We%hi80ta% z01;R#wS!OvL8#DR`L$yH&+#lER#f22fewpm zLmV5Mmt@6)Fc-CFDt>*Wmed6dYRtw@v3GqeE#HCWC<7{NXZ1XzaJ9!r<}l8{%q}yN zW*@n^B8x9GR@~|J-l7%6BM#S^+l$6~VFg-J7>a1ei734Jg7JN~mxL#y|NE238 zULT+e7va@xn_EAVSC%w++|U^oj?Q<8OBj^-=vQQB8g{QNW7Z5jJ2I0W)d7H_IG><9 z`9dzcLx9U>ljvD2WN-Sf4j_tNX?uzh6bU8VSWCq3&L*aTqav~o*`*ZHa%KMks11jT zQaTmyjBl~_Tw={dRYA%-xdn(BEiAm`o5ERM;BS660gRvtU}1f*N(DF6HY{bR zPyTOJU{#X)Pic(*M%_OoG+M>kF?N;^t$}|`MC3GcUAXtA|9Q{~S48@Nh~@V6GpEQ% z4b~{E=)rqgGJ@b*A*(N9aYU!-)&3`DadWwYk_H|$|!rgywKGuckXx+D#`KL3fnBtF0qm5UwU?M}W^+=Z$29VRWE6$|}U z7>{Tb)z;+NQJrmHMYfz8!XogZlrXYH>LVDk#QkpitKN+n{M#8|#7QNDVYcENE?x=$!Y|?icw32l!KXjPPi`WZ+}C!78v| zJ|j32A$Ur-G>_;(?Lquid|qwLamAF>Dk?Xgu5P!|+3_#D%G`6)+yQ;yZdBAu_w&lL zpAPCu?~@qN@&;d1Mioyk&_%LeeI652B9T)iwWX@rhm*7rljIBXwGu0r*2~ImF3FWr z%gB`@&TmAyPhMX%0hyO=dy^qfh$MZyph8!AZ~3L(-U$1ey#T=ggeEdMB9jiNvpwa(4=|Lir9K_`)Q7-&82KwB>GrQX568#0k>u{ga`GZPHC_BM z|6gBU6%bdmY>m6SI|O%kcXxLS5ZnU{?l8a*B)EI9V8LC3TL|uM!S$bf=iYnHy$}Dx z%tO!g%Ky)_h|kLhQH>XA7^?;2ZrJUUPbPid*n3Q ze`yU>s+P^d^tJ_74vTQK|GqH+vccLP9JW2<3qWS*N+Eo?WeXTHFTjQ=8;!|^P!2@? zt9<*ugQq+jJmsqYHRTgxC$Rq$=b*9qhsbI0tjcVGZ(5C*KXCC=Qr`;kr3-&W7lXy_ zf6jJl=;vE@G`}K_D4G&LH^;>c0pLGX6=75g*t3B&G*MhW=+ZOn70=8vMW=#+d<1gBOG$9QGSQE~SuYxz2lKe{&egR8D zrGF$LSm*tR7gtdQt1R>F*ngx)iso}JD7Cr??AUuLnQ@@gAMHAO5+WI-$IZ70d$we1 zC&K{B|G{V&e6ZB`DGO!_I0AE<`gW*~4UWX(ig8w}qU6E1<^BBP)7kJLGf*1%WY`W( zFxj7RGes4VzN6E^3j4xj@5dV@)~2OCv6cuUPOr&5zP6xuj};AOZCoT=q~h2AUS&pI zcV4(3@#%Lo+MmC(s8_-dq#2arThSf$^k5p3NOzX5vht2h(0FR;5F?IQ8>@Yi;0yGjgCB`h-{aG9T4$fY-dVZAk!9I!)e1}=A?Obrby zi%tlSp{yRRCSZ$^Xz75+CHYh!Ss%jRp)Q-u?=iH&28IcSa1d@K$`YDPSdtE5X9x{Z zBt~*0V#ey_#G)B-2+75S2*1Yx1)^$CME{e*kPE83i>JxAu9LQ|?Jsb1rq$ z1_@a^RTe_3LF83lz~k@dK3$J2En(MuQcN^_epQA7*6)e9=q5=deO7-%-Wh{;$wL%8 zQ7LeIKTT+UY!rdQ=Ph_>?X}=I}_eK1Y{L zj=$j^KWgAW;gU=*MV|wL0=KcBFyRM(8Zf+e_KD6+E%kwM1{y`~y&qBTioZzfI1;jfit`3&NMLxaYvT}t}ip zh__dN3s6&Z_^~xjP{|5nBRPOn~8Kfyc<0h}ZZ_e(XC*cy9464zM8XJFEs!dcq;+QSz&(YNKzO-hzE)p+6yWWqNO+Kg4jQ zp0WC^J%OYH071IWRWK}Kc3SQM7RHkhH;zZi7qxSs4_+jq4_?9^eEc?%x$Z;5e$iz~ zD+vUHv-UO7hdw4yn|To(5PY>{a5YmeG3ut{x&<v*7$7iFMk_vSH zfD>neg+l0jDBDKs#M6?JeY4xnj!$AQ7v4|E+y{TT7&%dnE$S(u?~B4-6Ny0HgJX=4 z1L*BLK*8IB&RA3h+tn>g^`tqa7hK#WWCyL;X?`1WPTcriuIba}Ag-(w*a=~Pp_-bO zaMeR6^{>a0ltTY~A*g|)D#aF^n$7@nW~LZCq0HuzTN39bIxbIl^z{k2S9H zjVu?-eIr{UkZ`A73TrrG2QsOBZVkmWz>X-n-G5nByTdaaY+4Rh!w>0d!<2U>1R~xo zzlVq!vfbv}ISE|8-`vZN`?-8ySpH2a)c5Qc_cV0%WT;0Jyr@AoGCfgI0*(i~LX2F+ zYGsJ^8kCf_ss|ApB$l&!3%wwQ4Wn4)kuBK&vdJcxK_`5SkXadw4rkANi#ie54?Se} zN`kSgf#zTQvAx}t2uEoh$qu7*XIrOE=pTK4P%uodJs(v^_!PZ|_Jp{H7OGC(cM3H% zZn7AV+Kz*NT-G|0vjy&1ZyytvaRBRWJT#-B_WO`>`4A>evOsWG*1iZ_)n6fkGcbW`B6sYM(*a+r&sp z&q#3?r8nEUB=EdnY=w;9AOrm|Wu@5acfBmwad%Tt|BikQHaESa`jOs`0l<2r=9Vnn zf3}Q2dXkXKo!B=c(lP66dX3UTCUfn-g9Oeh+x5qDhs9vY=Qgz@NAG5G2ph?cLZeeH zKVVP&MPTjRn~OnB|yh#J)-&cymsOpV&zm*PHqo}k9Et1=*T1H)Ga0{C|ea^Do~kh3s7gn z!ml7(xP;h|8-*;+#n(Z%aYM6mn^?GlInnqQ@z**cH@O9pg@ccVo52R+z!ETNUf=;2 zw+l&9osH4fIzOyi4%p(5rqIXY3yT;uxReWh-T+ujT1JyAi~FJk-bhIAQ6T)3Krn%x z5UohzA=hCY6p4}b2JeHhTX6jRt{%%VM4a$J^3xm)1H#Fr9k~+6DiI;&VSTD6)lk^u zux7r9+B{dUY~SNX4rx)b#IpD-ii@2A{l|Si>W>Uvp-4r=C1(jJzpNNO!q`I7UekXp z348+R$Nu;ZuP&={Qd3l3flIE0Se>@}q96Mt3oMyWUs=L$o`nccXpk7O|EpLm;#Q$7 zxLO1(py5|ADV;*>B2W$C%d!xNTQSPQhau)1qU*q^*#a*8aMaMb-SA0>`@X*c3RtWl z7{SHW{RINS$So6>H(I{P-*&(Qcumz#P;YvLuI8pCJ z$Xq;Wj>#Jw_66I5iS-K5M(-4fz%5Ma@s~!MlGede7GV#)FyTL$LZj;>FusP>{ea8B zZ3Y{Q69a2Dd^WnR6*{8P-?a(sf@X%W7t4RZ=(BC*;RIvREB-NOC@zU%QknuQ5vXJM znHce)`;?vZUK!FJ=ZGPWF9LpycfOR>%2ffor7|doIKE~ocUCBCd z?5VLlAKQng&oXMTJkN*Ke69PWhd|tsE|vrP@?kMN{;wdzY93+1;Qa>yiZKKWWML+! zX+i$A@Xk%iY%DTp<#bJ%<%YM2X+q|Jzh+Uu)zeuAsazAW@V@~7T>WnVsGK08`rxj@ z5D~KUU@$GhD7fJe^ zx>a=B!tTlQx&j_=;@$v&$A>K-xft+0Px$DuOf9eL@SS>;XQ=b}VGrQa9r)*W)P`tK z*YhI)@UoQcjOmMdX1Ah9F^Vj9NV^7-A3W8YnVgjdLqU=^fg#0pNv)P9p(4Nqr`CW z?(LgE^1B?Qac^@D0E2ppOnzM0Y++m3*Oap%?@bNa-ztN3v8A^m;esDpMt`)@(6``q z6W%zuqbrZ+h5Pcx*6OHQhQX33YP|$+yM;sXPbt*vZ!f%e}x0(E&Nj z^Go5sA@{!5DPDLqP!*j<9d<+fKI54@qUxXt;kTbOe1MbN1e8x8!sU!%(0r&sG(}2G zz9i(Hh!;R4da|5amr+PzSHNue?nNZ|A*{+n5&na)T-m8f)Zk|D!C?|}|HvM z1&V_()CJuF=T_S*cn!K#CTr@mniJ1Ag}w+aRt8HYWQe=jmm2+`^Dnw6TnoefS{wQP)9D@he-rwF8dU}XR9{aIP{az_sC-3FT}Nlf zN(tr^wK0)*SJm`#m@>^pO#8$btgnDJ`u23zW?x!XcJ*UX2hsbF%Etc5xx~a;t(fZY z=zZx4`k5bg%#rX{?t{Q*Uw$!{LcmMl^El_%oBs2cR-xttTkKb-r^BV^?zg@374MCw z^io2){H;}&!gPyPK($?C(EDt*_v`mgZad$DiZj)A$hXs6yVnv&Z=l1>5r5plA1Ch> z(#hn-y7Tp-qCkJa)2zz1?%c0`^1pcgbmI$te;wbN1+D}McPVXHwX{oC7m1AwDt24l z#>i}L9MxT{bOjQXKHqWAeT&feX3NAjIVY+Vk8pmnKB=3A`2sxD^dFpFHz**Ft_F1HfC!oxG6X@&>xc3ca9;?ao{5ePGk8#2_ z&K$~zvzr&Szf!dELF)74sxYdJhp^(Mu{5?qSna206-zM@=fbx64U(+R)ud50(=I-^ zJcyPjfTPr<5I{fEfa~FYW>;6^0O)+ZEPQ4Pl=?;X?&V8j$~(hIWCL)lCC}>rGY+w; zQd*(?!v&ZR`IeWBmNGlD`~A7VwATODQdH$yd-mx7lK?fib1YGVH6E)|n0I_@fq82C zBVMCahD9uvC5gB;4>T1Mzg2LO)5o71JBmEiIO#nu7^WyL#i zbd^4INkc;rH}g4!uNvN^g!~8an$%QI<`3=Sjj0SqL#ad>vx%$%mF-ud*e?yb=NCWj z1VcojNRHTqe(enyLiFEjK2VfoA!IDKhBfJ!$`6@! zhRDJf>GcccRIBb81D3*7bwF>u>IHa)Tb~G;`dNhCbi9WkmTHwV{3r#Mp+8EzQOPWm zYz(wP$?^C^+s|9{B`@XNZ~{{-V>MPQerP)l+W-OdCYNmBnl7H^j~EL0L@lMh3Pr0V zJHyS0Mk-1dfeF-6gFm^09 zS^$%rwu&v@uKS4*oKCh4!yStwVsrMysI3z${EuE;%HMVw2DEotSrZJ8`qQX)h)bU% ze)q!Du1l+%dLzRYC|IxuO~7b3QpnLY(poI3?kBRprH!bLB}wq58WtQ|NGclN{IFn2~NPKLiPsjlQ`@Ldgq zf8?E~e{kffLAXE)3n9^0rZVR7>(GLC8A54^o3v_*i!fBG#QOqriP|XFcS&_JT?8yG z5AIY2!?ALKu1m18-V$|c=O9eV5hcs&ZC;cP{!*EB&EyT`gyFn4%^eh2|1KLA+ux7K!H=vo9ibTSsBg< z?RL}(#?Z5=L=ptlt8`C^7GxB|%7CIjrwB`EfusT53ZC7`ChJc>TyZXS%x#NYQ5)-H z`9EkgVTDP0Z@<7vVGU!{%SL)$q-ZTa5-oF3ge!zAb>UA#-3!~v#UNtCt`K*IP$Ln? zx>!4JW#G04BhkW1oHIOIjgaJ-7co9A8 zy|uM@Z2fT0|CIGMTuA{Ct?|xPtOK>8?0ue?%Yi&m+bBuE~q!z`|QQ z_1ri^5v&EWF&|6-k%U32!7x4!*O7jgf&;Bpcoe` zH&e)2zWiJb!n)JzVC{QbDcJRKh7u{gE!rN|bv{6%@{?7VEE)+)6OK*Emc!&-M7#CY zekmTmMG5l`FQPJL^~Kq8A1xZ`(j!rvmeM{`r>hirS#|-Ri1NA(Z|(enATj>3YEvWJ zj21}sQpukxFQ4Xs7eUtlSbqiLX(5N!aJmu750!&8w)O(QG$8R=6wg;`UQ?tvPCJhs zV9$vBdZdLk+;(Y(X=|Cxsfv_n!YP~PZgrL2tvNYBjmz>CStu(^f!2h^OR;0u{lDnju9^!C-_!zp|@M8`wZfTAqeLbSx{Ls>5y1Y^!&3O zSBEKG`dZ1+oA3)fYo?^!r*`O7eO-L~FMKm4XOYf61jTxWzjQw)tFB}%+`q#nku@TB zEWjc18Mdn$V?jVHgO2)C0p`dw;#kYe#xzbns{s0f9m8ydoe zEDH}TTKW?zud{{yu2(t#>{d7e{8pDfpC=QcJVL#lpkC9e^$RR)5FTDXw%78#*bV2z z=@Csv^u=~79icufoS=4B7DRS`e?RFqMvmw^m|i0Pu|AEBcHg3)2`F!rJJXU(hkC6f zPs)Sp6{U?|GH<~-Mz2)VE0@#h5A4(g4SN_IYX!VTdgO#a0tj~e4cRY)H}1utk69LX zU&nq=2eIrrcH=pB|6Vx!6E$T9>N{JaSsD1+t@AWLq|Sc`;rYubOtd~NK5K7G}5X>`+79af){Yq?>$7X!w+xDwq{PUO75h&zBlUCBDjmE{tX6+5;kjWeEB0?AQ6&*hcGf|WeuP5t$p^< zLu~(uv*0--D&(>SI`IB=%}b-QwEqynw}n1OKbDE?MuP_@iq?xBc)?^*A4xvl3O;!* zy|4R3M^MKH2XK7Y5-5hame}Wf%UF=49!5b@Iy1|YEAg6hu(jfbF{o0q``8xPEE6VWCe9z50C1h6oi|cYIJZ2fZKz~@%7l{v6~zzyMcW%X$gaLlYZ4bi+m&R z#T?LV1Uz^{uSbZR9Htnj(4aqf$#v&Gq_j+vv~jci-GV}cTU^g-Hwuse)}RKq?>YzBFVJBPPx&pt(@wP*ubgQ zTsCpaN%-@MK-r7tUb2T&8$xR5v${q1@*+s#&$5MM$#y+QXF-{VwR2Ib2a5O3w|YV@ zcfg78sHS)PZtgL%Qpt-bI`tL)UM6Z_b^e7jgc=0|)-Sd_vy@%-4#Y9#D&u(oOlF5A%LbrxmdJQ8^62Q14U&OKjd&(8Q-F$gL0Fu7853T&O&eSdTt zZzNZW5TNF@uuY7&+=n7G31>+|8y=MpM^%}fCTg0LRU-LsfS$NT52PARt)v%_vdD!)gnS_n#75xzWii@nj$HYyH$OXr`hCKmx@tb zI0ftUbf|iBPuW2f^rFV#IFj?PN=mZl8Sq@_mVb6F{QZ-hJ|r9>B#n(D)3gj(v8&M~ z>tu*|Sk-@(4=7Jf2*EvOh>#GuD+LI*Sbm;1H^!i9MPvR-5Ys}_=)zi)QeZ`OYU?4K z4ViK9rB8PemGabr0wXk)HRS<&-z5*3qYJ?BjJ60>Jr!XuA{^+G8UHET3X9kTg*q9X zrlJ4FZ4qN)*$40Th?;T!#UpU5NxZFDOZ##{4c9Hu>)}BuctOJ zF%#fFia2y0c=qiufP$;!qI+D7vu6SGQMakj41A9G&WnV*@vr|Bv- z>YB{hxn17UdhM+2{^7!Tt$;OZ`eHPUN~Q&9s~H}GO*Xlke&@dHzfa+z=@BODYE$@g zt+M|{5Hn@YAYHw0;aS<{wFIbV3KNPf5dLV23B7mU=*6I`APC-hV4p6-ZF5lUdzF%q zGrLtR-yuw=B~4vO72|C6hnk&QsX<59FO#EO&at#wkf&#UZ^rOAR75#2^o{pd<0jb| z5^)cuTu`4fx7P9 zU}5qvS0P%2voY3Lztgv}!H>sHViEO`Lurg2!HCz#k!Z`sUb#69Y;(N9$zNDlV|d}p zv?gpD1+REtd(CQOjZuimmRQDN{6;(Vet1hG|Skw z$c;0df}JW!t1^A0g6rAYt7?$zLcs3zI9Z?*?#I0f*sH{!+B^*nXo6L%dqTdZy;xxK zEv?=vfi<}TpF1jvE$&x5fs0jItWMNzD1&8btge# zQl^0Rx_FL>f{$)uDU4|cRIKbLrxHkUG+(et?<+S)p8d_8yGK0M2Z~u5%{b=0PC~Ts zMoAGom1b)Pl^S@6Oo&e5gT&k0Ec4lQ$ii~!DAGVNKRc-aSs>xuH%}Sz09l!=?0t*P zEYcZR2&==+12!Ek9yyM}VpSN(vVo|ON z<-Fhd{3hLe&$Mya8Gao8p_r)D&TtzuQEnfM@a9@;zAP>v=o+;gQ1ZhRhf(1UGXFg& zHKN#&O3nihpuU8ozWoZ_UVpwz>Uq=IA;7CFTFOs#W^HZs-fA?~#qECKo56z`P7)$a zIARkyEgoksI8t*sW3U^a!)RM6Rh?QO%E(X2#A_T`mo2feT^{Ndp}F;O`emf*yC@k` zS)*{gH2#1bUGca0CYrZCLDHN}#xxG_26@slK|O+Bfb1ErynzbNn>n+@SPSdxz@zEp zn(}$t%hl0O82sBL?p~U62Ytf71j8SWvhK04p#q(|2AbJ!+V(Un*mZIr<@4CgDt`!@ z`mNmIGHe+Cq^61)>8Fs~)gh4ObJhqn8IhxEd2D0XU`*U30MfWKy!Q%DsZrP&$iP9R ztn6Qr01WlruRSOuQW*@0n_C(W2z1QSa}#;|3}*^PJt9hf@LA~`+Z0>awVa}DtLt|D z-ZN+^i`a?R!r~N~S5g_e`7oe8IzGU_lXXIEYpdiSF*K>amc*JKJN0u5sOhLv{X&1* z731F(!y;pxmaj@%s{zW!>-HTj#$9l%&b=*VF=ZTyiTTy_~&j1_`tlSp8K zie8G`dfo!IIdD)@b^=rHra&d3L)no=pajtvo>;+ywV*qDYnXP5jvInU+%L&f!?`~Y z{U>Uv2iEnk!Gk>?>>C5;s;AodaN(95_2iCE-zqQ~1Wkh46V99;&)|b7n)U7X<{@L^ zvj8CCr*W193y10~T|v|QCDkkFpYp{M(ok>KqQr~x)>#7wqbDT4SnZ$Ak-0&KM!6lL zjruuoh=+66Gd{cO-?3}bx>jmcz-Rn_abkuL! z>wvh9_|T6MVLfEQiDwAJLaFd>JpEMqNp~h|jQu&_O+1NLagkulTR$9T7#749zXg!8 zuD4jiHb*Afpr{Z*eV^kSqOv*j**j-axRY;S9#vVvRk(AgNm;EnNvlI>k-xU7F-S40 z%3jc3%N&eP-X?j!w^@}xJBra+Wp?1k2agKP1vy1ATojk4R(CAO`x8SF z^)kGt!l!R^a4yE~mwm!w5H$ZqwOt^~TQ*)HAr$KniObJpbpsob878$Sb^ONd?!f%u zum>b=eVQiFNJ!|J;}s1s*XT-+-liusk0bc>(}Enwr6`JFwN|s5Ah3)NTNmI5uNJLB z-YLJ^*;O|ZHm=kPvtj>T>W?4lHvg+=W_jR2`%;?8w1~DdR1;R~8k~|aqktdp z{T}JC>|(6S0P8nBiW+qL>AD69v#);fs`|op-35KkL~1L}_6eS6i7N7*7xiAgWN`J8 zdibjiL+X_j7NLh9>Vpn=JizDR2{f0^7?o$ZX}(Y1WgQ1l8&0di#&|qzWZ^`xMetT%0@}@F*9>y0> z|7ID-d#h}13S3xO0o4C+y!3e|ID{uZ^`})<2(b&E?rnNh!#s^&CqIVehDv{Y9rH1~ z|MrjHw>x>&G#7a_dWM()N1m6*D2LH^ps>fO@A%#2@HTA~r`r@vG;+^{a;aOExIasIL!>RWFa zWhn#(-Cml6$Np7fgIYVkFk3Ww*7nJ!UnfXjcPE&uH9vLc{EY$-ANt~~7?Nh*t}gBl zn|(R2M)2SgP}0NbP6~4xDv?TF;-;xoM};n-5vPJ;w&JPfUsp<{Ljh}D;4YlpnE8{`qSCgSH1 zEtia}lC?6iU)Jdb`u;#{M`JwJVtU({?-P83Wnt(FPIoFl8<#!r4@q6FbXOC2xH{1 zWf6>SV`ZC0a7Nrth?P`vp$;|CPFbb6aeu5Iabu5<`tNXf6`)8LQwCu!M~j1Jv;>hf zfj-e;nS{q&6)FY{^6ug8bLa~V(isHU1`Ex;6-MC^07mRt%%z-_YRP>0HUqOze*GF; zyc!Nuf(RydwwjvnbiajeL@j70k!by#nRZW360a=)$=5~?J!n`)6uMWaqV{{|Pp!!0 zw_?5m$?znF*Bn65m$}$N%--1oQsGMpNyw!S+AW?&wtnPe+aGz(mZ@$&K8Nb~OpaIB z>K8bx0e;~z3Nq$x@cUZNK42#P=h$uw!)U9g9hKg@MGIgAte-D9;qf9b_1O=ju9hQZCYYTW3k? z+~VJL0A`fBD~|0vQy`RNboO>L4-O9axb7a@^>!EW)xRojVV5~#BTF-5vo4B0*2N1# zTYl`9?sI48`Cuji8XrB;+o{n8=9L6|R~NU>vmQ#NR`kl2==IbCq*1tj_)=*Or`1&Y zL%Rnn2Qq`I?As@^=}_ftzh~-}~0Mt9Q2SKi7-KEN6(%7 zCd^@RlMkx29{#)cz`X9hXmwDohw#9<*YcycZ6(ol+G*3x6VTc@4^;CBXylLt#D2jDnFlhu5P_TmWnKtCJ;H*J;7FO(l^~&TApTwO@jq!# z5r}_U!Gwf>grESw_YH#1`|vDB?5F&nq6{Ke(s6F69sqTF@~6)R+9b6D5fBnu+B9)}Q?Q q^Pzgs+BYIl&@~3hKWq9(5D>X6|0+`X_m}d%gDS5X;SMhTHvK<(_>=7b delta 50765 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 a|BmSY{~NMvfNk}7z==CFm_Mg~U-Vx=!r=1& From b7d4efb7a6a208187e3fa2c187873d41ae1e7c85 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 18:52:11 +0800 Subject: [PATCH 062/153] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {worldsrv => common}/clock.go | 47 ++++++------ gamesrv/action/action_server.go | 32 ++++----- gamesrv/base/scene_mgr.go | 99 +++++--------------------- gamesrv/base/scene_policy.go | 7 -- gamesrv/tienlen/scenepolicy_tienlen.go | 10 ++- worldsrv/awardlogmgr.go | 4 +- worldsrv/cachedata.go | 7 +- worldsrv/permitmgr.go | 6 +- worldsrv/platformmgr.go | 6 +- worldsrv/player.go | 4 +- worldsrv/playermgr.go | 6 +- worldsrv/playernotify.go | 6 +- worldsrv/qmflowmgr.go | 7 +- worldsrv/rankmatch.go | 7 +- worldsrv/scenemgr.go | 8 +-- worldsrv/tournament.go | 4 +- worldsrv/transact_daytimechange.go | 12 ++-- worldsrv/welfmgr.go | 6 +- 18 files changed, 108 insertions(+), 170 deletions(-) rename {worldsrv => common}/clock.go (77%) diff --git a/worldsrv/clock.go b/common/clock.go similarity index 77% rename from worldsrv/clock.go rename to common/clock.go index 63b3ea6..fc00b79 100644 --- a/worldsrv/clock.go +++ b/common/clock.go @@ -1,27 +1,26 @@ -package main +package common import ( "time" - "mongo.games.com/game/common" "mongo.games.com/goserver/core/module" ) -var ClockMgrSington = &ClockMgr{ +var ClockMgrSingleton = &ClockMgr{ LastHour: -1, LastDay: -1, Notifying: false, } const ( - CLOCK_EVENT_SECOND int = iota - CLOCK_EVENT_MINUTE - CLOCK_EVENT_HOUR - CLOCK_EVENT_DAY - CLOCK_EVENT_WEEK - CLOCK_EVENT_MONTH - CLOCK_EVENT_SHUTDOWN - CLOCK_EVENT_MAX + ClockEventSecond int = iota + ClockEventMinute + ClockEventHour + ClockEventDay + ClockEventWeek + ClockEventMonth + ClockEventShutdown + ClockEventMax ) type ClockSinker interface { @@ -38,7 +37,7 @@ type ClockSinker interface { type BaseClockSinker struct { } -func (s *BaseClockSinker) InterestClockEvent() int { return (1 << CLOCK_EVENT_MAX) - 1 } +func (s *BaseClockSinker) InterestClockEvent() int { return (1 << ClockEventMax) - 1 } func (s *BaseClockSinker) OnSecTimer() {} func (s *BaseClockSinker) OnMiniTimer() {} func (s *BaseClockSinker) OnHourTimer() {} @@ -48,7 +47,7 @@ func (s *BaseClockSinker) OnMonthTimer() {} func (s *BaseClockSinker) OnShutdown() {} type ClockMgr struct { - sinkers [CLOCK_EVENT_MAX][]ClockSinker + sinkers [ClockEventMax][]ClockSinker LastTickTime time.Time LastMonth time.Month LastWeek int @@ -60,9 +59,9 @@ type ClockMgr struct { LastFiveMin int } -func (this *ClockMgr) RegisteSinker(sinker ClockSinker) { +func (this *ClockMgr) RegisterSinker(sinker ClockSinker) { interest := sinker.InterestClockEvent() - for i := 0; i < CLOCK_EVENT_MAX; i++ { + for i := 0; i < ClockEventMax; i++ { if (1< Date: Mon, 2 Sep 2024 10:08:23 +0800 Subject: [PATCH 063/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 1140eb4..5e654e1 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,9 +148,6 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) - if s.IsCustom() && len(s.Players) == 0 { - s.Destroy(true) - } } // 玩家掉线 @@ -606,6 +603,9 @@ func (this *SceneBaseStateTienLen) OnTick(s *base.Scene) { s.RandRobotCnt() s.SetTimerRandomRobot(s.GetRobotTime()) } + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 发送玩家操作情况 @@ -2570,9 +2570,6 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) if sceneEx.NumOfGames >= int(sceneEx.TotalOfGames) { - sceneEx.BilledList = make(map[int32]*[]*BilledInfo) - sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] - sceneEx.RoundLogId = sceneEx.RoundLogId[:0] packBilled := &tienlen.SCTienLenCycleBilled{} for snid, billedList := range sceneEx.BilledList { info := &tienlen.TienLenCycleBilledInfo{ @@ -2636,6 +2633,9 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { logger.Logger.Tracef("SCTienLenCycleBilled: %v", packBilled) s.SyncSceneState(common.SceneStateEnd) sceneEx.SaveCustomLog() + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] + sceneEx.RoundLogId = sceneEx.RoundLogId[:0] } } From 9f490a7aca0e4177a461a1f79bb7833fa9f91681 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 11:05:45 +0800 Subject: [PATCH 064/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/logchannel.go | 3 +++ gamesrv/tienlen/scenedata_tienlen.go | 1 + gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- model/customlog.go | 33 +++++++++++--------------- model/gameplayerlistlog.go | 1 + worldsrv/action_game.go | 2 ++ worldsrv/playernotify.go | 3 +++ worldsrv/scenemgr.go | 2 +- 8 files changed, 26 insertions(+), 21 deletions(-) diff --git a/gamesrv/base/logchannel.go b/gamesrv/base/logchannel.go index 4f77a44..de78540 100644 --- a/gamesrv/base/logchannel.go +++ b/gamesrv/base/logchannel.go @@ -3,6 +3,8 @@ package base import ( "reflect" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/model" "mongo.games.com/game/mq" ) @@ -38,6 +40,7 @@ func (c *LogChannel) WriteLog(log interface{}) { if cname == "" { cname = "_null_" } + logger.Logger.Tracef("LogChannel ==> %#v", log) mq.Send(cname, log) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index f5c8548..e581d75 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -2114,6 +2114,7 @@ func (this *TienLenSceneData) SaveCustomLog() { state = 1 } log := &model.CustomLog{ + Platform: this.Platform, CycleId: this.CycleID, RoomConfigId: this.GetCustom().GetRoomConfigId(), RoomId: this.SceneId, diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 5e654e1..020508a 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2608,7 +2608,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { if p != nil { var items []*model.Item for _, v := range packBilled.List[0].Award { - itemData := srvdata.GameItemMgr.Get(p.Platform, p.SnId) + itemData := srvdata.GameItemMgr.Get(p.Platform, v.GetId()) if itemData != nil { items = append(items, &model.Item{ ItemId: v.GetId(), diff --git a/model/customlog.go b/model/customlog.go index 08e6a27..67b82ec 100644 --- a/model/customlog.go +++ b/model/customlog.go @@ -1,9 +1,5 @@ package model -import ( - "github.com/globalsign/mgo/bson" -) - var ( DbCustomLogDBName = "log" DbCustomLogCollName = "log_custom" @@ -22,19 +18,18 @@ type RoundInfo struct { } type CustomLog struct { - Id bson.ObjectId `bson:"_id"` - Platform string `bson:"-"` - CycleId string // 本轮id,多局游戏属于同一轮 - RoomConfigId int32 // 房间配置id - GameFreeId int32 // 场次id - TotalRound int32 // 总局数 - PlayerNum int32 // 最大人数 - Password string // 密码 - CostType int32 // 付费方式 1房主 2AA - Voice int32 // 是否开启语音 1开启 - RoomId int32 // 房间id - SnId []PlayerInfo // 所有玩家 - List []RoundInfo // 对局记录 - StartTs, EndTs int64 // 开始,结束时间 - State int32 // 0正常结束 1后台中途解散 + Platform string `bson:"-"` + CycleId string // 本轮id,多局游戏属于同一轮 + RoomConfigId int32 // 房间配置id + GameFreeId int32 // 场次id + TotalRound int32 // 总局数 + PlayerNum int32 // 最大人数 + Password string // 密码 + CostType int32 // 付费方式 1房主 2AA + Voice int32 // 是否开启语音 1开启 + RoomId int32 // 房间id + SnId []PlayerInfo // 所有玩家 + List []RoundInfo // 对局记录 + StartTs, EndTs int64 // 开始,结束时间 + State int32 // 0正常结束 1后台中途解散 } diff --git a/model/gameplayerlistlog.go b/model/gameplayerlistlog.go index 4bbd768..4441b2d 100644 --- a/model/gameplayerlistlog.go +++ b/model/gameplayerlistlog.go @@ -99,6 +99,7 @@ func NewGamePlayerListLogEx(snid int32, gamedetailedlogid string, platform, chan cl.Time = tNow cl.MatchId = matchid cl.MatchType = matchType + cl.CycleId = cycleId return cl } diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index d53bca5..a080fc6 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1348,6 +1348,8 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface return nil } + PlayerNotifySingle.AddTime(p.SnId, common.NotifyPrivateRoomList, time.Second*15) + pack := &gamehall.SCGetPrivateRoomList{} scenes := SceneMgrSingleton.FindRoomList(&FindRoomParam{ Platform: p.Platform, diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go index 7999b8e..e944769 100644 --- a/worldsrv/playernotify.go +++ b/worldsrv/playernotify.go @@ -3,6 +3,8 @@ package main import ( "time" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" ) @@ -76,4 +78,5 @@ func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { ids := p.GetPlayers(tp) PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) + logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 4938b49..864f2ca 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -85,7 +85,7 @@ func (m *SceneMgr) GenOneMatchSceneId() int { func (m *SceneMgr) GenPassword() string { for i := 0; i < 100; i++ { - s := strconv.Itoa(common.RandInt(10000, 100000)) + s := strconv.Itoa(common.RandInt(100000, 1000000)) if _, ok := m.password[s]; !ok { m.password[s] = struct{}{} return s From 04a0772415850ef732d37a6d46117977085bc985 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 14:35:10 +0800 Subject: [PATCH 065/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index bd5e0eb..cba5275 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -422,6 +422,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } this.gameSess.AddPlayer(p) FirePlayerEnterScene(p, this) + this.sp.OnPlayerEnter(this, p) return true } @@ -507,6 +508,8 @@ func (this *Scene) lastScene(p *Player) { } func (this *Scene) DelPlayer(p *Player) bool { + FirePlayerLeaveScene(p, this) + this.sp.OnPlayerLeave(this, p) if p.scene != this { roomId := 0 if p.scene != nil { From 26db8f4b21924dbaf2efcd80a6b67ff557871e69 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 14:55:18 +0800 Subject: [PATCH 066/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/tienlen/constants.go | 1 + gamesrv/tienlen/scenepolicy_tienlen.go | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gamerule/tienlen/constants.go b/gamerule/tienlen/constants.go index 24ff3bc..024f6a2 100644 --- a/gamerule/tienlen/constants.go +++ b/gamerule/tienlen/constants.go @@ -29,6 +29,7 @@ const ( TIenLenTianhuTimeout = time.Second * 2 // 天胡动画时长 TienLenHandNotExceedTimeLimit = time.Second * 3 //玩家没有牌可以接上家的牌,出牌时间上限 TienLenHandAutoStateTimeOut = time.Second * 1 //玩家托管出牌时间上限 + TienLenCustomWaiteStatTimeout = time.Millisecond * 1500 ) // 场景状态 diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 020508a..b679abd 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -914,10 +914,12 @@ func (this *SceneWaitStartStateTienLen) OnTick(s *base.Scene) { } } if sceneEx.IsCustom() { - if sceneEx.CanStart() { - s.ChangeSceneState(rule.TienLenSceneStateHandCard) - } else { - s.ChangeSceneState(rule.TienLenSceneStateWaitPlayer) + if time.Now().Sub(sceneEx.StateStartTime) > rule.TienLenCustomWaiteStatTimeout { + if sceneEx.CanStart() { + s.ChangeSceneState(rule.TienLenSceneStateHandCard) + } else { + s.ChangeSceneState(rule.TienLenSceneStateWaitPlayer) + } } } } From 00dcc3199f2b3dd1bb753958888dde3b67a3d3ef Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 16:13:23 +0800 Subject: [PATCH 067/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E4=B8=BB=E4=BB=98=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- worldsrv/action_game.go | 4 ++ worldsrv/bagmgr.go | 2 +- worldsrv/scenepolicydata.go | 66 +++++++++++++++++++++++--- worldsrv/trascate_webapi.go | 26 +++++++--- 5 files changed, 84 insertions(+), 16 deletions(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index b679abd..a64bbd5 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -825,7 +825,7 @@ func (this *SceneWaitStartStateTienLen) OnEnter(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*TienLenSceneData); ok { sceneEx.Clear() sceneEx.SetGaming(false) - this.BroadcastRoomState(s, this.GetState()) + this.BroadcastRoomState(s, this.GetState(), int64(sceneEx.NumOfGames)) logger.Logger.Trace("(this *SceneWaitStartStateTienLen) OnEnter", this.GetState()) } } diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index a080fc6..7785ce8 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1319,6 +1319,10 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } + if cfg.GetCostType() == 1 { + sp.CostPayment(scene, p) + } + pack = &gamehall.SCCreatePrivateRoom{ OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, GameFreeId: msg.GetGameFreeId(), diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 497c69d..acb0556 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -450,7 +450,7 @@ func (this *BagMgr) AddItem(p *Player, itemId, itemNum int64, add int64, gainWay return this.AddItems(p, []*Item{{ItemId: int32(itemId), ItemNum: itemNum}}, add, gainWay, operator, remark, gameId, gameFreeId, noLog, params...) } -func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Item, gainWay int32, operator, remark string, +func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*model.Item, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, callback func(err error)) { var findPlayer *model.PlayerBaseInfo task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 015e7b0..2aa2754 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -2,6 +2,8 @@ package main import ( "math" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/model" hallproto "mongo.games.com/game/protocol/gamehall" @@ -29,6 +31,10 @@ func (spd *ScenePolicyData) OnStart(s *Scene) { // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { s.NotifyPrivateRoom(common.ListDel) + // 房主付费,房间没有玩就解散了,返还房主建房费用 + if s.IsCustom() && s.GetCostType() == 1 && s.currRound == 0 { + spd.GiveCostPayment(s, s.creator) + } } // 场景心跳事件 @@ -60,8 +66,10 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { case common.SceneStateStart: s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { - for _, v := range s.players { - spd.CostPayment(s, v) + if s.GetCostType() == 2 { + for _, v := range s.players { + spd.CostPayment(s, v) + } } } @@ -85,13 +93,13 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { return 0 } -func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*model.Item)) bool { +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, snid int32, f func(items []*model.Item)) bool { isEnough := true var items []*model.Item if costType == 1 { // 房主 for _, v := range roomConfig.GetCost() { - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { isEnough = false break } else { @@ -105,7 +113,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba // AA for _, v := range roomConfig.GetCost() { n := int64(math.Ceil(float64(v.GetItemNum()) / float64(playerNum))) - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < n { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < n { isEnough = false break } else { @@ -126,7 +134,7 @@ func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *weba if roomConfig == nil { return false } - return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) + return spd.costEnough(costType, playerNum, roomConfig, p.SnId, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { @@ -134,7 +142,10 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { if roomConfig == nil { return false } - return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p, func(items []*model.Item) { + return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p.SnId, func(items []*model.Item) { + for _, v := range items { + v.ItemNum = -v.ItemNum + } BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, @@ -148,6 +159,47 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { }) } +// GiveCostPayment 退房费 +func (spd *ScenePolicyData) GiveCostPayment(s *Scene, snid int32) bool { + roomConfig := PlatformMgrSingleton.GetConfig(s.limitPlatform.IdStr).RoomConfig[s.GetRoomConfigId()] + if roomConfig == nil { + return false + } + + if roomConfig.GetCostType() != 1 { // 只有房主付费才有返还 + return false + } + + var items []*model.Item + for _, v := range roomConfig.GetCost() { + items = append(items, &model.Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) + } + + p := PlayerMgrSington.GetPlayerBySnId(snid) + if p != nil { + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技场房间费用返还", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + NoLog: false, + RoomConfigId: roomConfig.GetId(), + }) + } else { + BagMgrSingleton.AddItemsOffline(s.limitPlatform.IdStr, snid, items, common.GainWayRoomCost, "system", + "竞技场费用返还", int64(s.gameId), int64(s.dbGameFree.GetId()), false, func(err error) { + logger.Logger.Errorf("竞技场房间费用返还失败, err: %v", err) + }) + } + return false +} + func (spd *ScenePolicyData) GetBetState() int32 { return spd.BetState } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 7106457..454fedd 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3375,19 +3375,25 @@ func init() { } addvcoin := msg.NeedNum jPrice := msg.JPrice - var items []*Item + var items []*model.Item //V卡 if addvcoin > 0 { - items = append(items, &Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) + items = append(items, &model.Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) } //金券 if jPrice > 0 { - items = append(items, &Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) + items = append(items, &model.Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) } remark := fmt.Sprintf("兑换撤单 %v-%v", msg.GoodsId, msg.Name) if player != nil { // 在线 - if _, code, _ := BagMgrSingleton.AddItems(player, items, 0, common.GainWay_Exchange, "system", remark, 0, 0, false); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 + if _, code, _ := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: player.PlayerData, + Change: items, + GainWay: common.GainWay_Exchange, + Operator: "system", + Remark: remark, + }); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 logger.Logger.Errorf("UpExchangeStatus AddItems err", code) pack.Msg = "AddItems err" return common.ResponseTag_ParamError, pack @@ -3744,9 +3750,9 @@ func init() { pack.Msg = "参数错误" return common.ResponseTag_ParamError, pack } - var items []*Item + var items []*model.Item for _, info := range msg.ItemInfo { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: info.ItemId, // 物品id ItemNum: info.ItemNum, // 数量 ObtainTime: time.Now().Unix(), @@ -3755,7 +3761,13 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItems(p, items, 0, msg.GetTypeId(), "system", msg.GetRemark(), 0, 0, false) + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: msg.GetTypeId(), + Operator: "system", + Remark: msg.GetRemark(), + }) pack.Tag = webapiproto.TagCode_SUCCESS pack.Msg = "AddItem success" return common.ResponseTag_Ok, pack From 6a9c6a988b1069de06f7ee8d210a5f356f9715ca Mon Sep 17 00:00:00 2001 From: kxdd Date: Mon, 2 Sep 2024 16:23:45 +0800 Subject: [PATCH 068/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96token=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 3 +- gamesrv/clawdoll/scenepolicy_clawdoll.go | 36 +++++++++++ machine/action/action_server.go | 3 + protocol/machine/machine.pb.go | 78 +++++++++++++++--------- protocol/machine/machine.proto | 2 + 5 files changed, 91 insertions(+), 31 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index fa25bf6..7036746 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -92,6 +92,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf } pack := &machine.SMGetToken{} pack.Snid = p.SnId + pack.Sid = p.GetSid() scene := p.GetScene() if scene == nil { @@ -122,7 +123,7 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) if msg, ok := data.(*machine.MSSendToken); ok { //给客户端返回token token := msg.Token - p := base.PlayerMgrSington.GetPlayer(int64(msg.Snid)) + p := base.PlayerMgrSington.GetPlayer(int64(msg.GetSid())) if p == nil { logger.Logger.Warn("MSSendTokenHandler p == nil") return nil diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 4128a09..6246929 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -3,6 +3,7 @@ package clawdoll import ( "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" + "mongo.games.com/game/protocol/machine" "time" "mongo.games.com/goserver/core" @@ -117,6 +118,8 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { // 玩家数据发送 sceneEx.OnPlayerEnter(p, 0) + + this.SendGetVideoToken(s, p, sceneEx) s.FirePlayerEvent(p, base.PlayerEventEnter, nil) } } @@ -173,6 +176,8 @@ func (this *PolicyClawdoll) OnPlayerRehold(s *base.Scene, p *base.Player) { this.SendRoomInfo(s, p, sceneEx) ClawdollBroadcastRoomWaitPlayers(s) ClawdollBroadcastPlayingInfo(s) + + this.SendGetVideoToken(s, p, sceneEx) s.FirePlayerEvent(p, base.PlayerEventRehold, nil) } } @@ -193,6 +198,7 @@ func (this *PolicyClawdoll) OnPlayerReturn(s *base.Scene, p *base.Player) { ClawdollBroadcastRoomWaitPlayers(s) ClawdollBroadcastPlayingInfo(s) + this.SendGetVideoToken(s, p, sceneEx) s.FirePlayerEvent(p, base.PlayerEventReturn, nil) } } @@ -256,11 +262,41 @@ func (this *PolicyClawdoll) CanChangeCoinScene(s *base.Scene, p *base.Player) bo } func (this *PolicyClawdoll) SendRoomInfo(s *base.Scene, p *base.Player, sceneEx *SceneEx) { + if s == nil || p == nil || sceneEx == nil { + return + } + pack := sceneEx.ClawdollCreateRoomInfoPacket(s, p) p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_ROOMINFO), pack) } +func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sceneEx *SceneEx) { + //转发到娃娃机主机 + if s == nil || p == nil || sceneEx == nil { + return + } + logger.Logger.Tracef("ClawdollGetVideoToken") + if p == nil { + logger.Logger.Warn("ClawdollGetVideoToken p == nil") + return + } + pack := &machine.SMGetToken{} + pack.Snid = p.SnId + pack.Sid = p.GetSid() + + machineId := s.DbGameFree.GetId() % 6080000 + appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) + if serverSecret == "" || appId == 0 { + return + } + + pack.ServerSecret = serverSecret + pack.AppId = appId + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) +} + // 广播房间状态 func ClawdollBroadcastRoomState(s *base.Scene, params ...float32) { pack := &clawdoll.SCCLAWDOLLRoomState{ diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 7f7acd6..561f364 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -300,6 +300,9 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info := &machine.MSSendToken{} info.Snid = msg.Snid info.Token = token + info.Sid = msg.GetSid() + info.Appid = msg.AppId + session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) return nil diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 464b384..39a1133 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -505,6 +505,7 @@ type SMGetToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` + Sid int64 `protobuf:"varint,4,opt,name=Sid,proto3" json:"Sid,omitempty"` } func (x *SMGetToken) Reset() { @@ -560,6 +561,13 @@ func (x *SMGetToken) GetServerSecret() string { return "" } +func (x *SMGetToken) GetSid() int64 { + if x != nil { + return x.Sid + } + return 0 +} + //返回token type MSSendToken struct { state protoimpl.MessageState @@ -569,6 +577,7 @@ type MSSendToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + Sid int64 `protobuf:"varint,4,opt,name=Sid,proto3" json:"Sid,omitempty"` } func (x *MSSendToken) Reset() { @@ -624,6 +633,13 @@ func (x *MSSendToken) GetToken() string { return "" } +func (x *MSSendToken) GetSid() int64 { + if x != nil { + return x.Sid + } + return 0 +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -661,40 +677,42 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x64, 0x64, 0x72, 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, - 0x4d, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xb9, - 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, - 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, - 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, - 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, - 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, - 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, + 0x64, 0x22, 0x5f, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, + 0x69, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, + 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, + 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, + 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, + 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, + 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 472cb4b..5cbb18e 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -64,10 +64,12 @@ message SMGetToken{ int32 Snid = 1; int64 AppId = 2; string ServerSecret = 3; + int64 Sid = 4; } //返回token message MSSendToken{ int32 Snid = 1; int64 Appid = 2; string Token = 3; + int64 Sid = 4; } \ No newline at end of file From 151a739dab201f7bbbb9cdf49647248a52cf2917 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 16:25:46 +0800 Subject: [PATCH 069/153] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 6 ++++++ worldsrv/scenemgr.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index cba5275..333f90e 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -135,6 +135,12 @@ func NewScene(args *CreateSceneParam) *Scene { } } } + if s.MatchParam == nil { + s.MatchParam = new(serverproto.MatchParam) + } + if s.CustomParam == nil { + s.CustomParam = new(serverproto.CustomParam) + } s.sp.OnStart(s) return s } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 864f2ca..42c33e6 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -155,7 +155,7 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { var scenes []*Scene for _, value := range m.scenes { - if value.MatchSortId == sortId { + if value.GetMatchSortId() == sortId { s := m.GetScene(value.sceneId) if s != nil { scenes = append(scenes, value) From d2c5c4f1599d81ad5832931912b4416225a7ea52 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 17:31:45 +0800 Subject: [PATCH 070/153] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=A4=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_jybuser.go | 6 ++++-- model/jyb.go | 2 +- worldsrv/hundredscenemgr.go | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dbproxy/svc/l_jybuser.go b/dbproxy/svc/l_jybuser.go index efa1a00..a8dc343 100644 --- a/dbproxy/svc/l_jybuser.go +++ b/dbproxy/svc/l_jybuser.go @@ -156,10 +156,12 @@ func upJybUser(cjybuse, cjyb *mongo.Collection, snId, codeType int32, plt, useCo if jybuser.JybInfos == nil { jybuser.JybInfos = make(map[string]int32) } else if _, exist := jybuser.JybInfos[jybuseerid]; exist { // 该类型礼包玩家已经领取过 - return model.ErrJYBPlCode + if ret.CodeType != 3 { + return model.ErrJYBPlCode + } } - jybuser.JybInfos[jybuseerid] = 1 + jybuser.JybInfos[jybuseerid]++ err = cjybuse.Update(bson.M{"_id": jybuser.JybUserId}, bson.D{{"$set", bson.D{{"jybinfos", jybuser.JybInfos}}}}) if err != nil { diff --git a/model/jyb.go b/model/jyb.go index c365ef4..78b60f0 100644 --- a/model/jyb.go +++ b/model/jyb.go @@ -53,7 +53,7 @@ type JybInfo struct { JybId bson.ObjectId `bson:"_id"` // 礼包ID Platform string //平台 Name string // 礼包名称 - CodeType int32 // 礼包类型 1 通用 2 特殊 + CodeType int32 // 礼包类型 1 通用 2专属(自动生成兑换码,每个玩家领一个) 3活动(自动生产兑换码,每个兑换码领一个) StartTime int64 // 开始时间 Unix EndTime int64 // 结束时间 Content string // 礼包内容 diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 2766caa..70c59e0 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -346,7 +346,7 @@ func (this *HundredSceneMgr) ModuleName() string { } func (this *HundredSceneMgr) Init() { - this.TryCreateRoom() + //this.TryCreateRoom() } func (this *HundredSceneMgr) Update() { From 05a54af2db8c5218d6fdf4a9720e87f690864ae9 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 17:31:45 +0800 Subject: [PATCH 071/153] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=A4=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_jybuser.go | 6 ++++-- model/config.go | 4 ++-- model/jyb.go | 2 +- worldsrv/hundredscenemgr.go | 2 +- worldsrv/shopmgr.go | 30 +++++++++++++++--------------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/dbproxy/svc/l_jybuser.go b/dbproxy/svc/l_jybuser.go index efa1a00..a8dc343 100644 --- a/dbproxy/svc/l_jybuser.go +++ b/dbproxy/svc/l_jybuser.go @@ -156,10 +156,12 @@ func upJybUser(cjybuse, cjyb *mongo.Collection, snId, codeType int32, plt, useCo if jybuser.JybInfos == nil { jybuser.JybInfos = make(map[string]int32) } else if _, exist := jybuser.JybInfos[jybuseerid]; exist { // 该类型礼包玩家已经领取过 - return model.ErrJYBPlCode + if ret.CodeType != 3 { + return model.ErrJYBPlCode + } } - jybuser.JybInfos[jybuseerid] = 1 + jybuser.JybInfos[jybuseerid]++ err = cjybuse.Update(bson.M{"_id": jybuser.JybUserId}, bson.D{{"$set", bson.D{{"jybinfos", jybuser.JybInfos}}}}) if err != nil { diff --git a/model/config.go b/model/config.go index bd47bb1..0ccec47 100644 --- a/model/config.go +++ b/model/config.go @@ -34,7 +34,7 @@ const ( type ShopInfo struct { Id int32 // 商品ID - Page int32 // 页面 1,金币页面 2,钻石页面 3,道具页面 + Page int32 // 页面 1,金币页面 2,钻石页面 3,道具页面 4,房卡 Order int32 // 排序 页面内商品的位置排序 Location []int32 // 显示位置 第1位,竖版大厅 第2位,Tienlen1级选场 第3位,捕鱼1级选场 Picture string // 图片id @@ -44,7 +44,7 @@ type ShopInfo struct { AdTime int32 // 观看几次广告 RepeatTimes int32 // 领取次数 CoolingTime []int32 // 观看冷却时间 - Type int32 // 获得类型 1,金币 2,钻石 3,道具类型 + Type int32 // 获得类型 1,金币 2,钻石 3,道具类型 4,房卡 Amount int64 // 获得数量 AddArea []int32 // 加送百分比(比如加送10%,就配置110) ItemId int32 // 获得道具ID diff --git a/model/jyb.go b/model/jyb.go index c365ef4..78b60f0 100644 --- a/model/jyb.go +++ b/model/jyb.go @@ -53,7 +53,7 @@ type JybInfo struct { JybId bson.ObjectId `bson:"_id"` // 礼包ID Platform string //平台 Name string // 礼包名称 - CodeType int32 // 礼包类型 1 通用 2 特殊 + CodeType int32 // 礼包类型 1 通用 2专属(自动生成兑换码,每个玩家领一个) 3活动(自动生产兑换码,每个兑换码领一个) StartTime int64 // 开始时间 Unix EndTime int64 // 结束时间 Content string // 礼包内容 diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 2766caa..70c59e0 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -346,7 +346,7 @@ func (this *HundredSceneMgr) ModuleName() string { } func (this *HundredSceneMgr) Init() { - this.TryCreateRoom() + //this.TryCreateRoom() } func (this *HundredSceneMgr) Update() { diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 5cce9b1..a296bee 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,6 +63,8 @@ const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 ShopTypeItem // 道具 + ShopTypeFangKa // 房卡 + ShopTypeMax ) // 兑换商品状态 @@ -539,10 +541,10 @@ func (this *ShopMgr) shopAddItem(p *Player, shopInfo *model.ShopInfo, vipShopId // createOrder 保存购买记录 func (this *ShopMgr) createOrder(p *Player, shopInfo *model.ShopInfo, costNum int64, amount [3]int32) { - if shopInfo.Type < ShopTypeCoin && shopInfo.Type > ShopTypeItem { - logger.Logger.Errorf("createOrder err: type = %v", shopInfo.Type) - return - } + //if shopInfo.Type < ShopTypeCoin && shopInfo.Type >= ShopTypeMax { + // logger.Logger.Errorf("createOrder err: type = %v", shopInfo.Type) + // return + //} task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { dbShop := model.NewDbShop(p.Platform, shopInfo.Page, amount[:], "sys", 0, shopInfo.ConstType, int32(costNum), @@ -1228,17 +1230,15 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, amount[ShopTypeDiamond-1] = int32(addTotal) var itemInfo []model.ItemInfo var webItemInfo []*webapi_proto.ItemInfo - if shopInfo.AddItemInfo != nil { - for _, info := range shopInfo.AddItemInfo { - itemInfo = append(itemInfo, model.ItemInfo{ - ItemId: info.ItemId, - ItemNum: int64(info.ItemNum), - }) - webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ - ItemId: info.ItemId, - ItemNum: info.ItemNum, - }) - } + for _, info := range shopInfo.GetItems() { + itemInfo = append(itemInfo, model.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) } dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum, From 5c6dce2f4db7631de8ab309d2b60e53f658d8190 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 10:54:28 +0800 Subject: [PATCH 072/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E4=B8=AD?= =?UTF-8?q?=E9=80=94=E4=B8=8D=E8=83=BD=E7=A6=BB=E5=BC=80=E6=88=BF=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index a64bbd5..46bf98c 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2765,7 +2765,10 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { continue } player_data.Clear() - if sceneEx.IsMatchScene() { + if sceneEx.IsCustom() { + player_data.UnmarkFlag(base.PlayerState_WaitNext) + } + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { continue } if !player_data.IsOnLine() { From 034abb64e2c373d6ccfd23edc514600f09d196f9 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 11:20:49 +0800 Subject: [PATCH 073/153] =?UTF-8?q?=E7=89=8C=E5=B1=80=E5=9B=9E=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index fd3f0f7..592b308 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -117,6 +117,8 @@ func NewScene(args *CreateSceneParam) *Scene { KeyGameDif: args.GetDBGameFree().GetGameDif(), } s.CycleID, _ = model.AutoIncGameLogId() + s.rrVer = ReplayRecorderVer[gameId] + s.RecordReplayStart() s.init() return s } From ddcaa62f136cc4aea4b60be66757ad7cf05fd6a8 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 15:10:41 +0800 Subject: [PATCH 074/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 29 ++++++++- gamesrv/clawdoll/player_clawdoll.go | 13 +++- gamesrv/clawdoll/scenepolicy_clawdoll.go | 14 +---- machine/action/action_server.go | 1 - protocol/machine/machine.pb.go | 78 +++++++++--------------- protocol/machine/machine.proto | 2 - 6 files changed, 68 insertions(+), 69 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 7036746..b0078c4 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -2,6 +2,7 @@ package clawdoll import ( "mongo.games.com/game/common" + rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/machine" @@ -52,6 +53,22 @@ func (h *CSPlayerOpHandler) Process(s *netlib.Session, packetid int, data interf func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("收到返回上分结果!!!!!!!!!!") if msg, ok := data.(*machine.MSDollMachineoPerateResult); ok { + + p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) + if p == nil { + logger.Logger.Warn("CSGetTokenHandler p == nil") + return nil + } + + scene := p.GetScene() + if scene == nil { + return nil + } + sceneEx, ok := scene.ExtraData.(*SceneEx) + if !ok { + return nil + } + switch msg.TypeId { case 1: if msg.Result == 1 { @@ -61,10 +78,17 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data } case 2: if msg.Result == 1 { - logger.Logger.Tracef("下抓成功!!!!!!!!!!!!snid = ", msg.Snid) + } else { logger.Logger.Tracef("下抓失败!!!!!!!!!!!!snid = ", msg.Snid) } + + scene.ChangeSceneState(rule.ClawDollSceneStateBilled) + + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(scene) + ClawdollSendPlayerInfo(scene) } } return nil @@ -92,7 +116,6 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf } pack := &machine.SMGetToken{} pack.Snid = p.SnId - pack.Sid = p.GetSid() scene := p.GetScene() if scene == nil { @@ -123,7 +146,7 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) if msg, ok := data.(*machine.MSSendToken); ok { //给客户端返回token token := msg.Token - p := base.PlayerMgrSington.GetPlayer(int64(msg.GetSid())) + p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p == nil { logger.Logger.Warn("MSSendTokenHandler p == nil") return nil diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 34f3441..2fb434e 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -11,9 +11,10 @@ type PlayerEx struct { clawDollState int32 // 抓娃娃状态 dollCardsCnt int32 // 娃娃卡数量 - gainCoin int64 // 本局赢的金币 - taxCoin int64 // 本局税收 - odds int32 + winDollCardType int32 // 本局赢取娃娃的类型 + gainCoin int64 // 本局赢的金币 + taxCoin int64 // 本局税收 + odds int32 } func (this *PlayerEx) Clear(baseScore int32) { @@ -39,6 +40,12 @@ func (this *PlayerEx) CanPayCoin() bool { return true } +// 投币消耗 +func (this *PlayerEx) CostPlayCoin() bool { + + return true +} + // 能否移动 func (this *PlayerEx) CanMove() bool { diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 6246929..114e41c 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -283,7 +283,6 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce } pack := &machine.SMGetToken{} pack.Snid = p.SnId - pack.Sid = p.GetSid() machineId := s.DbGameFree.GetId() % 6080000 appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) @@ -419,6 +418,7 @@ func (this *BaseState) OnEnter(s *base.Scene) { func (this *BaseState) OnLeave(s *base.Scene) {} func (this *BaseState) OnTick(s *base.Scene) { + } func (this *BaseState) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { @@ -666,10 +666,6 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -697,15 +693,9 @@ func (this *PlayGame) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { if sceneEx.TimeOutPlayGrab() { - + logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) return } } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 561f364..ea9d138 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -300,7 +300,6 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info := &machine.MSSendToken{} info.Snid = msg.Snid info.Token = token - info.Sid = msg.GetSid() info.Appid = msg.AppId session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 39a1133..464b384 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -505,7 +505,6 @@ type SMGetToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` - Sid int64 `protobuf:"varint,4,opt,name=Sid,proto3" json:"Sid,omitempty"` } func (x *SMGetToken) Reset() { @@ -561,13 +560,6 @@ func (x *SMGetToken) GetServerSecret() string { return "" } -func (x *SMGetToken) GetSid() int64 { - if x != nil { - return x.Sid - } - return 0 -} - //返回token type MSSendToken struct { state protoimpl.MessageState @@ -577,7 +569,6 @@ type MSSendToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` - Sid int64 `protobuf:"varint,4,opt,name=Sid,proto3" json:"Sid,omitempty"` } func (x *MSSendToken) Reset() { @@ -633,13 +624,6 @@ func (x *MSSendToken) GetToken() string { return "" } -func (x *MSSendToken) GetSid() int64 { - if x != nil { - return x.Sid - } - return 0 -} - var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -677,42 +661,40 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x64, 0x64, 0x72, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, - 0x64, 0x22, 0x5f, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, - 0x69, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, - 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, - 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, - 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, - 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, - 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, + 0x4d, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xb9, + 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, + 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, + 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, + 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, + 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, + 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, + 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, + 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, + 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 5cbb18e..472cb4b 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -64,12 +64,10 @@ message SMGetToken{ int32 Snid = 1; int64 AppId = 2; string ServerSecret = 3; - int64 Sid = 4; } //返回token message MSSendToken{ int32 Snid = 1; int64 Appid = 2; string Token = 3; - int64 Sid = 4; } \ No newline at end of file From e7a60493416c9244a8c8f4afec7d133129239ca6 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 15:12:24 +0800 Subject: [PATCH 075/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E9=85=8D=E7=BD=AE=20=E5=A2=9E=E5=8A=A0StreamId?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/webapi/common.pb.go | 30 ++++++++++++++++++++---------- protocol/webapi/common.proto | 1 + 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index db47b49..f00c43a 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8202,6 +8202,7 @@ type MachineInfo struct { MachineId int32 `protobuf:"varint,1,opt,name=MachineId,proto3" json:"MachineId,omitempty"` //娃娃机Id AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *MachineInfo) Reset() { @@ -8257,6 +8258,13 @@ func (x *MachineInfo) GetServerSecret() string { return "" } +func (x *MachineInfo) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -9546,16 +9554,18 @@ var file_common_proto_rawDesc = []byte{ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x65, 0x0a, 0x0b, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x81, 0x01, 0x0a, 0x0b, 0x4d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x42, 0x26, 0x5a, + 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index c3b53b9..e34b8b3 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -901,4 +901,5 @@ message MachineInfo{ int32 MachineId = 1; //娃娃机Id int64 AppId = 2; string ServerSecret = 3; + string StreamId = 4; } \ No newline at end of file From 59535c2015c00ca74c8b5bba946e346424c87468 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 15:46:54 +0800 Subject: [PATCH 076/153] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.json | 46 ----- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes protocol/webapi/common.pb.go | 371 +++++++++++++++++++++++++---------- 4 files changed, 270 insertions(+), 147 deletions(-) diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 7dc842d..564a1f9 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -5463,52 +5463,6 @@ "PlayerWaterRate": 100, "BetWaterRate": 100 }, - { - "Id": 6080001, - "Name": "娃娃机", - "Title": "公共服", - "GameId": 608, - "GameRule": 60800, - "GameType": 1, - "SceneType": 1, - "Desc": "0", - "ShowType": 3, - "ShowId": 60800, - "BaseScore": 1000000, - "BetDec": "0", - "Ai": [ - 0 - ], - "MaxChip": 100000000, - "OtherIntParams": [ - 0 - ], - "Jackpot": [ - 0 - ], - "RobotNumRng": [ - 1, - 1 - ], - "RobotTakeCoin": [ - 80000, - 500000 - ], - "RobotLimitCoin": [ - 1000000, - 2000000 - ], - "BetLimit": 1000000, - "SameIpLimit": 1, - "GameDif": "608", - "GameClass": 1, - "PlatformName": "越南棋牌", - "MaxBetCoin": [ - 0 - ], - "PlayerWaterRate": 100, - "BetWaterRate": 100 - }, { "Id": 3010001, "Name": "财运神", diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index da1a818deb15b21f90dfd22e217edec0842f838c..12cce5f4165edd740dfa268af25289251ffeba4c 100644 GIT binary patch delta 82 zcmZo*ZeX5JXnCcLS%6WBjpI6$z5%6gLFvm-`YM#Z2BmLKT&2KxYa*A*#A(74Ux`i@ HXUqfuHEb0Y delta 54 zcmZo*ZeX5J$as0;X>-O~6IUs4UTI?%V3cCxxHj>%jtG#x3gusi(zhlHGv)#S@O2Oz diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f4201d072fd9f5f3f799a9bbb64688919b6fe0b0..f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2 100644 GIT binary patch delta 295 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#PCOa&oK5ih7@FWbb9Q!tgiY*3YQo0Ay@ zn1E^*0kttA)J|?;{s&VGHuhp0vjEHF$t;#o(FqIrfkuEtnKs{LF=v|mnOkJD275o_ zWD$0e$)`E=p=L5e&3v$2Xfiiv#pLTeB9o_c7EdnW5Sy&Pr8{{$huG$1t`ern&72~W zU-NvEg*X?e9B4eqQOr?HjEr3N99Mu=iBERm6=ydzFwkH%V4r-BOPmKR>A-OnC@Bk) aoE*l-2Q*4>b1B~{#>vJUf}0Hlnppt;Yf)nW delta 317 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-Rc8rh-sTFPj%cT4Z9!DX2<0n95$Z&B=@c zOp{AEL?*X0{{~85Y-1K+fk_{dn>?At5-Q3B6`iny^bg2lB=3TiJ8)bD iDwhQ*pB%==2QhwgDc>qas7pnl<~MX!Z8i{SW&r>yaaMr< diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index a284f6a..bb8e8a7 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8193,6 +8193,134 @@ func (x *GuideConfig) GetSkip() int32 { return 0 } +//娃娃机配置视频 +// etcd /game/machine_config +type MachineConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Info []*MachineInfo `protobuf:"bytes,2,rep,name=Info,proto3" json:"Info,omitempty"` +} + +func (x *MachineConfig) Reset() { + *x = MachineConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MachineConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineConfig) ProtoMessage() {} + +func (x *MachineConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[86] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MachineConfig.ProtoReflect.Descriptor instead. +func (*MachineConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{86} +} + +func (x *MachineConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *MachineConfig) GetInfo() []*MachineInfo { + if x != nil { + return x.Info + } + return nil +} + +type MachineInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MachineId int32 `protobuf:"varint,1,opt,name=MachineId,proto3" json:"MachineId,omitempty"` //娃娃机Id + AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` + ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` +} + +func (x *MachineInfo) Reset() { + *x = MachineInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MachineInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineInfo) ProtoMessage() {} + +func (x *MachineInfo) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MachineInfo.ProtoReflect.Descriptor instead. +func (*MachineInfo) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{87} +} + +func (x *MachineInfo) GetMachineId() int32 { + if x != nil { + return x.MachineId + } + return 0 +} + +func (x *MachineInfo) GetAppId() int64 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *MachineInfo) GetServerSecret() string { + if x != nil { + return x.ServerSecret + } + return "" +} + +func (x *MachineInfo) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + // etcd /game/match_audience type MatchAudience struct { state protoimpl.MessageState @@ -8207,7 +8335,7 @@ type MatchAudience struct { func (x *MatchAudience) Reset() { *x = MatchAudience{} if protoimpl.UnsafeEnabled { - mi := &file_common_proto_msgTypes[86] + mi := &file_common_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8220,7 +8348,7 @@ func (x *MatchAudience) String() string { func (*MatchAudience) ProtoMessage() {} func (x *MatchAudience) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[86] + mi := &file_common_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8233,7 +8361,7 @@ func (x *MatchAudience) ProtoReflect() protoreflect.Message { // Deprecated: Use MatchAudience.ProtoReflect.Descriptor instead. func (*MatchAudience) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{86} + return file_common_proto_rawDescGZIP(), []int{88} } func (x *MatchAudience) GetPlatform() string { @@ -8271,7 +8399,7 @@ type SpiritConfig struct { func (x *SpiritConfig) Reset() { *x = SpiritConfig{} if protoimpl.UnsafeEnabled { - mi := &file_common_proto_msgTypes[87] + mi := &file_common_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8284,7 +8412,7 @@ func (x *SpiritConfig) String() string { func (*SpiritConfig) ProtoMessage() {} func (x *SpiritConfig) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[87] + mi := &file_common_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8297,7 +8425,7 @@ func (x *SpiritConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SpiritConfig.ProtoReflect.Descriptor instead. func (*SpiritConfig) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{87} + return file_common_proto_rawDescGZIP(), []int{89} } func (x *SpiritConfig) GetPlatform() string { @@ -8337,7 +8465,7 @@ type RoomType struct { func (x *RoomType) Reset() { *x = RoomType{} if protoimpl.UnsafeEnabled { - mi := &file_common_proto_msgTypes[88] + mi := &file_common_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8350,7 +8478,7 @@ func (x *RoomType) String() string { func (*RoomType) ProtoMessage() {} func (x *RoomType) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[88] + mi := &file_common_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8363,7 +8491,7 @@ func (x *RoomType) ProtoReflect() protoreflect.Message { // Deprecated: Use RoomType.ProtoReflect.Descriptor instead. func (*RoomType) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{88} + return file_common_proto_rawDescGZIP(), []int{90} } func (x *RoomType) GetPlatform() string { @@ -8428,7 +8556,7 @@ type RoomConfig struct { func (x *RoomConfig) Reset() { *x = RoomConfig{} if protoimpl.UnsafeEnabled { - mi := &file_common_proto_msgTypes[89] + mi := &file_common_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8441,7 +8569,7 @@ func (x *RoomConfig) String() string { func (*RoomConfig) ProtoMessage() {} func (x *RoomConfig) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[89] + mi := &file_common_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8454,7 +8582,7 @@ func (x *RoomConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RoomConfig.ProtoReflect.Descriptor instead. func (*RoomConfig) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{89} + return file_common_proto_rawDescGZIP(), []int{91} } func (x *RoomConfig) GetPlatform() string { @@ -9866,56 +9994,70 @@ var file_common_proto_rawDesc = []byte{ 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x54, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, - 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x81, 0x01, + 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, + 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, + 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, + 0x64, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, + 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, - 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, - 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, - 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, - 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, - 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, - 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, - 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, - 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, + 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, + 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, + 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, + 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -9930,7 +10072,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 100) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 102) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -10018,36 +10160,38 @@ var file_common_proto_goTypes = []interface{}{ (*AwardLogInfo)(nil), // 83: webapi.AwardLogInfo (*AnnouncerLogInfo)(nil), // 84: webapi.AnnouncerLogInfo (*GuideConfig)(nil), // 85: webapi.GuideConfig - (*MatchAudience)(nil), // 86: webapi.MatchAudience - (*SpiritConfig)(nil), // 87: webapi.SpiritConfig - (*RoomType)(nil), // 88: webapi.RoomType - (*RoomConfig)(nil), // 89: webapi.RoomConfig - nil, // 90: webapi.Platform.BindTelRewardEntry - nil, // 91: webapi.PlayerData.RankScoreEntry - nil, // 92: webapi.ItemShop.AwardEntry - nil, // 93: webapi.VIPcfg.AwardEntry - nil, // 94: webapi.VIPcfg.Privilege1Entry - nil, // 95: webapi.VIPcfg.Privilege7Entry - nil, // 96: webapi.VIPcfg.Privilege9Entry - nil, // 97: webapi.ActInviteConfig.PayScoreEntry - nil, // 98: webapi.SkinLevel.UpItemEntry - nil, // 99: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 100: server.DB_GameFree - (*server.DB_GameItem)(nil), // 101: server.DB_GameItem + (*MachineConfig)(nil), // 86: webapi.MachineConfig + (*MachineInfo)(nil), // 87: webapi.MachineInfo + (*MatchAudience)(nil), // 88: webapi.MatchAudience + (*SpiritConfig)(nil), // 89: webapi.SpiritConfig + (*RoomType)(nil), // 90: webapi.RoomType + (*RoomConfig)(nil), // 91: webapi.RoomConfig + nil, // 92: webapi.Platform.BindTelRewardEntry + nil, // 93: webapi.PlayerData.RankScoreEntry + nil, // 94: webapi.ItemShop.AwardEntry + nil, // 95: webapi.VIPcfg.AwardEntry + nil, // 96: webapi.VIPcfg.Privilege1Entry + nil, // 97: webapi.VIPcfg.Privilege7Entry + nil, // 98: webapi.VIPcfg.Privilege9Entry + nil, // 99: webapi.ActInviteConfig.PayScoreEntry + nil, // 100: webapi.SkinLevel.UpItemEntry + nil, // 101: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 102: server.DB_GameFree + (*server.DB_GameItem)(nil), // 103: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 90, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 92, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 100, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 102, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 100, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 91, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 102, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 93, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo @@ -10060,7 +10204,7 @@ var file_common_proto_depIdxs = []int32{ 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 92, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 94, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward @@ -10081,14 +10225,14 @@ var file_common_proto_depIdxs = []int32{ 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 93, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 94, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 95, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 96, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 95, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 96, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 97, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 98, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 97, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 99, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward @@ -10105,24 +10249,25 @@ var file_common_proto_depIdxs = []int32{ 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 101, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 103, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 98, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 99, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 100, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 101, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo - 32, // 80: webapi.RoomConfig.Cost:type_name -> webapi.ItemInfo - 32, // 81: webapi.RoomConfig.Reward:type_name -> webapi.ItemInfo - 82, // [82:82] is the sub-list for method output_type - 82, // [82:82] is the sub-list for method input_type - 82, // [82:82] is the sub-list for extension type_name - 82, // [82:82] is the sub-list for extension extendee - 0, // [0:82] is the sub-list for field type_name + 87, // 80: webapi.MachineConfig.Info:type_name -> webapi.MachineInfo + 32, // 81: webapi.RoomConfig.Cost:type_name -> webapi.ItemInfo + 32, // 82: webapi.RoomConfig.Reward:type_name -> webapi.ItemInfo + 83, // [83:83] is the sub-list for method output_type + 83, // [83:83] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -11164,7 +11309,7 @@ func file_common_proto_init() { } } file_common_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MatchAudience); i { + switch v := v.(*MachineConfig); i { case 0: return &v.state case 1: @@ -11176,7 +11321,7 @@ func file_common_proto_init() { } } file_common_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpiritConfig); i { + switch v := v.(*MachineInfo); i { case 0: return &v.state case 1: @@ -11188,7 +11333,7 @@ func file_common_proto_init() { } } file_common_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomType); i { + switch v := v.(*MatchAudience); i { case 0: return &v.state case 1: @@ -11200,6 +11345,30 @@ func file_common_proto_init() { } } file_common_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpiritConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RoomConfig); i { case 0: return &v.state @@ -11218,7 +11387,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 100, + NumMessages: 102, NumExtensions: 0, NumServices: 0, }, From da83b674d2ed22a8346829c7deba00474052e0f1 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 15:48:23 +0800 Subject: [PATCH 077/153] =?UTF-8?q?public=20=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From df04ede6710870af568d430e48098368b7f7fed2 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 15:53:09 +0800 Subject: [PATCH 078/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 682e8f3..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 682e8f3ccf7d1056210c3ee68c9d1db271d9069d +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 9ef1f9d896b88a95586f10fe49a3346220c01285 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 16:09:43 +0800 Subject: [PATCH 079/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 4 ++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index b0078c4..11fddd2 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -126,7 +126,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf return nil } - machineId := scene.DbGameFree.GetId() % 6080000 + machineId := scene.GetDBGameFree().GetId() % 6080000 appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) if serverSecret == "" || appId == 0 { @@ -158,7 +158,7 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) } pack := &clawdoll.SCCLAWDOLLSendToken{ - LogicId: scene.DbGameFree.GetId(), + LogicId: scene.DBGameFree.GetId(), Appid: msg.Appid, Token: token, } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 114e41c..713da22 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -284,7 +284,7 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce pack := &machine.SMGetToken{} pack.Snid = p.SnId - machineId := s.DbGameFree.GetId() % 6080000 + machineId := s.DBGameFree.GetId() % 6080000 appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) if serverSecret == "" || appId == 0 { From fe375fb15f7761cd1d3fbfa9a1a25be7e9072e10 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 16:22:47 +0800 Subject: [PATCH 080/153] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 1 - public | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index ea9d138..6138a53 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -259,7 +259,6 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf for i, _ := range machinedoll.MachineMgr.ConnMap { info := &machine.DollMachine{} info.Id = int32(i) - info.VideoAddr = "www.baidu.com" msg.Data = append(msg.Data, info) } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) diff --git a/public b/public index fd8bef9..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 85a115809c9243225d50aecf605c3182962310d9 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 16:48:21 +0800 Subject: [PATCH 081/153] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A8=83=E5=A8=83?= =?UTF-8?q?=E6=9C=BA=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From d16c1a188703e501e5e666d9686c8eef81870ac4 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 17:15:05 +0800 Subject: [PATCH 082/153] =?UTF-8?q?=E4=BF=AE=E6=94=B9log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/srvsessmgr.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gamesrv/base/srvsessmgr.go b/gamesrv/base/srvsessmgr.go index c401c26..3e95b69 100644 --- a/gamesrv/base/srvsessmgr.go +++ b/gamesrv/base/srvsessmgr.go @@ -1,7 +1,6 @@ package base import ( - "fmt" "mongo.games.com/game/common" "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" @@ -32,7 +31,7 @@ func (this *SrvSessMgr) OnRegiste(s *netlib.Session) { } else if srvInfo.GetType() == 10 { logger.Logger.Warn("(this *SrvSessMgr) OnRegiste (Machine):", s) s.Send(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}) - fmt.Printf("与娃娃机服务器连接成功\n") + logger.Logger.Info("与娃娃机服务器连接成功\n") } } } From c4d58262de8010f6fb3d5dd9a73285513a7453a7 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 17:50:19 +0800 Subject: [PATCH 083/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B5=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 9 +- gamesrv/clawdoll/action_clawdoll.go | 20 ++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 12 ++- machine/action/action_server.go | 1 + protocol/clawdoll/clawdoll.pb.go | 112 ++++++++++++----------- protocol/clawdoll/clawdoll.proto | 1 + protocol/machine/machine.pb.go | 86 ++++++++++------- protocol/machine/machine.proto | 2 + 8 files changed, 142 insertions(+), 101 deletions(-) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index bec0917..91d8a24 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "math/rand" + "mongo.games.com/game/protocol/webapi" "strconv" "time" @@ -2551,15 +2552,15 @@ func (this *Scene) TryRelease() { this.Destroy(true) } } -func (this *Scene) GetMachineServerSecret(MachineId int32, platform string) (AppId int64, ServerSecret string) { +func (this *Scene) GetMachineServerInfo(MachineId int32, platform string) *webapi.MachineInfo { config := ConfigMgrInst.GetConfig(platform).MachineConfig if config == nil { - return 0, "" + return nil } for _, info := range config.Info { if info.MachineId == MachineId { - return info.AppId, info.ServerSecret + return info } } - return 0, "" + return nil } diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 11fddd2..75e5fd2 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -127,14 +127,17 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf } machineId := scene.GetDBGameFree().GetId() % 6080000 - appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) - if serverSecret == "" || appId == 0 { + machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { return nil } - pack.ServerSecret = serverSecret - pack.AppId = appId + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) + + pack.ServerSecret = machineInfo.ServerSecret + pack.AppId = machineInfo.AppId + pack.StreamId = machineInfo.StreamId + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } return nil @@ -158,9 +161,10 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) } pack := &clawdoll.SCCLAWDOLLSendToken{ - LogicId: scene.DBGameFree.GetId(), - Appid: msg.Appid, - Token: token, + LogicId: scene.DBGameFree.GetId(), + Appid: msg.Appid, + Token: token, + StreamId: msg.StreamId, } p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 713da22..8d56913 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -285,14 +285,16 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce pack.Snid = p.SnId machineId := s.DBGameFree.GetId() % 6080000 - appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) - if serverSecret == "" || appId == 0 { + machineinfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineinfo == nil { return } - pack.ServerSecret = serverSecret - pack.AppId = appId + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId) + + pack.ServerSecret = machineinfo.ServerSecret + pack.AppId = machineinfo.AppId + pack.StreamId = machineinfo.StreamId sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 6138a53..48252c6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -300,6 +300,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info.Snid = msg.Snid info.Token = token info.Appid = msg.AppId + info.StreamId = msg.StreamId session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 010b9fb..098f4ca 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -881,9 +881,10 @@ type SCCLAWDOLLSendToken struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LogicId int32 `protobuf:"varint,1,opt,name=LogicId,proto3" json:"LogicId,omitempty"` - Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + LogicId int32 `protobuf:"varint,1,opt,name=LogicId,proto3" json:"LogicId,omitempty"` + Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` + Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *SCCLAWDOLLSendToken) Reset() { @@ -939,6 +940,13 @@ func (x *SCCLAWDOLLSendToken) GetToken() string { return "" } +func (x *SCCLAWDOLLSendToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + type CLAWDOLLWaitPlayers struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1145,59 +1153,61 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, + 0x6b, 0x65, 0x6e, 0x22, 0x77, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x63, 0x0a, 0x13, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, - 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, - 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, - 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, - 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, - 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, - 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, - 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, - 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, - 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, - 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, + 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, + 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, + 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, + 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, + 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, + 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, + 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, + 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, + 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index a3f075b..2dea4f0 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -117,6 +117,7 @@ message SCCLAWDOLLSendToken { int32 LogicId = 1; int64 Appid = 2; string Token = 3; + string StreamId = 4; } message CLAWDOLLWaitPlayers { diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 464b384..e3cc943 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -505,6 +505,7 @@ type SMGetToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *SMGetToken) Reset() { @@ -560,15 +561,23 @@ func (x *SMGetToken) GetServerSecret() string { return "" } +func (x *SMGetToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + //返回token type MSSendToken struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` + Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` + Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *MSSendToken) Reset() { @@ -624,6 +633,13 @@ func (x *MSSendToken) GetToken() string { return "" } +func (x *MSSendToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -661,40 +677,44 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x64, 0x64, 0x72, 0x22, 0x76, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, - 0x4d, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xb9, - 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, - 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, - 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, - 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, - 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, - 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0b, 0x4d, + 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, + 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, + 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, + 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, + 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, + 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 472cb4b..a109267 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -64,10 +64,12 @@ message SMGetToken{ int32 Snid = 1; int64 AppId = 2; string ServerSecret = 3; + string StreamId = 4; } //返回token message MSSendToken{ int32 Snid = 1; int64 Appid = 2; string Token = 3; + string StreamId = 4; } \ No newline at end of file From 92bf5fe16ec0d28c272a37444c02e8ecad8b7c10 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:09:09 +0800 Subject: [PATCH 084/153] review --- gamesrv/action/action_server.go | 91 +++++++++++++++++---------------- gamesrv/base/scene.go | 4 +- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 8826281..664ab9b 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -73,7 +73,7 @@ func HandleWGBuyRecTimeItem(session *netlib.Session, packetId int, data interfac // return nil //} -func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) error { +func CreateScene(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("receive CreateScene %v", data) msg, ok := data.(*server.WGCreateScene) if !ok { @@ -86,52 +86,53 @@ func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) return nil } +func DestroyScene(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Trace("receive WGDestroyScene:", data) + msg, ok := data.(*server.WGDestroyScene) + if !ok { + return nil + } + + if !msg.IsGrace { + // 立刻删除,不管游戏是否结束 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + return nil + } + + // 游戏结束后删除房间 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if s.IsHundredScene() || s.Gaming { + s.SetGraceDestroy() + } else { + if s.IsMatchScene() { + s.SetGraceDestroy() + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + } + + return nil +} + func init() { // 创建房间 - netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateSceneHandler) - - //删除场景 - // 立刻删除,不管游戏是否结束 - netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server.WGDestroyScene{} - })) - netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - logger.Logger.Trace("receive WGDestroyScene:", pack) - msg, ok := pack.(*server.WGDestroyScene) - if !ok { - return nil - } - if !msg.IsGrace { - // 立刻删除,不管游戏是否结束 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } else { - // 游戏结束后删除房间 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if s.IsHundredScene() || s.Gaming { - s.SetGraceDestroy(true) - } else { - if s.IsMatchScene() { - s.SetGraceDestroy(true) - } - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } - } - - return nil - })) + netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateScene) + // 删除房间 + netlib.Register(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), &server.WGDestroyScene{}, DestroyScene) //玩家进入 netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_PLAYERENTER), netlib.PacketFactoryWrapper(func() interface{} { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 5f5b0e3..66b37f2 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -297,8 +297,8 @@ func (this *Scene) SetScenePolicy(sp ScenePolicy) { func (this *Scene) GetGraceDestroy() bool { return this.graceDestroy } -func (this *Scene) SetGraceDestroy(graceDestroy bool) { - this.graceDestroy = graceDestroy +func (this *Scene) SetGraceDestroy() { + this.graceDestroy = true } func (this *Scene) GetCpControlled() bool { From 7c00ec5067ae6e8868df7d581c77bddff91c6e9c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:42:49 +0800 Subject: [PATCH 085/153] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_bag.go | 14 ++++++++++++-- worldsrv/trascate_webapi.go | 10 ++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dbproxy/svc/u_bag.go b/dbproxy/svc/u_bag.go index 48afcfd..cc07df2 100644 --- a/dbproxy/svc/u_bag.go +++ b/dbproxy/svc/u_bag.go @@ -101,7 +101,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { for id, v := range args.BagItem { if item, exist := bag.BagItem[id]; !exist { if v.ItemNum <= 0 { - continue + err = errors.New("item num not enough") + break } bag.BagItem[id] = &model.Item{ ItemId: v.ItemId, @@ -110,7 +111,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { } } else { if v.ItemNum < 0 && -v.ItemNum > item.ItemNum { - v.ItemNum = -item.ItemNum + err = errors.New("item num not enough") + break } item.ItemNum += v.ItemNum } @@ -119,10 +121,18 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { vCard = v.ItemNum } } + + if err != nil { + *ret = false + logger.Logger.Errorf("AddBagItem error: %v", err) + return err + } + _, err = cbag.Upsert(bson.M{"_id": bag.BagId}, bag) if err != nil { *ret = false logger.Logger.Info("AddBagItem error ", err) + return err } // v卡返还 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 454fedd..bb2e4e6 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3761,15 +3761,21 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + _, _, ok := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, GainWay: msg.GetTypeId(), Operator: "system", Remark: msg.GetRemark(), }) + if !ok { + logger.Logger.Errorf("player delete %v err: %v", msg, err) + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "修改道具失败" + return common.ResponseTag_Ok, pack + } pack.Tag = webapiproto.TagCode_SUCCESS - pack.Msg = "AddItem success" + pack.Msg = "修改道具成功" return common.ResponseTag_Ok, pack } else { BagMgrSingleton.AddItemsOffline(msg.Platform, msg.Snid, items, msg.GetTypeId(), From e23f33c5696bd8e429c247d71bb9f8fbe6454500 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:15 +0800 Subject: [PATCH 086/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From c4a0a31df87209c880c42d733746c83c4b0d90c0 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:50 +0800 Subject: [PATCH 087/153] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A8=83=E5=A8=83?= =?UTF-8?q?=E6=9C=BAID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index fd8bef9..cbad299 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit cbad2992a1ce71327def46ea01ebbcc8800bee89 From 27eb944329cde8a3cd05511c26d90bf07f6a930a Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:49:16 +0800 Subject: [PATCH 088/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 24124 -> 24124 bytes data/DB_GameFree.json | 8 ++++---- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes gamesrv/clawdoll/scene_clawdoll.go | 23 +++++++++++++++++++++++ xlsx/DB_GameFree.xlsx | Bin 65652 -> 65617 bytes 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 10d42c96c3bcf614300371a1a122b24f45367bd7..93a0b0dac5767b64a722fe8e0c39d8872bfd7cab 100644 GIT binary patch delta 41 pcmdn9hjGsy#tj={CZCDsp1eCI8%irp4vzJlydg$+@<}kQ1puW<6FmR` delta 41 pcmdn9hjGsy#tj={CeMl0oqRXO6HEukdNMLi-Wa1Z`6QI32>_085nliR diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 564a1f9..b08696a 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -6674,7 +6674,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6707,7 +6707,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6740,7 +6740,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 @@ -6773,7 +6773,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 12cce5f4165edd740dfa268af25289251ffeba4c..3094b57366ddb3f45bda1c2b49ca90dda8ad3167 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ1(m-IrEfs# zn`r98IUwf4?17mJRtK~nrXOq%kdN*Tn7Ls4lsLieXjuD*g)5eW1?&)*Mwr844!Z+& d5X@qj!7vBF3`TK?5;IZ(|9n+LQPrXQvc<_>iGVdg{3EhutQ)5;Pn8Kg(wCB#qU5J U4t9VNJI5lRN53$0G0+wQ0AwmWH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2..fb5fdb1771a150efb4d85f47e36048d82637a53a 100644 GIT binary patch delta 451 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-Rc8rh-sTFPj%cT4Z8JBUJE08#7dpYqAuh z1ysKrOn)!i=43_zrpYB7B9q&hcLAj@wlNDZL8T`w zS%8si@(UhYOyee-@xGBobsI2DqnH>Oxg0pI0)s+!vIDR98rdodqe;L delta 381 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#PCOa&oK5ih7@FWbb9MyMbcRPaI@^JFPT z3z+_1HmH8N&B=@cOp{AEL?*X0?}AECSjZ2QzSzbLlnG)nfN26-3KC_RJekE3Q|;!v zEE0^9uk#2nGEHV6_x;Ag*XJQ2a@j`2= diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 3347ea6..f87890b 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -102,12 +102,35 @@ func (this *SceneEx) BroadcastPlayerLeave(p *base.Player, reason int) { // 玩家进入事件 func (this *SceneEx) OnPlayerEnter(p *base.Player, reason int) { this.BroadcastPlayerEnter(p, reason) + + machineId := this.GetDBGameFree().GetId() % 6080000 + machineInfo := this.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + return + } + + if this.GetPlayerNum() > 0 { + // 发送http Get请求 打开直播间流 + + } } // 玩家离开事件 func (this *SceneEx) OnPlayerLeave(p *base.Player, reason int) { this.delPlayer(p) this.BroadcastPlayerLeave(p, reason) + + machineId := this.GetDBGameFree().GetId() % 6080000 + machineInfo := this.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + return + } + + if this.GetPlayerNum() <= 0 { + // 发送http Get请求 关闭直播间流 + + } + } func (this *SceneEx) SceneDestroy(force bool) { //销毁房间 diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index f1116a6e4687dddf5b27d2f87645226c5d2e981c..5e2e2f1ccfa03ed71c1b3ad54ff6cd182224331f 100644 GIT binary patch delta 49272 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
      x(}vD93OQ?D}O0i`+jBQ7S9IBj5v= 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 W`zLw)!~?JPi4L9v#ryU--~R{PC5Czc From 9cdc0f24c7f2e8f61862cd0432b52b62faddbf7e Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:49:37 +0800 Subject: [PATCH 089/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index fd8bef9..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From d8f01f39ea50eb5fc309f56bb5416b107bdaf44b Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:52:45 +0800 Subject: [PATCH 090/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 24124 -> 24124 bytes data/DB_GameFree.json | 8 ++++---- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameFree.xlsx | Bin 65652 -> 65611 bytes 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 10d42c96c3bcf614300371a1a122b24f45367bd7..93a0b0dac5767b64a722fe8e0c39d8872bfd7cab 100644 GIT binary patch delta 41 pcmdn9hjGsy#tj={CZCDsp1eCI8%irp4vzJlydg$+@<}kQ1puW<6FmR` delta 41 pcmdn9hjGsy#tj={CeMl0oqRXO6HEukdNMLi-Wa1Z`6QI32>_085nliR diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 564a1f9..b08696a 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -6674,7 +6674,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6707,7 +6707,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6740,7 +6740,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 @@ -6773,7 +6773,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 12cce5f4165edd740dfa268af25289251ffeba4c..f749192cb45516ddd8d43f5177f689fab68c6c6b 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Iq;j0RX>uu!1e?AVEdFf!R}~S`-p`rmV*WC5SRj(LAX2wb{Np0J5YzhJP7j$ T*aJ%J9E*S+{ld(}KwAg^W8yqD literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IZ(|9n+LQPrXQvc<_>iGVdg{3EhutQ)5;Pn8Kg(wCB#qU5J U4t9VNJI5lRN53$0G0+wQ0AwmWH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2..aa58b67c7d1ea52a98e78c86dc459b7bd13fbbd8 100644 GIT binary patch delta 149 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-RoC0*p{mIhbfK+va3O0j9|%93q?BnGIMc zi?EAKKFy&&c>S%8si^9!CDMhJ6qDc=T3HjYI=vzef# i9hk+#WzF&U3bTOFWJZ3m$szpRlT-KvH-F$i%mM&TX)6){ delta 218 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK1Q=nWy=+iXxy{Lp0!)Hz9E*TT7`>pH zdf7I&FdMT%g_)qj2WIh1KEYuG6=jBsK3FcanVYko87j;QGvkoltnP*Egk6w>%bMfy6=ngU$&CDBlSBBsCvRmIVC35Tf&VZI0GSv&9RL6T diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index f1116a6e4687dddf5b27d2f87645226c5d2e981c..ac8e3acd5896bd420cd510af7f056132f9b8d1cb 100644 GIT binary patch delta 19291 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 delta 19333 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 Date: Wed, 4 Sep 2024 11:18:04 +0800 Subject: [PATCH 091/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 17 ----------------- gamesrv/clawdoll/scene_clawdoll.go | 8 ++++++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 11 +++++++++++ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 75e5fd2..bd83ddc 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -2,7 +2,6 @@ package clawdoll import ( "mongo.games.com/game/common" - rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/machine" @@ -60,15 +59,6 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data return nil } - scene := p.GetScene() - if scene == nil { - return nil - } - sceneEx, ok := scene.ExtraData.(*SceneEx) - if !ok { - return nil - } - switch msg.TypeId { case 1: if msg.Result == 1 { @@ -82,13 +72,6 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data } else { logger.Logger.Tracef("下抓失败!!!!!!!!!!!!snid = ", msg.Snid) } - - scene.ChangeSceneState(rule.ClawDollSceneStateBilled) - - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(scene) - ClawdollSendPlayerInfo(scene) } } return nil diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index f87890b..8c3070d 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -311,7 +311,7 @@ func (this *SceneEx) GetPlayGrabType(player *PlayerEx) int32 { return rule.ClawWeak } - if this.RoundId%100 == 0 && this.RoundId != 0 { + if this.RoundId/2 == 0 && this.RoundId != 0 { return rule.ClawStrong } @@ -371,7 +371,11 @@ func (this *SceneEx) SetPlayingState(state int32) { // 时间到 系统开始下抓 func (this *SceneEx) TimeOutPlayGrab() bool { - this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), rule.ClawWeak) + playerEx := this.players[this.playingSnid] + if playerEx != nil { + grapType := this.GetPlayGrabType(playerEx) + this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), grapType) + } return true } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 8d56913..f2c46e0 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -668,6 +668,12 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -698,6 +704,11 @@ func (this *PlayGame) OnTick(s *base.Scene) { logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) return } } From 5b6a5ad5d3882a09f76f492d957dbacd98a99cda Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 11:54:59 +0800 Subject: [PATCH 092/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scenemgr.go | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 42c33e6..702bc49 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -192,25 +192,26 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode } si := &webapiproto.RoomInfo{ - Platform: platformName, - SceneId: int32(s.sceneId), - GameId: int32(s.gameId), - GameMode: int32(s.gameMode), - SceneMode: int32(s.sceneMode), - GroupId: s.groupId, - Creator: s.creator, - ReplayCode: s.replayCode, - Params: common.CopySliceInt64ToInt32(s.params), - PlayerCnt: int32(len(s.players) - s.robotNum), - RobotCnt: int32(s.robotNum), - CreateTime: s.createTime.Unix(), - BaseScore: s.dbGameFree.BaseScore, - GameFreeId: s.dbGameFree.GetId(), - MaxRound: s.totalRound, - Password: s.GetPassword(), - CostType: s.GetCostType(), - Voice: s.GetVoice(), - CurrRound: s.currRound, + Platform: platformName, + SceneId: int32(s.sceneId), + GameId: int32(s.gameId), + GameMode: int32(s.gameMode), + SceneMode: int32(s.sceneMode), + GroupId: s.groupId, + GameFreeId: s.dbGameFree.GetId(), + Creator: s.creator, + ReplayCode: s.replayCode, + Params: common.CopySliceInt64ToInt32(s.params), + PlayerCnt: int32(len(s.players) - s.robotNum), + RobotCnt: int32(s.robotNum), + CreateTime: s.createTime.Unix(), + BaseScore: s.dbGameFree.BaseScore, + RoomConfigId: s.GetRoomConfigId(), + CurrRound: s.currRound, + MaxRound: s.totalRound, + Password: s.GetPassword(), + CostType: s.GetCostType(), + Voice: s.GetVoice(), } if s.starting { si.Start = 1 From 12623d7b94a152e5e7225061dad5956705b3107c Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 13:46:10 +0800 Subject: [PATCH 093/153] =?UTF-8?q?=E5=A2=9E=E5=8A=A0log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 82b11a7..7f32058 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -2556,6 +2556,7 @@ func (this *Scene) TryRelease() { } func (this *Scene) GetMachineServerInfo(MachineId int32, platform string) *webapi.MachineInfo { config := ConfigMgrInst.GetConfig(platform).MachineConfig + logger.Logger.Tracef("========GetMachineServerInfo=========== platform=%s, MachineId=%d ,config = %v", platform, MachineId, config) if config == nil { return nil } From fb8bfbde87e45c106fc8421ff4aaf78a0176dffe Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 14:03:37 +0800 Subject: [PATCH 094/153] =?UTF-8?q?=E5=88=AA=E9=99=A4log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f2c46e0..68f055c 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -701,7 +701,7 @@ func (this *PlayGame) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { if sceneEx.TimeOutPlayGrab() { - logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) + //logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } s.ChangeSceneState(rule.ClawDollSceneStateBilled) From ac86a5e294359a7b0e3bfa880982a2f637422844 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:21:21 +0800 Subject: [PATCH 095/153] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=AB=9E=E6=8A=80?= =?UTF-8?q?=E9=A6=86=E6=B5=8B=E8=AF=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 74 ------------------------------------------------ 1 file changed, 74 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index d78a051..cca9e12 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,80 +93,6 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) - - PlatformMgrSingleton.GetConfig("1").RoomType = map[int32]*webapi.RoomType{ - 1: { - Platform: "1", - Id: 1, - Name: "{\"zh\":\"话费赛\",\"kh\":\"话费赛\",\"vi\":\"话费赛\",\"en\":\"话费赛\"}", - On: 1, - SortId: 1, - }, - 2: { - Platform: "1", - Id: 2, - Name: "{\"zh\":\"物品赛\",\"kh\":\"物品赛\",\"vi\":\"物品赛\",\"en\":\"物品赛\"}", - On: 1, - SortId: 2, - }, - } - - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 1, - Name: "{\"zh\":\"1元话费赛\",\"kh\":\"1元话费赛\",\"vi\":\"1元话费赛\",\"en\":\"1元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 1, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 2, - Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 2, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { From 9c1fed84e9fad798cddf646d627a74b81f28a786 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:53:29 +0800 Subject: [PATCH 096/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=90=8E=E5=8F=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++++ worldsrv/scene.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index cca9e12..b60851a 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,6 +93,10 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) + // 竞技馆房间配置 + etcd.Register(etcd.ETCDKEY_RoomConfig, webapi.RoomConfig{}, handlerEvent) + // 竞技馆房间类型配置 + etcd.Register(etcd.ETCDKEY_RoomType, webapi.RoomType{}, handlerEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 333f90e..093a35e 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -514,8 +514,6 @@ func (this *Scene) lastScene(p *Player) { } func (this *Scene) DelPlayer(p *Player) bool { - FirePlayerLeaveScene(p, this) - this.sp.OnPlayerLeave(this, p) if p.scene != this { roomId := 0 if p.scene != nil { @@ -556,6 +554,8 @@ func (this *Scene) DelPlayer(p *Player) bool { if !p.IsRob { this.lastTime = time.Now() } + FirePlayerLeaveScene(p, this) + this.sp.OnPlayerLeave(this, p) return true } From 4a32df4ecfdc37657119f44bc8b4ca4ec56522f5 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 15:31:35 +0800 Subject: [PATCH 097/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index b60851a..606899b 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -485,7 +485,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c config := data.(*webapi.RoomType) PlatformMgrSingleton.UpdateRoomType(config) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) } case clientv3.EventTypeDelete: if plt == "" || len(param) == 0 { @@ -493,7 +493,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } PlatformMgrSingleton.DelRoomType(plt, int32(param[0])) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) } } From 88bbca47f1606bfe4eec07eeeec0410d831127ed Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 17:24:29 +0800 Subject: [PATCH 098/153] =?UTF-8?q?=E6=8E=A8=E5=B9=BF=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_player.go | 2 +- model/player.go | 3 ++- worldsrv/action_player.go | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dbproxy/svc/u_player.go b/dbproxy/svc/u_player.go index bf6b7c1..62cb522 100644 --- a/dbproxy/svc/u_player.go +++ b/dbproxy/svc/u_player.go @@ -227,7 +227,7 @@ func (svc *PlayerDataSvc) CreatePlayerDataByThird(args *model.CreatePlayer, ret var dataParams model.PlayerParams json.Unmarshal([]byte(a.Params), &dataParams) pd = model.NewPlayerDataThird(acc, name, args.HeadUrl, id, a.Channel, a.Platform, a.Params, - a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs) + a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs, a.ChannelId) if pd != nil { err = cplayerdata.Insert(pd) if err != nil { diff --git a/model/player.go b/model/player.go index ca719c8..c26829f 100644 --- a/model/player.go +++ b/model/player.go @@ -981,7 +981,7 @@ func NewPlayerData(acc string, name string, id int32, channel, platform string, } func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, platform string, params, tel string, - packTag, ip string, tagkey, accountType int32, deviceOS string) *PlayerData { + packTag, ip string, tagkey, accountType int32, deviceOS, channelId string) *PlayerData { if len(name) == 0 { logger.Logger.Trace("New player name is empty.") return nil @@ -992,6 +992,7 @@ func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, pla AccountId: acc, Name: name, Channel: channel, + ChannelId: channelId, Platform: platform, SnId: id, Head: rand.Int31n(common.HeadRange), diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index d800fbe..66abe75 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -1938,6 +1938,9 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) if (p.Channel == "" || p.Channel == "0") && p.Channel != msg.AppChannel { p.Channel = msg.AppChannel } + if ls.als.acc.ChannelId != "" && p.ChannelId == "" { + p.ChannelId = ls.als.acc.ChannelId + } if ls.clog != nil { PlayerSubjectSign.UpdateHeadUrl(p.SnId, ls.clog.HeadUrl) From 68a8e010cfeb5e3399c85ac78bcbc7b54f7f8145 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 5 Sep 2024 10:28:43 +0800 Subject: [PATCH 099/153] =?UTF-8?q?scene=E5=8F=AA=E8=83=BD=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E5=AF=B9=E5=BA=94=E7=9A=84=E5=A8=83=E5=A8=83=E6=9C=BA?= =?UTF-8?q?=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 14 +++++--------- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- machine/action/action_server.go | 8 ++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index c577f4e..fb287f2 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -35,15 +35,11 @@ func MSDollMachineListHandler(session *netlib.Session, packetId int, data interf } // 获取空闲娃娃机标识 -func GetFreeDollMachineId() int { - // 获取互斥锁 - MachineMapLock.Lock() - defer MachineMapLock.Unlock() - for i, v := range MachineMap { - if v.Status == false { - v.Status = true - return i - } +func GetFreeDollMachineId(id int32) int { + if MachineMap[int(id)] != nil && MachineMap[int(id)].MachineStatus == 1 { + return int(id) + } else { + return 0 } return 0 } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 68f055c..3d31f96 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,7 +67,8 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { - sceneEx.machineId = action.GetFreeDollMachineId() + machineId := s.DBGameFree.GetId() % 6080000 + sceneEx.machineId = action.GetFreeDollMachineId(machineId) } if sceneEx.machineId != 0 { machineStatus := action.GetDollMachineStatus(sceneEx.machineId) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 48252c6..afa8cd6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -169,7 +169,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid num := int64(1) for { // 读取数据 - logger.Logger.Trace("监听抓取结果返回!") + //logger.Logger.Trace("监听抓取结果返回!") buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { @@ -178,7 +178,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid } // 将读取到的数据按照 221 进行分割 parts := bytes.Split(buf[:n], []byte{221}) - fmt.Println("获取到的返回值:", parts) + //fmt.Println("获取到的返回值:", parts) instruction := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x00} instruction1 := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x01} // 遍历分割结果,打印出每个部分 @@ -187,11 +187,11 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 //fmt.Println("比较返回结果 part = ", part) if bytes.Contains(part, instruction) && num != 1 { - fmt.Printf("Part %d: %s\n", i+1, part) + //fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - fmt.Println("Failed to read response from server:", err) + //fmt.Println("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ From f056014c50a2133d50715f79e41f6e4ee0d5a9f7 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 11:24:46 +0800 Subject: [PATCH 100/153] =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/player.go | 4 ++-- model/player.go | 2 +- model/playergamedata.go | 2 +- worldsrv/playerinfo.go | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 9b29b76..7a8c0cb 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -149,7 +149,7 @@ func NewPlayer(sid int64, data []byte, ws, gs *netlib.Session) *Player { ShopLastLookTime: make(map[int32]int64), IsFoolPlayer: make(map[string]bool), }, - GameData: make(map[int32]*model.PlayerGameData), + GameData: make(map[string]*model.PlayerGameData), } if p.init(data) { @@ -383,7 +383,7 @@ func (this *Player) MarshalData(gameid int) (d []byte, e error) { if v.Platform == "" { v.Platform = this.Platform } - if v.Id == 0 { + if v.Id == "" { v.Id = k } } diff --git a/model/player.go b/model/player.go index c26829f..27cf053 100644 --- a/model/player.go +++ b/model/player.go @@ -348,7 +348,7 @@ type MatchFreeSignupRec struct { // 大厅玩家信息发送给游戏服 type WGPlayerInfo struct { *PlayerData - GameData map[int32]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 + GameData map[string]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 } type PlayerData struct { diff --git a/model/playergamedata.go b/model/playergamedata.go index 0fd4a07..be6677c 100644 --- a/model/playergamedata.go +++ b/model/playergamedata.go @@ -9,7 +9,7 @@ import ( type PlayerGameData struct { Platform string `bson:"-"` SnId int32 - Id int32 // 游戏id或场次id + Id string // 游戏id或场次id Data interface{} // 数据 } diff --git a/worldsrv/playerinfo.go b/worldsrv/playerinfo.go index 850c073..70b2f3c 100644 --- a/worldsrv/playerinfo.go +++ b/worldsrv/playerinfo.go @@ -30,7 +30,7 @@ type AllPlayerInfo struct { // PlayerInfo 玩家信息 type PlayerInfo struct { - GameData map[int32]*model.PlayerGameData // 游戏数据 + GameData map[string]*model.PlayerGameData // 游戏数据 } type PlayerInfoMgr struct { @@ -69,7 +69,7 @@ func (p *PlayerInfoMgr) Callback(player any, ret *internal.PlayerLoadReplay) { return } info := &PlayerInfo{ - GameData: make(map[int32]*model.PlayerGameData), + GameData: make(map[string]*model.PlayerGameData), } // 游戏数据 From bcac7f06d3ec65644ce2e427f2b383ca3b81f05e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 11:26:52 +0800 Subject: [PATCH 101/153] update public --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes public | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 3094b57366ddb3f45bda1c2b49ca90dda8ad3167..90627e23e7ffb7a0a0572e799000ac27ec367e02 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIUweP%>mknZVy;JP#oPnnEf#Kfz4Oq1iPbQ?IRYhSPmAjLtqBO6v7;I2kIc0 Z!7vBH494mZC3cQQK#zW5=3<~N1OR1nJT(9S literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ1(m-IrEfs# zn`r98IUwf4?17mJRtK~nrXOq%kdN*Tn7Ls4lsLieXjuD*g)5eW1?&)*Mwr844!Z+& d5X@qj!7vBF3`TK?5sYFG>d1mD!V`9lJ+1%xIu@{3Il;r9XQ+PsmUi4_39 C3SNT% delta 368 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl&FjZnc0ZOl+XuFX=6lNl$Ma0pJ`$Fvnl zi%f23-X+M!aj}hAfXNGD#)O6ZlY>|cprR~L(FKR(CQoLu#G>{tixteGr9ME5KxT1G z)?hsgRJ#c15}3IMT5Kn?v4KngiLye?ZRo6;9Kd#D@@H<5%^K`JjFXF*MJ9J}=z|0% zpXS&BRn7%f4l-m4r|IP7e1em2aTbGBC35`(^9#6}CvWEv+04!(%_NIz3()mZOpJ_N z4jfm3u9KbYz$-pEj4yDqF)$={@a0YxVHf1!vgUYvg;_voG9$m(*u0US Gi4_1>oN4v| diff --git a/public b/public index cbad299..06da9b3 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit cbad2992a1ce71327def46ea01ebbcc8800bee89 +Subproject commit 06da9b31abec96f3936877d7d73069e9852781ff From e33fe64bca043249041dd646bb3e5f2b9c11dcf6 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:20:36 +0800 Subject: [PATCH 102/153] =?UTF-8?q?=E6=88=BF=E9=97=B4=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scenemgr.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 702bc49..185f3f5 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -183,9 +183,9 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && - (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll && + (s.sceneMode == sceneMode || sceneMode == -1) && ((s.IsCustom() && isCustom) || !isCustom) && - (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0) { + (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0)) || isNeedFindAll { var platformName string if s.limitPlatform != nil { platformName = s.limitPlatform.IdStr From e1e805f9d870eae1f774ad3e1765bfd32579d7d7 Mon Sep 17 00:00:00 2001 From: kxdd Date: Thu, 5 Sep 2024 14:23:36 +0800 Subject: [PATCH 103/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B5=81=E7=A6=81=E6=AD=A2=E6=B5=81=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 13 +++ gamerule/clawdoll/logic.go | 8 ++ gamesrv/clawdoll/scene_clawdoll.go | 134 ++++++++++++++++++++++- gamesrv/clawdoll/scenepolicy_clawdoll.go | 16 ++- protocol/clawdoll/clawdoll.pb.go | 91 ++++++++------- protocol/clawdoll/clawdoll.proto | 1 + 6 files changed, 208 insertions(+), 55 deletions(-) diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index b1c0813..e855368 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -19,6 +19,7 @@ const ( ClawDollPlayerStatePlayGame //游戏中 ClawDollPlayerStateBilled //结算 ClawDollPlayerWaitPayCoin //等待下一局投币 + ClawDollPlayerAudience //观众状态 ClawDollPlayerStateMax ) @@ -58,3 +59,15 @@ const ( ClawStrong //强力抓 ClawGain //必出抓 ) + +const ( + RoomStat_Audience = iota //观众旁观者 + RoomStat_Wait //等待状态 +) + +// actionType : 1 禁止推流 ForbidRTCStream +// actionType : 2 恢复推流 ResumeRTCStream +const ( + Zego_ForbidRTCStream = iota + 1 + Zego_ResumeRTCStream = iota + 1 +) diff --git a/gamerule/clawdoll/logic.go b/gamerule/clawdoll/logic.go index 78f1018..45f603d 100644 --- a/gamerule/clawdoll/logic.go +++ b/gamerule/clawdoll/logic.go @@ -2,3 +2,11 @@ package clawdoll type Logic struct { } + +type ZegoForbidRTCResp struct { + Code int64 + Message string + RequestId string + Data any + Error int +} diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 8c3070d..fd0fbd7 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -2,15 +2,28 @@ package clawdoll import ( "container/list" + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "math/rand" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/proto" "mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/machine" + "mongo.games.com/game/protocol/webapi" + "mongo.games.com/goserver/core/basic" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/task" + "mongo.games.com/goserver/core/timer" "mongo.games.com/goserver/srvlib" + "net/http" + "net/url" + "time" ) type PlayerData struct { @@ -84,6 +97,10 @@ func (this *SceneEx) BroadcastPlayerEnter(p *base.Player, reason int) { pack.Data.HeadUrl = p.HeadUrl pack.Data.Name = p.Name + if playerEx, ok := p.ExtraData.(*PlayerEx); ok { + pack.Data.Stat = playerEx.clawDollState + } + proto.SetDefaults(pack) this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerEnter), pack, p.GetSid()) @@ -109,9 +126,9 @@ func (this *SceneEx) OnPlayerEnter(p *base.Player, reason int) { return } - if this.GetPlayerNum() > 0 { - // 发送http Get请求 打开直播间流 - + if this.GetPlayerNum() >= 1 && this.GetPlayerNum() <= 3 { + // 发送http Get请求 恢复直播间流 + //operateTask(this, 2, rule.Zego_ResumeRTCStream, p.Platform) } } @@ -126,9 +143,9 @@ func (this *SceneEx) OnPlayerLeave(p *base.Player, reason int) { return } - if this.GetPlayerNum() <= 0 { + if len(this.players) <= 0 { // 发送http Get请求 关闭直播间流 - + //operateTask(this, 2, rule.Zego_ForbidRTCStream, p.Platform) } } @@ -413,3 +430,110 @@ func (this *SceneEx) SendToMachine(pid int, msg interface{}) { logger.Logger.Error("MachineConn is nil !") } } + +// actionType : 1 禁止推流 ForbidRTCStream +// actionType : 2 恢复推流 ResumeRTCStream +func operateTask(sceneEx *SceneEx, times int, actionType int, platform string) { + + machineId := sceneEx.GetDBGameFree().GetId() % 6080000 + machineInfo := sceneEx.GetMachineServerInfo(machineId, platform) + if machineInfo == nil { + logger.Logger.Errorf("ZegoRTCStreamAction machineId: %v, platform: %v", machineId, platform) + return + } + + actionTypeStr := "NoneAction" + if actionType == rule.Zego_ForbidRTCStream { + actionTypeStr = "ForbidRTCStream" + } else { + actionTypeStr = "ResumeRTCStream" + } + + logger.Logger.Tracef("ZegoRTCStreamAction: actionTypeStr: %v, machineId: %v, machineInfo: %v", actionTypeStr, machineId, machineInfo) + + var resp rule.ZegoForbidRTCResp + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + resp = ZegoRTCStreamAction(actionTypeStr, machineInfo) + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + if resp.Error == 0 && resp.Code == 0 && resp.Message == "ok" { + + } else { + logger.Logger.Errorf("ZegoForbidRTCResp Code: %v, Error: %v, Message: %v", resp.Code, resp.Error, resp.Message) + if times > 0 { + timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { + operateTask(sceneEx, times-1, actionType, platform) + return true + }), nil, time.Second*5, 1) + } + } + }), "ZegoRTCStream_Action").Start() +} + +func ZegoRTCStreamAction(Action string, machineInfo *webapi.MachineInfo) rule.ZegoForbidRTCResp { + + var zegoForbidRTCResp = rule.ZegoForbidRTCResp{ + Error: 1, + } + + timestamp := time.Now().Unix() + queryParams := url.Values{} + + queryParams.Set("StreamId", "test") + queryParams.Set("Sequence", fmt.Sprintf("%d", timestamp)) + + // 生成16进制随机字符串(16位) + nonce := make([]byte, 8) + rand.Read(nonce) + hexNonce := hex.EncodeToString(nonce) + // 生成签名 + signature := generateSignature(uint32(machineInfo.AppId), machineInfo.ServerSecret, hexNonce, timestamp) + authParams := url.Values{} + authParams.Set("AppId", fmt.Sprintf("%d", uint32(machineInfo.AppId))) + //公共参数中的随机数和生成签名的随机数要一致 + authParams.Set("SignatureNonce", hexNonce) + authParams.Set("SignatureVersion", "2.0") + //公共参数中的时间戳和生成签名的时间戳要一致 + authParams.Set("Timestamp", fmt.Sprintf("%d", timestamp)) + authParams.Set("Signature", signature) + + //authParams.Set("IsTest", "true") + // rtc-api.zego.im 表示使用的产品是云通讯产品,包括了实时音视频(Express Video)、实时音频(Express Audio)、低延迟直播(L3) + addr := fmt.Sprintf("https://rtc-api.zego.im/?Action=%s&%s&%s", Action, authParams.Encode(), queryParams.Encode()) + + logger.Logger.Tracef("ZegoRTCStreamAction Get addr: %+v", addr) + + rsp, err := http.Get(addr) + if err != nil { + logger.Logger.Errorf("ZegoRTCStreamAction Get err: %v", err) + return zegoForbidRTCResp + } + defer rsp.Body.Close() + body, err := ioutil.ReadAll(rsp.Body) + if err != nil { + logger.Logger.Errorf("ZegoRTCStreamAction ioutil.ReadAll err: %v", err) + return zegoForbidRTCResp + } + logger.Logger.Tracef("ZegoRTCStreamAction Action: %+v, body: %+v", Action, string(body)) + + err = json.Unmarshal(body, &zegoForbidRTCResp) + if err != nil { + zegoForbidRTCResp.Error = 5 + logger.Logger.Errorf("ZegoRTCStreamAction %v %v", zegoForbidRTCResp, err.Error()) + return zegoForbidRTCResp + } + + zegoForbidRTCResp.Error = 0 + + return zegoForbidRTCResp +} + +// 生成签名 +// Signature=md5(AppId + SignatureNonce + ServerSecret + Timestamp) +func generateSignature(appId uint32, serverSecret, signatureNonce string, timeStamp int64) string { + data := fmt.Sprintf("%d%s%s%d", appId, signatureNonce, serverSecret, timeStamp) + + h := md5.New() + h.Write([]byte(data)) + return hex.EncodeToString(h.Sum(nil)) +} diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f2c46e0..f00ad1f 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -102,10 +102,7 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { baseScore := sceneEx.GetBaseScore() p.ExtraData = playerEx playerEx.Clear(baseScore) - - if sceneEx.playingSnid == 0 { - //sceneEx.playingSnid = p.GetSnId() - } + //playerEx.clawDollState = rule.ClawDollPlayerAudience p.MarkFlag(base.PlayerState_WaitNext) p.UnmarkFlag(base.PlayerState_Ready) @@ -113,7 +110,7 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) { //给自己发送房间信息 this.SendRoomInfo(s, p, sceneEx) - ClawdollBroadcastRoomWaitPlayers(s) + ClawdollSendRoomWaitPlayers(s, p) ClawdollBroadcastPlayingInfo(s) // 玩家数据发送 @@ -174,7 +171,7 @@ func (this *PolicyClawdoll) OnPlayerRehold(s *base.Scene, p *base.Player) { p.MarkFlag(base.PlayerState_Ready) } this.SendRoomInfo(s, p, sceneEx) - ClawdollBroadcastRoomWaitPlayers(s) + ClawdollSendRoomWaitPlayers(s, p) ClawdollBroadcastPlayingInfo(s) this.SendGetVideoToken(s, p, sceneEx) @@ -195,7 +192,7 @@ func (this *PolicyClawdoll) OnPlayerReturn(s *base.Scene, p *base.Player) { p.MarkFlag(base.PlayerState_Ready) } this.SendRoomInfo(s, p, sceneEx) - ClawdollBroadcastRoomWaitPlayers(s) + ClawdollSendRoomWaitPlayers(s, p) ClawdollBroadcastPlayingInfo(s) this.SendGetVideoToken(s, p, sceneEx) @@ -328,7 +325,7 @@ func ClawdollSendPlayerInfo(s *base.Scene) { } // 广播房间里所有等待玩家信息 -func ClawdollBroadcastRoomWaitPlayers(s *base.Scene) { +func ClawdollSendRoomWaitPlayers(s *base.Scene, p *base.Player) { pack := &clawdoll.CLAWDOLLWaitPlayers{} if sceneEx, ok := s.ExtraData.(*SceneEx); ok { @@ -340,13 +337,14 @@ func ClawdollBroadcastRoomWaitPlayers(s *base.Scene) { Head: proto.Int32(playerEx.Head), HeadUrl: proto.String(playerEx.HeadUrl), Name: proto.String(playerEx.Name), + Stat: proto.Int32(playerEx.clawDollState), } pack.WaitPlayersInfo = append(pack.WaitPlayersInfo, pd) } } - s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS), pack, 0) + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS), pack) } } diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 098f4ca..7f6bfba 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -1004,6 +1004,7 @@ type CLAWDOLLPlayerDigestInfo struct { Head int32 `protobuf:"varint,2,opt,name=Head,proto3" json:"Head,omitempty"` //头像 HeadUrl string `protobuf:"bytes,3,opt,name=HeadUrl,proto3" json:"HeadUrl,omitempty"` //头像 Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"` //名字 + Stat int32 `protobuf:"varint,5,opt,name=Stat,proto3" json:"Stat,omitempty"` //玩家状态 0:排队状态 5:大厅观众状态 } func (x *CLAWDOLLPlayerDigestInfo) Reset() { @@ -1066,6 +1067,13 @@ func (x *CLAWDOLLPlayerDigestInfo) GetName() string { return "" } +func (x *CLAWDOLLPlayerDigestInfo) GetStat() int32 { + if x != nil { + return x.Stat + } + return 0 +} + var File_clawdoll_proto protoreflect.FileDescriptor var file_clawdoll_proto_rawDesc = []byte{ @@ -1167,47 +1175,48 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, - 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, - 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, - 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, - 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, - 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, - 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, - 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, - 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, - 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, - 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, - 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x22, 0x84, 0x01, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x74, 0x61, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, + 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, + 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, + 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, + 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, + 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, + 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, + 0x47, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, + 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, + 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, + 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index 2dea4f0..b8dd5c9 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -130,4 +130,5 @@ message CLAWDOLLPlayerDigestInfo { int32 Head = 2; //头像 string HeadUrl = 3; //头像 string Name = 4; //名字 + int32 Stat = 5; //玩家状态 0:排队状态 5:大厅观众状态 } From a126fb81aeafa0c2abeccd70920102626bb6bbb4 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:31:12 +0800 Subject: [PATCH 104/153] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=92=E4=BD=8D?= =?UTF-8?q?=E8=B5=9B=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_RankReward.dat | 15 ++++++++------- data/DB_RankReward.json | 14 +++++++------- data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_RankReward.xlsx | Bin 10986 -> 11053 bytes 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 90627e23e7ffb7a0a0572e799000ac27ec367e02..eab78e7297231cf3a52b2e8368d3632ac62bb02e 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP%^|`*{N{3k-O;f25eru=2MgFCFbBgl-hny2i-EQf0Au1jH2?qr literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIUweP%>mknZVy;JP#oPnnEf#Kfz4Oq1iPbQ?IRYhSPmAjLtqBO6v7;I2kIc0 Z!7vBH494mZC3cQQK#zW5=3<~N1OR1nJT(9S diff --git a/data/DB_RankReward.dat b/data/DB_RankReward.dat index 403ebd4..db7321a 100644 --- a/data/DB_RankReward.dat +++ b/data/DB_RankReward.dat @@ -1,8 +1,9 @@ -$08@H -08@H -08@H -08@H0 -08@H - 08d@H -082@H \ No newline at end of file +$08@H +08d@H +08<@H +08(@H0 +08@H + 08@H +08 +@H \ No newline at end of file diff --git a/data/DB_RankReward.json b/data/DB_RankReward.json index 3e27f5f..6de6430 100644 --- a/data/DB_RankReward.json +++ b/data/DB_RankReward.json @@ -5,7 +5,7 @@ "RankType": 1, "Level": 36, "Award2Id": 2, - "Award2Num": 1000, + "Award2Num": 200, "Award3Id": 1, "Award3Num": 30000000 }, @@ -14,7 +14,7 @@ "RankType": 1, "Level": 31, "Award2Id": 2, - "Award2Num": 500, + "Award2Num": 100, "Award3Id": 1, "Award3Num": 20000000 }, @@ -23,7 +23,7 @@ "RankType": 1, "Level": 26, "Award2Id": 2, - "Award2Num": 300, + "Award2Num": 60, "Award3Id": 1, "Award3Num": 10000000 }, @@ -32,7 +32,7 @@ "RankType": 1, "Level": 21, "Award2Id": 2, - "Award2Num": 200, + "Award2Num": 40, "Award3Id": 1, "Award3Num": 800000 }, @@ -41,7 +41,7 @@ "RankType": 1, "Level": 16, "Award2Id": 2, - "Award2Num": 150, + "Award2Num": 30, "Award3Id": 1, "Award3Num": 500000 }, @@ -50,7 +50,7 @@ "RankType": 1, "Level": 11, "Award2Id": 2, - "Award2Num": 100, + "Award2Num": 20, "Award3Id": 1, "Award3Num": 300000 }, @@ -59,7 +59,7 @@ "RankType": 1, "Level": 6, "Award2Id": 2, - "Award2Num": 50, + "Award2Num": 10, "Award3Id": 1, "Award3Num": 200000 } diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 37be7cc6d639fd24f92901313d11b2a8366d1255..ec74cdafd8493c72f3f5010721a7e2cc12d529f8 100644 GIT binary patch delta 253 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 VI8h`(2ni!F$xm@BisyIze*m9+>%ss4 delta 3729 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 From 3b15a84df3ca5643facf1746e4e1ff016dcfae5e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:46:43 +0800 Subject: [PATCH 105/153] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/transact/trascate_gamesrv.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 1149976..1cdca9d 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -118,7 +118,7 @@ func init() { } switch d := scene.ExtraData.(type) { - case tienlen.TienLenSceneData: + case *tienlen.TienLenSceneData: for k := range d.BilledList { pack.SnId = append(pack.SnId, k) } From 33380d1bf8ae20930cf78300b7828fccc8e6eb3a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 16:02:50 +0800 Subject: [PATCH 106/153] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/transact/trascate_gamesrv.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 1cdca9d..a56fc1a 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -106,7 +106,7 @@ func init() { if err != nil { pack.Tag = webapiproto.TagCode_FAILED pack.Msg = "数据序列化失败" - return common.ResponseTag_ParamError, pack + return common.ResponseTag_Ok, pack } pack.Tag = webapiproto.TagCode_SUCCESS @@ -114,7 +114,7 @@ func init() { if scene == nil || scene.ExtraData == nil { pack.Tag = webapiproto.TagCode_NotFound pack.Msg = "房间没找到" - return common.ResponseTag_NoFindRoom, pack + return common.ResponseTag_Ok, pack } switch d := scene.ExtraData.(type) { From c4bea18f9f6cbd3d75142a9770e2cdcb258cc89a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 18:31:04 +0800 Subject: [PATCH 107/153] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E5=B8=82=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + 1 file changed, 1 insertion(+) diff --git a/common/constant.go b/common/constant.go index c43faf4..ba96eb7 100644 --- a/common/constant.go +++ b/common/constant.go @@ -316,6 +316,7 @@ const ( GainWayVipGift9 = 105 //vip等级礼包 GainWayRoomCost = 106 //房费消耗 GainWayRoomGain = 107 //房卡场获得 + GainWayItemShop = 108 // 交易市场道具交易 ) // 后台选择 金币变化类型 的充值 类型id号起始 From fccb385f79e0a289ec7cde9701302ecf4e700168 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 18:47:21 +0800 Subject: [PATCH 108/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE=E5=8C=85=E7=B1=BB=E5=9E=8B=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/config.go | 9 +++++++-- worldsrv/action_game.go | 6 +++++- worldsrv/playernotify.go | 35 ++++++++++++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/model/config.go b/model/config.go index e569e0c..622469d 100644 --- a/model/config.go +++ b/model/config.go @@ -1,12 +1,13 @@ package model import ( - "mongo.games.com/game/protocol/gamehall" + "slices" "strconv" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" + "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/shop" "mongo.games.com/game/protocol/webapi" ) @@ -425,7 +426,7 @@ func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { delete(cm.GetConfig(plt).RoomConfig, id) } -func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { +func (cm *ConfigMgr) GetRoomConfig(plt string, lastChannel string) *gamehall.SCRoomConfig { pack := &gamehall.SCRoomConfig{} for _, v := range cm.GetConfig(plt).RoomType { if v.GetOn() != common.On { @@ -436,6 +437,10 @@ func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { if vv.GetOn() != common.On { continue } + if lastChannel != "" && !slices.Contains(vv.GetOnChannelName(), lastChannel) { + continue + } + var cost, reward []*gamehall.ItemInfo for _, item := range vv.GetCost() { cost = append(cost, &gamehall.ItemInfo{ diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 7785ce8..61e09b8 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1168,7 +1168,7 @@ func CSRoomConfigHandler(s *netlib.Session, packetId int, data interface{}, sid return nil } - pack := PlatformMgrSingleton.GetRoomConfig(p.Platform) + pack := PlatformMgrSingleton.GetRoomConfig(p.Platform, p.LastChannel) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SCRoomConfig), pack) logger.Logger.Tracef("SCRoomConfig: %v", pack) return nil @@ -1202,6 +1202,10 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ send() return nil } + if !slices.Contains(cfg.GetOnChannelName(), p.LastChannel) { + send() + return nil + } // 场次 if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { send() diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go index e944769..29f2829 100644 --- a/worldsrv/playernotify.go +++ b/worldsrv/playernotify.go @@ -1,11 +1,13 @@ package main import ( + "slices" "time" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" + "mongo.games.com/game/protocol/gamehall" ) func init() { @@ -76,7 +78,34 @@ func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { // SendToClient 发送消息给客户端 // tp 消息类型 func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { - ids := p.GetPlayers(tp) - PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) - logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) + switch tp { + case common.NotifyPrivateRoomList: + d := pack.(*gamehall.SCGetPrivateRoomList) + if len(d.GetDatas()) == 0 { + return + } + scene := SceneMgrSingleton.GetScene(int(d.GetDatas()[0].GetRoomId())) + if scene == nil { + return + } + roomConfigId := d.GetDatas()[0].GetRoomConfigId() + cfg := PlatformMgrSingleton.GetConfig(scene.limitPlatform.IdStr).RoomConfig[roomConfigId] + if cfg == nil { + return + } + + var ids []int32 + for _, v := range p.GetPlayers(tp) { + player := PlayerMgrSington.GetPlayerBySnId(v) + if player == nil { + continue + } + if slices.Contains(cfg.GetOnChannelName(), player.LastChannel) { + ids = append(ids, v) + } + } + + PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) + logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) + } } From 8f59f4d03acf37db5e2df8464a684f3c2205d016 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 09:41:41 +0800 Subject: [PATCH 109/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=8A=93?= =?UTF-8?q?=E5=8F=96=E5=90=8E=E7=BB=93=E6=9E=9C=E9=80=9A=E7=9F=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/clawdoll/constants.go | 4 ++++ gamesrv/clawdoll/action_clawdoll.go | 24 +++++++++++++++++++++--- gamesrv/clawdoll/player_clawdoll.go | 24 +++++++++++++++++++++++- gamesrv/clawdoll/scenepolicy_clawdoll.go | 12 +----------- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/gamerule/clawdoll/constants.go b/gamerule/clawdoll/constants.go index e855368..8c0386f 100644 --- a/gamerule/clawdoll/constants.go +++ b/gamerule/clawdoll/constants.go @@ -71,3 +71,7 @@ const ( Zego_ForbidRTCStream = iota + 1 Zego_ResumeRTCStream = iota + 1 ) + +const ( + ClawDoorItemID = 40003 +) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index bd83ddc..9affeb7 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -2,6 +2,7 @@ package clawdoll import ( "mongo.games.com/game/common" + rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/machine" @@ -52,10 +53,20 @@ func (h *CSPlayerOpHandler) Process(s *netlib.Session, packetid int, data interf func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("收到返回上分结果!!!!!!!!!!") if msg, ok := data.(*machine.MSDollMachineoPerateResult); ok { - p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p == nil { - logger.Logger.Warn("CSGetTokenHandler p == nil") + logger.Logger.Warn("MSDollMachineoCoinResultHandler p == nil") + return nil + } + + s := p.GetScene() + if s == nil { + logger.Logger.Warn("MSDollMachineoCoinResultHandler p.scene == nil") + return nil + } + + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { return nil } @@ -68,10 +79,17 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data } case 2: if msg.Result == 1 { - + // 获得娃娃卡 + logger.Logger.Tracef("下抓成功!!!!!!!!!!!!snid = ", msg.Snid) } else { logger.Logger.Tracef("下抓失败!!!!!!!!!!!!snid = ", msg.Snid) } + + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) } } return nil diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 2fb434e..3dd7af7 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -1,7 +1,9 @@ package clawdoll import ( + rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" + "mongo.games.com/game/srvdata" "mongo.games.com/goserver/core/logger" ) @@ -37,11 +39,18 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { // 能否投币 func (this *PlayerEx) CanPayCoin() bool { + + itemID := int32(rule.ClawDoorItemID) + itemData := srvdata.GameItemMgr.Get(this.Platform, itemID) + if itemData == nil { + return false + } + return true } // 投币消耗 -func (this *PlayerEx) CostPlayCoin() bool { +func (this *PlayerEx) CostPlayCoin(count int32) bool { return true } @@ -106,3 +115,16 @@ func (this *PlayerEx) GetClawState() int32 { func (this *PlayerEx) SetClawState(state int32) { this.clawDollState = state } + +func (this *PlayerEx) GetItemCount(itemID int32) int64 { + itemData := srvdata.GameItemMgr.Get(this.Platform, itemID) + if itemData != nil { + v, ok := this.Items[itemID] + if ok { + return v + } else { + return 0 + } + } + return 0 +} diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f00ad1f..664e238 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,6 +67,7 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { + //machineId := s.DBGameFree.GetId() % 6080000 sceneEx.machineId = action.GetFreeDollMachineId() } if sceneEx.machineId != 0 { @@ -666,12 +667,6 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) - case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -702,11 +697,6 @@ func (this *PlayGame) OnTick(s *base.Scene) { logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) return } } From 9963ef130ae66f4707afa64c2156ca8c9497f599 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 09:43:14 +0800 Subject: [PATCH 110/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 06da9b3..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 06da9b31abec96f3936877d7d73069e9852781ff +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 40966b52cbb2048918c3c1e6c812a8554f1c1220 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 09:50:19 +0800 Subject: [PATCH 111/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_game.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 61e09b8..de81b77 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1206,18 +1206,32 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ send() return nil } + + f := func(param []int32) []int32 { + if len(param) == 0 { + return nil + } + if param[0] == 0 { + return param[1:] + } + if param[0] > 0 && int(param[0]) < len(param) { + return []int32{param[param[0]]} + } + return nil + } + // 场次 - if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { + if !slices.Contains(f(cfg.GetGameFreeId()), msg.GetGameFreeId()) { send() return nil } // 局数 - if !slices.Contains(cfg.GetRound(), msg.GetRound()) { + if !slices.Contains(f(cfg.GetRound()), msg.GetRound()) { send() return nil } // 玩家数量 - if !slices.Contains(cfg.GetPlayerNum(), msg.GetPlayerNum()) { + if !slices.Contains(f(cfg.GetPlayerNum()), msg.GetPlayerNum()) { send() return nil } From 979645567ef02272136d678fc1e30c0a75c8bae9 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 10:08:29 +0800 Subject: [PATCH 112/153] =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f00ad1f..b9ad90d 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,7 +67,8 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { - sceneEx.machineId = action.GetFreeDollMachineId() + machineId := s.DBGameFree.GetId() % 6080000 + sceneEx.machineId = action.GetFreeDollMachineId(machineId) } if sceneEx.machineId != 0 { machineStatus := action.GetDollMachineStatus(sceneEx.machineId) From 32e8b2f22e021e6b4ba7335c4b9553942abeb6a6 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 10:01:10 +0800 Subject: [PATCH 113/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=8A=A0=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/config.go | 2 +- worldsrv/shopmgr.go | 57 ++++++++++++++------------------------------- 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/model/config.go b/model/config.go index 622469d..568775e 100644 --- a/model/config.go +++ b/model/config.go @@ -77,7 +77,7 @@ func (this *ShopInfo) GetItems() []ItemInfo { if this.ItemId > 0 { ret = append(ret, ItemInfo{ ItemId: this.ItemId, - ItemNum: this.Amount, + ItemNum: this.AmountFinal, }) } for _, v := range this.AddItemInfo { diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index a296bee..1fdf0d2 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -44,14 +44,15 @@ const ( // page类型 const ( - ShopPageCoin = 1 //金币页面 - ShopPageDiamond = 2 //钻石页面 - ShopPageItem = 3 //道具页面 - ShopPageVip = 4 //VIP页面 - ShopPagePrivilege = 5 //VIP特权礼包 - ShopPageGift = 7 //礼包页面 - ShopPageDiamondBank = 8 //钻石存储罐 - ShopPagePermit = 9 //赛季通行证 + ShopPageCoin = 1 //金币页面 + ShopPageDiamond = 2 //钻石页面 + ShopPageItem = 3 //道具页面 + ShopPageVip = 4 //VIP页面 + ShopPagePrivilege = 5 //VIP特权礼包 + ShopPageGift = 7 //礼包页面 + ShopPageDiamondBank = 8 //钻石存储罐 + ShopPagePermit = 9 //赛季通行证 + ShopPageFangKa = 10 //房卡页面 ShopPagePhoneScore = 61 //手机积分商城 ShopPagePhoneScoreGoogle = 62 @@ -646,6 +647,7 @@ func (this *ShopMgr) GetAmountFinal(p *Player, shopId, vipShopId int32) int64 { } } default: + addTotal += addNormal } return addTotal } @@ -1197,37 +1199,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, var amount [ShopTypeItem]int32 var dbShop *model.DbShop if shopInfo, ok := data.(*model.ShopInfo); ok { - // 目前现金只能买钻石 - var addTotal = int64(shopInfo.Amount) - added := rand.Int31n(shopInfo.AddArea[1]-shopInfo.AddArea[0]+1) + shopInfo.AddArea[0] costNum := rand.Int31n(shopInfo.CostArea[1]-shopInfo.CostArea[0]+1) + shopInfo.CostArea[0] - /* if shopInfo.Page == ShopPageVip { - //暂时这样修改 VIP礼包没有现金支付 - shopData := p.GetVipShopData(shopInfo.Id, 0) - if shopData != nil { - added = shopData.AddArea - costNum = shopData.CostArea - } - }*/ - vipAdded := int32(0) - if shopInfo.Page == ShopPageDiamond { - //vip加成 - vipAdded = VipMgrSington.GetVipDiamondExtra(p.Platform, p.VIP) - logger.Logger.Tracef("商城钻石购买,vip加成 vipAdded = %v", vipAdded) - } - - if added > 0 || vipAdded > 0 { - addTotal = shopInfo.Amount + int64((float64(shopInfo.Amount)*float64(added+vipAdded))/100.0) - } - - // 首充翻倍 - if shopInfo.FirstSwitch { - if !slices.Contains(p.ShopID, int(shopInfo.Id)) { - addTotal *= 2 - } - } - - amount[ShopTypeDiamond-1] = int32(addTotal) var itemInfo []model.ItemInfo var webItemInfo []*webapi_proto.ItemInfo for _, info := range shopInfo.GetItems() { @@ -1241,6 +1213,13 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, }) } + switch shopInfo.Type { + case ShopTypeDiamond: + amount[ShopTypeDiamond-1] = int32(shopInfo.AmountFinal) + default: + + } + dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum, common.GainWay_ShopBuy, itemInfo, shopInfo.Id, shopInfo.Name, 0, remark, []int32{}) err := model.InsertDbShopLog(dbShop) @@ -1249,7 +1228,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(addTotal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) + p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(shopInfo.AmountFinal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) } else if cdata, ok := data.(*ExchangeShopInfo); ok { var info *shop.ExchangeType From 82aee49eda530476a5b91535af3aa0a2ae22031e Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 11:24:35 +0800 Subject: [PATCH 114/153] =?UTF-8?q?=E7=94=9F=E6=88=90token=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index afa8cd6..da5749b 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -10,6 +10,7 @@ import ( "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/timer" + "strconv" "sync" "time" ) @@ -290,7 +291,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) var payload string = "" //生成token - token, err := token04.GenerateToken04(appId, string(userId), serverSecret, effectiveTimeInSeconds, payload) + token, err := token04.GenerateToken04(appId, strconv.Itoa(int(userId)), serverSecret, effectiveTimeInSeconds, payload) if err != nil { logger.Logger.Error(err) return err From 3ac3f2dea115d524e074782feb42a6c51bfa3fe0 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 11:57:45 +0800 Subject: [PATCH 115/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A7=86=E9=A2=91token=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 22 ++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 24 +++-- protocol/clawdoll/clawdoll.pb.go | 122 ++++++++++++----------- protocol/clawdoll/clawdoll.proto | 1 + 4 files changed, 100 insertions(+), 69 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 9affeb7..e77acb9 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" @@ -115,8 +116,6 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf logger.Logger.Warn("CSGetTokenHandler p == nil") return nil } - pack := &machine.SMGetToken{} - pack.Snid = p.SnId scene := p.GetScene() if scene == nil { @@ -130,16 +129,27 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf machineId := scene.GetDBGameFree().GetId() % 6080000 machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) if machineInfo == nil { + logger.Logger.Warn("CSGetTokenHandler machineId = %v not found", machineId) return nil } logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) - pack.ServerSecret = machineInfo.ServerSecret - pack.AppId = machineInfo.AppId - pack.StreamId = machineInfo.StreamId + //生成token + token, err := token04.GenerateToken04(uint32(machineInfo.AppId), string(p.SnId), machineInfo.ServerSecret, 7200, "") + if err != nil { + logger.Logger.Error(err) + return err + } + logger.Logger.Trace(token) - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) + pack := &clawdoll.SCCLAWDOLLSendToken{ + LogicId: scene.DBGameFree.GetId(), + Appid: machineInfo.AppId, + Token: token, + StreamId: machineInfo.StreamId, + } + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) } return nil } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 664e238..3462e5e 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -1,9 +1,9 @@ package clawdoll import ( + "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" - "mongo.games.com/game/protocol/machine" "time" "mongo.games.com/goserver/core" @@ -279,21 +279,31 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce logger.Logger.Warn("ClawdollGetVideoToken p == nil") return } - pack := &machine.SMGetToken{} - pack.Snid = p.SnId machineId := s.DBGameFree.GetId() % 6080000 machineinfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) if machineinfo == nil { + logger.Logger.Warn("CSGetTokenHandler machineId = %v not found", machineId) return } logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId) - pack.ServerSecret = machineinfo.ServerSecret - pack.AppId = machineinfo.AppId - pack.StreamId = machineinfo.StreamId - sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) + //生成token + token, err := token04.GenerateToken04(uint32(machineinfo.AppId), string(p.SnId), machineinfo.ServerSecret, 3600, "") + if err != nil { + logger.Logger.Error(err) + return + } + logger.Logger.Trace(token) + + pack := &clawdoll.SCCLAWDOLLSendToken{ + LogicId: s.DBGameFree.GetId(), + Appid: machineinfo.AppId, + Token: token, + StreamId: machineinfo.StreamId, + } + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) } // 广播房间状态 diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 7f6bfba..3143e31 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -885,6 +885,7 @@ type SCCLAWDOLLSendToken struct { Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` + AppSign string `protobuf:"bytes,5,opt,name=AppSign,proto3" json:"AppSign,omitempty"` } func (x *SCCLAWDOLLSendToken) Reset() { @@ -947,6 +948,13 @@ func (x *SCCLAWDOLLSendToken) GetStreamId() string { return "" } +func (x *SCCLAWDOLLSendToken) GetAppSign() string { + if x != nil { + return x.AppSign + } + return "" +} + type CLAWDOLLWaitPlayers struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1161,62 +1169,64 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x77, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, - 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, - 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, - 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, - 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x22, 0x84, 0x01, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x74, 0x61, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, - 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, - 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, - 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, - 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, - 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, - 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, - 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, - 0x47, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, - 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, - 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, - 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6b, 0x65, 0x6e, 0x22, 0x91, 0x01, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, + 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, + 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, + 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x41, 0x70, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x41, 0x70, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x63, 0x0a, 0x13, 0x43, 0x4c, 0x41, 0x57, 0x44, + 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x4c, + 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, + 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, + 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, + 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x84, 0x01, 0x0a, + 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x74, 0x61, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, + 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, + 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, + 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, + 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, + 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, + 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, + 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, + 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index b8dd5c9..ffc7cd9 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -118,6 +118,7 @@ message SCCLAWDOLLSendToken { int64 Appid = 2; string Token = 3; string StreamId = 4; + string AppSign = 5; } message CLAWDOLLWaitPlayers { From fc2db94c86a881d40a0b6707f9e4001a977b4c21 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 14:00:34 +0800 Subject: [PATCH 116/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes model/config.go | 25 ++++++++++++++++++------- public | 2 +- worldsrv/scene.go | 1 - worldsrv/scenemgr.go | 1 + 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index eab78e7297231cf3a52b2e8368d3632ac62bb02e..79f8787d87dd629e44daad01b4faae3b91f55cf3 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP#ew#rtH){|P#w&C6!$4{g5A-u_7MwLEC&nNAuxx+42D?*(+INw>=7h` ZVGh0nbvQTxl-M~I0X_PKnTvt85CCSnJT(9S literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP%^|`*{N{3k-O;f25eru=2MgFCFbBgl-hny2i-EQf0Au1jH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index ec74cdafd8493c72f3f5010721a7e2cc12d529f8..7f781343a7cc7a11712f89c0ca1f3edb0dfa161a 100644 GIT binary patch delta 226 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK)-nmQaV!F|8NHygy={DEH|X!9bVgG8V< NH*{8QHV|lL0RXb^Hf{g_ diff --git a/model/config.go b/model/config.go index 568775e..4ba254c 100644 --- a/model/config.go +++ b/model/config.go @@ -406,7 +406,19 @@ func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { if d == nil { d = make([]*webapi.RoomConfig, 0) } - d = append(d, data) + + has := false + for k, v := range d { + if v.GetId() == data.GetId() { + d[k] = data + has = true + break + } + } + if !has { + d = append(d, data) + } + cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] = d } @@ -414,12 +426,11 @@ func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { d := cm.GetConfig(plt).RoomConfig[id] if d != nil { b := cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] - if b != nil { - for i, v := range b { - if v.GetId() == id { - b = append(b[:i], b[i+1:]...) - cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b - } + for i, v := range b { + if v.GetId() == id { + b = append(b[:i], b[i+1:]...) + cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b + break } } } diff --git a/public b/public index 00b9fce..9d35521 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 +Subproject commit 9d355215710228e4481fc6334f6e14b902a03e95 diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 093a35e..a8fcd80 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -141,7 +141,6 @@ func NewScene(args *CreateSceneParam) *Scene { if s.CustomParam == nil { s.CustomParam = new(serverproto.CustomParam) } - s.sp.OnStart(s) return s } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 185f3f5..439a945 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -413,6 +413,7 @@ func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { return nil } m.scenes[args.RoomId] = s + s.sp.OnStart(s) // 添加到游戏服记录中 args.GS.AddScene(&AddSceneParam{ S: s, From 63387ba9b4a611bef315c1e67113739deb798e2e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 14:46:30 +0800 Subject: [PATCH 117/153] =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E6=88=BF=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 2 +- worldsrv/shopmgr.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index a8fcd80..2ff2a09 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -682,9 +682,9 @@ func (this *Scene) OnClose() { } this.Broadcast(int(hallproto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) + this.sp.OnStop(this) this.deleting = true this.closed = true - this.sp.OnStop(this) for _, p := range this.players { this.DelPlayer(p) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 1fdf0d2..40bd5de 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -1228,7 +1228,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(shopInfo.AmountFinal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) + p.DeviceId, shopInfo.Name, amount, costNum, webItemInfo, "", p.Channel, p.ChannelId) } else if cdata, ok := data.(*ExchangeShopInfo); ok { var info *shop.ExchangeType From 4bd2cee327429669f9752a90bd8873c7b7592bbd Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 14:49:51 +0800 Subject: [PATCH 118/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 9d35521..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 9d355215710228e4481fc6334f6e14b902a03e95 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 09dc4f45882d498a5aa95a4c93b683bad67a92f3 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 14:55:44 +0800 Subject: [PATCH 119/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 00b9fce..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 98a834b357030e7089bde36c50781fc3c4b65e61 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 14:56:40 +0800 Subject: [PATCH 120/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 00b9fce..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 8a19cd642f49f96fc111d6ce75ddc4a163fed0eb Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 15:36:59 +0800 Subject: [PATCH 121/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E7=8A=B6=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 11 ----------- public | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 36886fa..f60bbfa 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -677,12 +677,6 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) - case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -713,11 +707,6 @@ func (this *PlayGame) OnTick(s *base.Scene) { logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) return } } diff --git a/public b/public index d789cca..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 770b9b084a68385372764519a121210c97b9acdc Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 15:39:17 +0800 Subject: [PATCH 122/153] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From c20f0fa69cac02c61765550b040679c327a53562 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 15:39:30 +0800 Subject: [PATCH 123/153] =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/shopmgr.go | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 40bd5de..5f34e9b 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,9 +63,14 @@ const ( const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 - ShopTypeItem // 道具 - ShopTypeFangKa // 房卡 - ShopTypeMax +) + +// 商品参数类型 +const ( + ShopParamCoin = iota // 金币 + ShopParamDiamond // 钻石 + ShopParamUnKnown // 未定义 + ShopParamMax // 参数数量 ) // 兑换商品状态 @@ -139,7 +144,7 @@ func (this *ShopMgr) GetShopInfoProto(si *model.ShopInfo, p *Player, vipShopId i } added := int32(rand.Intn(int(si.AddArea[1])-int(si.AddArea[0])+1) + int(si.AddArea[0])) consumptionAmount := int32(rand.Intn(int(si.CostArea[1])-int(si.CostArea[0])+1) + int(si.CostArea[0])) - amount := int64(si.Amount) + amount := si.Amount isBuy := false if si.Page == ShopPageVip { shopData := p.GetVipShopData(si.Id, vipShopId) @@ -705,7 +710,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po }) } - amount := [3]int32{} // 获得含义:金币,钻石,经验 + amount := [ShopParamMax]int32{} // 获得含义:金币,钻石,经验 if shopInfo.Page == ShopPageVip { if p.VipShopData[vipShopId] == nil { logger.Logger.Errorf("GainShop 没有找到vip商品 shopId:%v vipShopId:%v snid:%v", shopInfo.Id, vipShopId, p.SnId) @@ -720,7 +725,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po switch shopInfo.Type { case ShopTypeCoin: - amount[0] = int32(addTotal) + amount[ShopParamCoin] = int32(addTotal) p.AddCoin(addTotal, 0, common.GainWay_Shop_Buy, "system", shopName) if shopInfo.Ad > 0 { //观看广告 if !p.IsRob { @@ -737,7 +742,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po case ShopTypeDiamond: //增加钻石 - amount[1] = int32(addTotal) + amount[ShopParamDiamond] = int32(addTotal) p.AddDiamond(addTotal, 0, common.GainWay_Shop_Buy, "system", shopName) if shopInfo.Ad > 0 { //观看广告 if !p.IsRob { @@ -904,7 +909,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen if err := proto.Unmarshal(buff, as); err != nil { logger.Logger.Errorf("API_CreateExchange err: %v %v", err, as.Tag) } - var amount [ShopTypeItem]int32 + var amount [ShopParamMax]int32 //保存db dbShop := this.NewDbShop(p, 0, amount[:], ExchangeConsumeCash, info.Cash*num, common.GainWay_ShopBuy, itemInfo, cdata.Id, cdata.Name, 0, "", []int32{}) @@ -1196,7 +1201,7 @@ func (this *ShopMgr) NewDbShop(p *Player, pageId int32, amount []int32, consume, func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, remark string) { //三方购买 task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - var amount [ShopTypeItem]int32 + var amount [ShopParamMax]int32 var dbShop *model.DbShop if shopInfo, ok := data.(*model.ShopInfo); ok { costNum := rand.Int31n(shopInfo.CostArea[1]-shopInfo.CostArea[0]+1) + shopInfo.CostArea[0] @@ -1215,7 +1220,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, switch shopInfo.Type { case ShopTypeDiamond: - amount[ShopTypeDiamond-1] = int32(shopInfo.AmountFinal) + amount[ShopParamDiamond] = int32(shopInfo.AmountFinal) default: } @@ -1253,14 +1258,14 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, //兑换 充值订单 logger.Logger.Infof("客户端请求兑换 创建支付订单!AppId = %v,SnId = %v,Id = %v,dbShop.LogId.Hex() = %v,cash = %v", common.GetAppId(), p.SnId, cdata.Id, dbShop.LogId.Hex(), info.Cash*cdata.ExchangeNum) return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, cdata.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, cdata.Name, [ShopTypeItem]int32{0, 0, 0}, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId) + p.DeviceId, cdata.Name, amount, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId) } else if bbd, ok := data.(*webapi_proto.BlindBoxData); ok { - if bbd.Type == 1 { + if bbd.Type == ShopTypeCoin { //金币 - amount[0] = bbd.Grade - } else if bbd.Type == 2 { + amount[ShopParamCoin] = bbd.Grade + } else if bbd.Type == ShopTypeDiamond { //钻石 - amount[1] = bbd.Grade + amount[ShopParamDiamond] = bbd.Grade } dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, nil, 0, "", 0, remark, []int32{bbd.Id}) err := model.InsertDbShopLog(dbShop) @@ -1274,9 +1279,9 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, var items []model.ItemInfo for _, it := range wfs.Item { if it.Type == 1 { - amount[0] = it.Grade + amount[ShopParamCoin] = it.Grade } else if it.Type == 2 { - amount[1] = it.Grade + amount[ShopParamDiamond] = it.Grade } else if it.Type == 3 { items = append(items, model.ItemInfo{ ItemId: it.Item_Id, From b4bab0de1eea56a93536bfbd9b40984cfed1049c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 15:58:06 +0800 Subject: [PATCH 124/153] =?UTF-8?q?=E5=88=A0=E9=99=A4public=E5=AD=90?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 --- README.md | 21 --------------------- public | 1 - shell/update_public.bat | 10 +++++----- 4 files changed, 5 insertions(+), 30 deletions(-) delete mode 100644 .gitmodules delete mode 160000 public diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e7c37df..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "public"] - path = public - url = git@git.pogorockgames.com:mango-games/server/public.git diff --git a/README.md b/README.md index 432863b..f5b2aeb 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,6 @@ 游戏业务代码 -### 子仓库 - public子仓库本项目本身并没有使用,只是用来暴露部分公共代码,供其他项目使用。 - 例如: - 1.客户端同步通信协议 - 2.客户端同步游戏配置 - -#### 初始化子仓库 -``` -git submodule update --init --recursive -``` - -#### 更新子仓库 -``` -git submodule update --remote -``` - -#### 更新并提交子仓库代码 -``` -update_public.sh -``` - ### 脚本 #### gen_data.bat xlsx文件转换为json,dat文件,生成pbdata.proto,生成srvdata包 diff --git a/public b/public deleted file mode 160000 index 00b9fce..0000000 --- a/public +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 diff --git a/shell/update_public.bat b/shell/update_public.bat index a81133b..376fa0b 100644 --- a/shell/update_public.bat +++ b/shell/update_public.bat @@ -1,11 +1,11 @@ -if exist ".\public" ( - cd .\public +if exist "..\public" ( + cd ..\public git checkout main git pull - xcopy ..\data .\data /s /e /y - xcopy ..\protocol .\protocol /s /e /y - xcopy ..\xlsx .\xlsx /s /e /y + xcopy ..\game\data .\data /s /e /y + xcopy ..\game\protocol .\protocol /s /e /y + xcopy ..\game\xlsx .\xlsx /s /e /y git add . git commit -m "update" From 5bdf3d78df250cedf6660ec3b00c9943b4d32124 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 16:23:57 +0800 Subject: [PATCH 125/153] =?UTF-8?q?=E5=95=86=E5=BA=97=E8=B4=AD=E4=B9=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/shopmgr.go | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 5f34e9b..75333b9 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,6 +63,7 @@ const ( const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 + SHopTypeItem // 道具 ) // 商品参数类型 @@ -1267,26 +1268,45 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, //钻石 amount[ShopParamDiamond] = bbd.Grade } - dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, nil, 0, "", 0, remark, []int32{bbd.Id}) + + var itemInfo []model.ItemInfo + var webItemInfo []*webapi_proto.ItemInfo + for _, info := range shopInfo.GetItems() { + itemInfo = append(itemInfo, model.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + } + + dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, itemInfo, 0, "", 0, remark, []int32{bbd.Id}) err := model.InsertDbShopLog(dbShop) if err != nil { logger.Logger.Errorf("model.InsertDbShopLog err:", err) return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, bbd.Name, amount, int32(bbd.Price2), nil, "", p.Channel, p.ChannelId) + p.DeviceId, bbd.Name, amount, int32(bbd.Price2), webItemInfo, "", p.Channel, p.ChannelId) } else if wfs, ok := data.(*webapi_proto.WelfareSpree); ok { var items []model.ItemInfo + var webItemInfo []*webapi_proto.ItemInfo for _, it := range wfs.Item { - if it.Type == 1 { + if it.Type == ShopTypeCoin { amount[ShopParamCoin] = it.Grade - } else if it.Type == 2 { + } else if it.Type == ShopTypeDiamond { amount[ShopParamDiamond] = it.Grade - } else if it.Type == 3 { + } else if it.Type == SHopTypeItem { items = append(items, model.ItemInfo{ ItemId: it.Item_Id, ItemNum: int64(it.Grade), }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: it.GetItem_Id(), + ItemNum: int64(it.GetGrade()), + }) } } var gainWay int32 = common.GainWay_ActFirstPay @@ -1300,7 +1320,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), nil, "", p.Channel, p.ChannelId) + p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), webItemInfo, "", p.Channel, p.ChannelId) } return nil }), task.CompleteNotifyWrapper(func(retdata interface{}, t task.Task) { From 67a85f6535f6411a0fccb77e9d034d65943e135c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 17:28:10 +0800 Subject: [PATCH 126/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E6=B2=A1=E4=BA=BA=E8=A7=A3=E6=95=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 37 -------------------------- gamesrv/tienlen/scenepolicy_tienlen.go | 6 ++--- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 344fa6e..8148257 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -13,43 +13,6 @@ import ( "mongo.games.com/game/srvdata" ) -type CSDestroyRoomPacketFactory struct { -} -type CSDestroyRoomHandler struct { -} - -func (this *CSDestroyRoomPacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSDestroyRoom{} - return pack -} - -func (this *CSDestroyRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSDestroyRoomHandler Process recv ", data) - p := base.PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSDestroyRoomHandler p == nil") - return nil - } - scene := p.GetScene() - if scene == nil { - logger.Logger.Warn("CSDestroyRoomHandler p.GetScene() == nil") - return nil - } - if !scene.HasPlayer(p) { - return nil - } - if scene.Creator != p.SnId { - logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") - return nil - } - // 房卡场开始后不能解散 - if scene.IsCustom() && scene.NumOfGames > 0 { - return nil - } - scene.Destroy(true) - return nil -} - type CSLeaveRoomPacketFactory struct { } type CSLeaveRoomHandler struct { diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 46bf98c..6a90360 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,6 +148,9 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 玩家掉线 @@ -603,9 +606,6 @@ func (this *SceneBaseStateTienLen) OnTick(s *base.Scene) { s.RandRobotCnt() s.SetTimerRandomRobot(s.GetRobotTime()) } - if s.IsCustom() && len(s.Players) == 0 { - s.Destroy(true) - } } // 发送玩家操作情况 From 892a61aa470e1af3b2e40f1c77c29d3bcabf2bca Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 17:30:28 +0800 Subject: [PATCH 127/153] log --- machine/action/action_server.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index da5749b..759543c 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -201,7 +201,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 2, }) - logger.Logger.Trace("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -209,7 +209,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - logger.Logger.Error("Failed to read response from server:", err) + fmt.Println("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ @@ -218,7 +218,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 2, }) - logger.Logger.Trace("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 @@ -231,6 +231,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 1, }) + fmt.Println("上分成功!!!!!!!!!!snid = ", snid, "num = ", num) } //上分失败 coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} @@ -242,6 +243,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 1, }) + fmt.Println("上分失败!!!!!!!!!!snid = ", snid, "num = ", num) } } } @@ -254,7 +256,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid // 与游戏服务器连接成功,向游戏服务器推送所有娃娃机连接 func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interface{}) error { - logger.Logger.Trace("与游戏服务器连接成功") + fmt.Println("与游戏服务器连接成功") //开始向游戏服务器发送娃娃机连接信息 msg := &machine.MSDollMachineList{} for i, _ := range machinedoll.MachineMgr.ConnMap { @@ -263,7 +265,7 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf msg.Data = append(msg.Data, info) } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) - logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", msg) + fmt.Println("向游戏服务器发送娃娃机连接信息:%v", msg) return nil } @@ -304,7 +306,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info.StreamId = msg.StreamId session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) - logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) + fmt.Println("向游戏服务器发送娃娃机token:%v", info) return nil } From 7889c982eafed6e8660a03acc687c42a596e69bb Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 18:06:40 +0800 Subject: [PATCH 128/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=A9=9F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 12 ++++++------ machine/machinedoll/machinemgr.go | 4 +--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 759543c..ea70d6b 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -195,13 +195,13 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid //fmt.Println("Failed to read response from server:", err) return } - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 0, TypeId: 2, }) - fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -212,20 +212,20 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid fmt.Println("Failed to read response from server:", err) return } - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 1, TypeId: 2, }) - fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 coinData := []byte{0xAA, 0x04, 0x02, 0x03, 0x01} if bytes.Contains(part, coinData) { //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 1, @@ -237,7 +237,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} if bytes.Contains(part, coinData) { //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 0, diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index 3fc997e..bbad9ff 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -152,9 +152,7 @@ func (this *MachineManager) UpdateToGameServer(conn *Conn, status int32) { } func SendToGameServer(pid int, msg interface{}) { - if GameConn == nil { - GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 701) - } + GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 777) if GameConn != nil { GameConn.Send(pid, msg) } else { From 8c8ee30ef866b249b430da37086fa356c7e82f2f Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 18:20:54 +0800 Subject: [PATCH 129/153] Merge branch 'develop' into ma # Conflicts: # public --- .gitmodules | 3 --- public | 1 - 2 files changed, 4 deletions(-) delete mode 160000 public diff --git a/.gitmodules b/.gitmodules index e7c37df..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "public"] - path = public - url = git@git.pogorockgames.com:mango-games/server/public.git diff --git a/public b/public deleted file mode 160000 index 00b9fce..0000000 --- a/public +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 4da55c95880b3525a8597bc6c5a22008edf0073f Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 18:33:28 +0800 Subject: [PATCH 130/153] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E4=B8=AD=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=AE=9E=E6=97=B6=E9=87=91=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index bf0779f..441578d 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -513,7 +513,7 @@ func init() { } } - if !scene.IsMatchScene() { // 比赛没金币是积分 + if !scene.IsMatchScene() && !scene.IsCustom() { // 比赛没金币是积分 player.Coin = playerBet.GetCoin() player.GameCoinTs = playerBet.GetGameCoinTs() player.GameTax += playerBet.GetTax() From 1cc5d4f226fcce431d695ea1a0fc5cb5586f3242 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 09:19:51 +0800 Subject: [PATCH 131/153] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B0=B4=E6=B1=A0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameCoinPool.dat | 7 ++++++- data/DB_GameCoinPool.json | 40 ++++++++++++++++++++++++++++++++++++++ data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameCoinPool.xlsx | Bin 19300 -> 19697 bytes 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/data/DB_GameCoinPool.dat b/data/DB_GameCoinPool.dat index a46923a..ec0000c 100644 --- a/data/DB_GameCoinPool.dat +++ b/data/DB_GameCoinPool.dat @@ -102,4 +102,9 @@  X`݌  _X` Ɔw X` - ʵ ֹX` \ No newline at end of file + ʵ ֹX` + X`݌ +̼ _X` +ᚽƆw X` + ʵ ֹX` + ʵ ֹX` \ No newline at end of file diff --git a/data/DB_GameCoinPool.json b/data/DB_GameCoinPool.json index cd94de1..f0185fe 100644 --- a/data/DB_GameCoinPool.json +++ b/data/DB_GameCoinPool.json @@ -1065,6 +1065,46 @@ "UpperLimit": 2000000000, "CtrlRate": 200, "InitNovicValue": 650000000 + }, + { + "Id": 3080001, + "InitValue": 6000000, + "LowerLimit": 5000000, + "UpperLimit": 20000000, + "CtrlRate": 200, + "InitNovicValue": 6500000 + }, + { + "Id": 3090001, + "InitValue": 60000000, + "LowerLimit": 50000000, + "UpperLimit": 200000000, + "CtrlRate": 200, + "InitNovicValue": 65000000 + }, + { + "Id": 3100001, + "InitValue": 300000000, + "LowerLimit": 250000000, + "UpperLimit": 1000000000, + "CtrlRate": 200, + "InitNovicValue": 325000000 + }, + { + "Id": 3110001, + "InitValue": 600000000, + "LowerLimit": 500000000, + "UpperLimit": 2000000000, + "CtrlRate": 200, + "InitNovicValue": 650000000 + }, + { + "Id": 3120001, + "InitValue": 600000000, + "LowerLimit": 500000000, + "UpperLimit": 2000000000, + "CtrlRate": 200, + "InitNovicValue": 650000000 } ] } \ No newline at end of file diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 79f8787d87dd629e44daad01b4faae3b91f55cf3..df991383b8fe9fa879d3427529b95853ef562c82 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%!R23s{`5(vlnI_%p4T^VeVAo1iPbQ?IRYhSPmAjL+(H=h8YC20Om26 Z#po8m9Drhx5;IUweP#ew#rtH){|P#w&C6!$4{g5A-u_7MwLEC&nNAuxx+42D?*(+INw>=7h` ZVGh0nbvQTxl-M~I0X_PKnTvt85CCSnJT(9S diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 7f781343a7cc7a11712f89c0ca1f3edb0dfa161a..9f7b037362a28384b6bc206eae7f788ccc486ad4 100644 GIT binary patch delta 236 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-RoCv5Zhr5twK%+vW|7_KcHDI7B8hGZ##L z&m=avlX(YF*~KoP3=}fRSl38=ECi!6GEn8#=2d2e2KP{Fz&1 zvj%%K6HuYZ|Cg0`M1)485S%K>(NPM#{H`pD>`hl*SJe#L$@^U`G&1SrM mjFX!=1t*vCy@guC40XqY6lCLA1T=}s3u5+x7Td{eY?e^P4V_g$#UOds z$pLIf(ACc3*{sSQ$22*GPjK=SPSeTDf%Gj-1E9?!ljXR6gTyy$aVIcNzQQFkc^*$Y sRKEz+E}-d~&3N?~Ctv3goLtKH7Ha8( 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 delta 9650 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 ZAD=B~|6XC?MnQRs_>&C-S?T`!{|EK`YS;h( From cb4b51b4aa8e82b6d94e1f425fe28df3898e869d Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 10:03:50 +0800 Subject: [PATCH 132/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenedata_tienlen.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index e581d75..62c1ee3 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -2117,15 +2117,16 @@ func (this *TienLenSceneData) SaveCustomLog() { Platform: this.Platform, CycleId: this.CycleID, RoomConfigId: this.GetCustom().GetRoomConfigId(), + GameFreeId: this.GetGameFreeId(), + TotalRound: this.TotalOfGames, + PlayerNum: this.PlayerNum, + Password: this.GetCustom().GetPassword(), + CostType: this.GetCustom().GetCostType(), + Voice: this.GetCustom().GetVoice(), RoomId: this.SceneId, StartTs: this.GameStartTime.Unix(), EndTs: time.Now().Unix(), State: state, - GameFreeId: this.GetGameFreeId(), - TotalRound: this.TotalOfGames, - Password: this.GetCustom().GetPassword(), - CostType: this.GetCustom().GetCostType(), - Voice: this.GetCustom().GetVoice(), } for snid := range this.BilledList { var items []*model.Item From 9b5dff5f96cd2efc5b0ff532b1b46a704a01d6cb Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 10:22:55 +0800 Subject: [PATCH 133/153] =?UTF-8?q?=E4=B8=8A=E5=88=86=E4=B8=8D=E8=B5=B0?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E9=9A=8A=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index ea70d6b..520fbfe 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -71,7 +71,7 @@ func processConnMessageQueue(queue *ConnMessageQueue) { // 移动 func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data interface{}) error { - logger.Logger.Tracef("SMDollMachinePerateHandler %v", data) + fmt.Println("SMDollMachinePerateHandler %v", data) msg, ok := data.(*machine.SMDollMachineoPerate) if !ok { return nil @@ -121,13 +121,14 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, f1, f2) case 5: //投币 - f1 := []func(){ - func() { machinedoll.Coin(conn) }, - } - f2 := []func(){ - func() {}, - } - Process(conn, f1, f2) + /* f1 := []func(){ + func() { machinedoll.Coin(conn) }, + } + f2 := []func(){ + func() {}, + } + Process(conn, f1, f2)*/ + machinedoll.Coin(conn) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } return nil From 759c98971975909a80a1dcb293b0b7dabcfcc478 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 10:43:36 +0800 Subject: [PATCH 134/153] =?UTF-8?q?=E8=8E=B7=E5=8F=96token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index e77acb9..0abe0a0 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -9,6 +9,7 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "strconv" ) type CSPlayerOpPacketFactory struct { @@ -136,7 +137,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) //生成token - token, err := token04.GenerateToken04(uint32(machineInfo.AppId), string(p.SnId), machineInfo.ServerSecret, 7200, "") + token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 7200, "") if err != nil { logger.Logger.Error(err) return err From 1b67a44d6375a8c87e3e005f4cce797a1d618cde Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 10:46:34 +0800 Subject: [PATCH 135/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E7=89=8C?= =?UTF-8?q?=E5=B1=80=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 7 +++++++ gamesrv/tienlen/scenedata_tienlen.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 8148257..761309f 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -291,6 +291,13 @@ func CSDestroyRoom(s *netlib.Session, packetid int, data interface{}, sid int64) send() return nil } + if scene.ExtraData != nil { + gs, ok := scene.ExtraData.(base.GameScene) + if ok { + gs.SceneDestroy(true) + return nil + } + } scene.Destroy(true) return nil } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 62c1ee3..0269621 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -2105,7 +2105,7 @@ func (this *TienLenSceneData) SendFirstGiveTimeItem(p *base.Player) { // SaveCustomLog 保存竞技馆对局记录 func (this *TienLenSceneData) SaveCustomLog() { - if this.CustomLogSave || !this.IsCustom() { + if this.CustomLogSave || !this.IsCustom() || this.NumOfGames == 0 { return } this.CustomLogSave = true From 59eb4ecc22abc56c675becf67af76650689b72fc Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 11:17:33 +0800 Subject: [PATCH 136/153] token --- gamesrv/clawdoll/action_clawdoll.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 0abe0a0..2971bec 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -134,7 +134,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf return nil } - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId) //生成token token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 7200, "") From d34473c6887bd5297d9aee5156b1aeb79976a785 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 11:40:04 +0800 Subject: [PATCH 137/153] token --- gamesrv/clawdoll/action_clawdoll.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 2971bec..0f785fb 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -142,7 +142,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf logger.Logger.Error(err) return err } - logger.Logger.Trace(token) + logger.Logger.Trace("======================token========================", token) pack := &clawdoll.SCCLAWDOLLSendToken{ LogicId: scene.DBGameFree.GetId(), From de339225d2d0c93bb683403a643bf9ca417c7c14 Mon Sep 17 00:00:00 2001 From: kxdd Date: Sat, 7 Sep 2024 11:58:40 +0800 Subject: [PATCH 138/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E8=8E=B7?= =?UTF-8?q?=E5=8F=96token=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 3 +- gamesrv/clawdoll/player_clawdoll.go | 9 ++ gamesrv/clawdoll/scenepolicy_clawdoll.go | 5 +- protocol/clawdoll/clawdoll.pb.go | 122 +++++++++++------------ protocol/clawdoll/clawdoll.proto | 1 - 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index e77acb9..0abe0a0 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -9,6 +9,7 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "strconv" ) type CSPlayerOpPacketFactory struct { @@ -136,7 +137,7 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) //生成token - token, err := token04.GenerateToken04(uint32(machineInfo.AppId), string(p.SnId), machineInfo.ServerSecret, 7200, "") + token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 7200, "") if err != nil { logger.Logger.Error(err) return err diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 3dd7af7..4e7a01d 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -41,11 +41,20 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool { func (this *PlayerEx) CanPayCoin() bool { itemID := int32(rule.ClawDoorItemID) + itemCount := this.GetItemCount(itemID) + if itemCount < 1 { + return false + } itemData := srvdata.GameItemMgr.Get(this.Platform, itemID) if itemData == nil { return false } + num, ok := this.Items[itemID] + if !ok || num < 1 { + return false + } + return true } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f60bbfa..8128e04 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -287,15 +287,14 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce return } - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId) - //生成token token, err := token04.GenerateToken04(uint32(machineinfo.AppId), string(p.SnId), machineinfo.ServerSecret, 3600, "") if err != nil { logger.Logger.Error(err) return } - logger.Logger.Trace(token) + + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v, token = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId, token) pack := &clawdoll.SCCLAWDOLLSendToken{ LogicId: s.DBGameFree.GetId(), diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 3143e31..7f6bfba 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -885,7 +885,6 @@ type SCCLAWDOLLSendToken struct { Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` - AppSign string `protobuf:"bytes,5,opt,name=AppSign,proto3" json:"AppSign,omitempty"` } func (x *SCCLAWDOLLSendToken) Reset() { @@ -948,13 +947,6 @@ func (x *SCCLAWDOLLSendToken) GetStreamId() string { return "" } -func (x *SCCLAWDOLLSendToken) GetAppSign() string { - if x != nil { - return x.AppSign - } - return "" -} - type CLAWDOLLWaitPlayers struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1169,64 +1161,62 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x91, 0x01, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, - 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, - 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, - 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x41, 0x70, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x41, 0x70, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x63, 0x0a, 0x13, 0x43, 0x4c, 0x41, 0x57, 0x44, - 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x4c, - 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, - 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, - 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x84, 0x01, 0x0a, - 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x74, 0x61, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, - 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, - 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, - 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, - 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, - 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, - 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, - 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, - 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, - 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, - 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, - 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6b, 0x65, 0x6e, 0x22, 0x77, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, + 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, + 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, + 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x84, 0x01, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x74, 0x61, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, + 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, + 0x0b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x10, 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, + 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, + 0x45, 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, + 0x4e, 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, + 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, + 0x47, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, + 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, + 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, + 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index ffc7cd9..b8dd5c9 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -118,7 +118,6 @@ message SCCLAWDOLLSendToken { int64 Appid = 2; string Token = 3; string StreamId = 4; - string AppSign = 5; } message CLAWDOLLWaitPlayers { From 83d5ec05fb6be3207d8f299cb410e574f770425a Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 14:04:44 +0800 Subject: [PATCH 139/153] =?UTF-8?q?=E7=94=9F=E6=88=90token=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f60bbfa..d31e214 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -4,6 +4,7 @@ import ( "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" + "strconv" "time" "mongo.games.com/goserver/core" @@ -290,7 +291,7 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId) //生成token - token, err := token04.GenerateToken04(uint32(machineinfo.AppId), string(p.SnId), machineinfo.ServerSecret, 3600, "") + token, err := token04.GenerateToken04(uint32(machineinfo.AppId), strconv.Itoa(int(p.SnId)), machineinfo.ServerSecret, 3600, "") if err != nil { logger.Logger.Error(err) return From 8174e6c406f44ae971f091d036b6e728888e9659 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 14:15:56 +0800 Subject: [PATCH 140/153] =?UTF-8?q?=E5=95=86=E5=BA=97=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/shopmgr.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 75333b9..e01fe96 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -1226,6 +1226,13 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, } + switch shopInfo.Page { + case ShopPageFangKa: + remark = fmt.Sprintf("房卡|%v", shopInfo.Id) + default: + + } + dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum, common.GainWay_ShopBuy, itemInfo, shopInfo.Id, shopInfo.Name, 0, remark, []int32{}) err := model.InsertDbShopLog(dbShop) From 1d98a31bf45c477e90389a04df42b5b66e31da1a Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 14:29:34 +0800 Subject: [PATCH 141/153] =?UTF-8?q?token=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 92 ----------- machine/action/action_server.go | 8 +- protocol/machine/machine.pb.go | 235 +++------------------------- protocol/machine/machine.proto | 14 -- 4 files changed, 28 insertions(+), 321 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 0f785fb..8e67d2d 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -1,7 +1,6 @@ package clawdoll import ( - "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" @@ -9,7 +8,6 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" - "strconv" ) type CSPlayerOpPacketFactory struct { @@ -97,98 +95,8 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data return nil } -type CSGetTokenPacketFactory struct { -} - -type CSGetTokenHandler struct { -} - -func (f *CSGetTokenPacketFactory) CreatePacket() interface{} { - pack := &clawdoll.CSCLAWDOLLGetToken{} - return pack -} - -func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - //转发到娃娃机主机 - logger.Logger.Tracef("CSGetTokenHandler") - if _, ok := data.(*clawdoll.CSCLAWDOLLGetToken); ok { - p := base.PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSGetTokenHandler p == nil") - return nil - } - - scene := p.GetScene() - if scene == nil { - return nil - } - sceneEx, ok := scene.ExtraData.(*SceneEx) - if !ok { - return nil - } - - machineId := scene.GetDBGameFree().GetId() % 6080000 - machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) - if machineInfo == nil { - logger.Logger.Warn("CSGetTokenHandler machineId = %v not found", machineId) - return nil - } - - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId) - - //生成token - token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 7200, "") - if err != nil { - logger.Logger.Error(err) - return err - } - logger.Logger.Trace("======================token========================", token) - - pack := &clawdoll.SCCLAWDOLLSendToken{ - LogicId: scene.DBGameFree.GetId(), - Appid: machineInfo.AppId, - Token: token, - StreamId: machineInfo.StreamId, - } - p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) - } - return nil -} - -// 娃娃机返回token 通知客户端 -func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) error { - logger.Logger.Tracef("MSSendTokenHandler") - if msg, ok := data.(*machine.MSSendToken); ok { - //给客户端返回token - token := msg.Token - p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) - if p == nil { - logger.Logger.Warn("MSSendTokenHandler p == nil") - return nil - } - - scene := p.GetScene() - if scene == nil { - return nil - } - - pack := &clawdoll.SCCLAWDOLLSendToken{ - LogicId: scene.DBGameFree.GetId(), - Appid: msg.Appid, - Token: token, - StreamId: msg.StreamId, - } - p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) - } - return nil -} func init() { common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{}) netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) - //客户端请求token - common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{}) - netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{}) - //获取token返回 - netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler) } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 520fbfe..bbbac92 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -3,14 +3,12 @@ package action import ( "bytes" "fmt" - "github.com/zegoim/zego_server_assistant/token/go/src/token04" "math" "mongo.games.com/game/machine/machinedoll" "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/timer" - "strconv" "sync" "time" ) @@ -270,7 +268,7 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf return nil } -// 获取进入视频房间token +/*// 获取进入视频房间token func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("SMGetTokenHandler %v", data) msg, ok := data.(*machine.SMGetToken) @@ -309,12 +307,12 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) fmt.Println("向游戏服务器发送娃娃机token:%v", info) return nil -} +}*/ func init() { netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), &machine.SMDollMachineoPerate{}, SMDollMachinePerateHandler) netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.SMDollMachineGrab{}, SMDollMachineGrabHandler) //链接成功 返回消息 netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}, SMGameLinkSucceedHandler) - netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGetToken), &machine.SMGetToken{}, SMGetTokenHandler) + //netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGetToken), &machine.SMGetToken{}, SMGetTokenHandler) } diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index e3cc943..592eab4 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -496,150 +496,6 @@ func (x *MSUpdateDollMachineStatus) GetVideoAddr() string { return "" } -//获取token -type SMGetToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` - ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` - StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` -} - -func (x *SMGetToken) Reset() { - *x = SMGetToken{} - if protoimpl.UnsafeEnabled { - mi := &file_machine_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SMGetToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SMGetToken) ProtoMessage() {} - -func (x *SMGetToken) ProtoReflect() protoreflect.Message { - mi := &file_machine_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SMGetToken.ProtoReflect.Descriptor instead. -func (*SMGetToken) Descriptor() ([]byte, []int) { - return file_machine_proto_rawDescGZIP(), []int{7} -} - -func (x *SMGetToken) GetSnid() int32 { - if x != nil { - return x.Snid - } - return 0 -} - -func (x *SMGetToken) GetAppId() int64 { - if x != nil { - return x.AppId - } - return 0 -} - -func (x *SMGetToken) GetServerSecret() string { - if x != nil { - return x.ServerSecret - } - return "" -} - -func (x *SMGetToken) GetStreamId() string { - if x != nil { - return x.StreamId - } - return "" -} - -//返回token -type MSSendToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` - StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` -} - -func (x *MSSendToken) Reset() { - *x = MSSendToken{} - if protoimpl.UnsafeEnabled { - mi := &file_machine_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MSSendToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MSSendToken) ProtoMessage() {} - -func (x *MSSendToken) ProtoReflect() protoreflect.Message { - mi := &file_machine_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MSSendToken.ProtoReflect.Descriptor instead. -func (*MSSendToken) Descriptor() ([]byte, []int) { - return file_machine_proto_rawDescGZIP(), []int{8} -} - -func (x *MSSendToken) GetSnid() int32 { - if x != nil { - return x.Snid - } - return 0 -} - -func (x *MSSendToken) GetAppid() int64 { - if x != nil { - return x.Appid - } - return 0 -} - -func (x *MSSendToken) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *MSSendToken) GetStreamId() string { - if x != nil { - return x.StreamId - } - return "" -} - var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -677,44 +533,29 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x22, 0x76, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0b, 0x4d, - 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, - 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, - 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, - 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, - 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, - 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x64, 0x64, 0x72, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, + 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, + 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, + 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, + 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -730,7 +571,7 @@ func file_machine_proto_rawDescGZIP() []byte { } var file_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_machine_proto_goTypes = []interface{}{ (DollMachinePacketID)(0), // 0: machine.DollMachinePacketID (*SMGameLinkSucceed)(nil), // 1: machine.SMGameLinkSucceed @@ -740,8 +581,6 @@ var file_machine_proto_goTypes = []interface{}{ (*MSDollMachineList)(nil), // 5: machine.MSDollMachineList (*DollMachine)(nil), // 6: machine.DollMachine (*MSUpdateDollMachineStatus)(nil), // 7: machine.MSUpdateDollMachineStatus - (*SMGetToken)(nil), // 8: machine.SMGetToken - (*MSSendToken)(nil), // 9: machine.MSSendToken } var file_machine_proto_depIdxs = []int32{ 6, // 0: machine.MSDollMachineList.data:type_name -> machine.DollMachine @@ -842,30 +681,6 @@ func file_machine_proto_init() { return nil } } - file_machine_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SMGetToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_machine_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MSSendToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ @@ -873,7 +688,7 @@ func file_machine_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_machine_proto_rawDesc, NumEnums: 1, - NumMessages: 9, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index a109267..ba7c784 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -58,18 +58,4 @@ message MSUpdateDollMachineStatus{ int32 Id = 1; int32 Status = 2; //1-空闲 0-无法使用 string VideoAddr = 3; -} -//获取token -message SMGetToken{ - int32 Snid = 1; - int64 AppId = 2; - string ServerSecret = 3; - string StreamId = 4; -} -//返回token -message MSSendToken{ - int32 Snid = 1; - int64 Appid = 2; - string Token = 3; - string StreamId = 4; } \ No newline at end of file From 7099975e9ed88d3d19b56d26faca5fd5b9229898 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 14:48:44 +0800 Subject: [PATCH 142/153] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=AF=B7?= =?UTF-8?q?=E6=B1=82token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 8e67d2d..76e7758 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -1,6 +1,7 @@ package clawdoll import ( + "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/common" rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" @@ -8,6 +9,7 @@ import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" + "strconv" ) type CSPlayerOpPacketFactory struct { @@ -95,8 +97,69 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data return nil } +type CSGetTokenPacketFactory struct { +} + +type CSGetTokenHandler struct { +} + +func (f *CSGetTokenPacketFactory) CreatePacket() interface{} { + pack := &clawdoll.CSCLAWDOLLGetToken{} + return pack +} + +func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { + //转发到娃娃机主机 + logger.Logger.Tracef("CSGetTokenHandler") + if _, ok := data.(*clawdoll.CSCLAWDOLLGetToken); ok { + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSGetTokenHandler p == nil") + return nil + } + + scene := p.GetScene() + if scene == nil { + return nil + } + sceneEx, ok := scene.ExtraData.(*SceneEx) + if !ok { + return nil + } + + machineId := scene.GetDBGameFree().GetId() % 6080000 + machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + logger.Logger.Warn("CSGetTokenHandler machineId = %v not found", machineId) + return nil + } + + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId) + + //生成token + token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 3600, "") + if err != nil { + logger.Logger.Error(err) + return err + } + logger.Logger.Trace("======================token========================", token) + + pack := &clawdoll.SCCLAWDOLLSendToken{ + LogicId: scene.DBGameFree.GetId(), + Appid: machineInfo.AppId, + Token: token, + StreamId: machineInfo.StreamId, + } + p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) + } + return nil +} + func init() { common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{}) netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{}) netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler) + //客户端请求token + common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{}) + netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{}) } From f26cb4d2ff295a07e1119f077999a322726609e0 Mon Sep 17 00:00:00 2001 From: kxdd Date: Sat, 7 Sep 2024 16:08:46 +0800 Subject: [PATCH 143/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BAplaying?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/player_clawdoll.go | 17 ++++++++++++++++- gamesrv/clawdoll/scenepolicy_clawdoll.go | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gamesrv/clawdoll/player_clawdoll.go b/gamesrv/clawdoll/player_clawdoll.go index 4e7a01d..4d2611e 100644 --- a/gamesrv/clawdoll/player_clawdoll.go +++ b/gamesrv/clawdoll/player_clawdoll.go @@ -43,8 +43,9 @@ func (this *PlayerEx) CanPayCoin() bool { itemID := int32(rule.ClawDoorItemID) itemCount := this.GetItemCount(itemID) if itemCount < 1 { - return false + return true } + itemData := srvdata.GameItemMgr.Get(this.Platform, itemID) if itemData == nil { return false @@ -67,12 +68,26 @@ func (this *PlayerEx) CostPlayCoin(count int32) bool { // 能否移动 func (this *PlayerEx) CanMove() bool { + s := this.GetScene() + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if !sceneEx.Gaming { + return false + } + } + return true } // 能否下抓 func (this *PlayerEx) CanGrab() bool { + s := this.GetScene() + if sceneEx, ok := s.ExtraData.(*SceneEx); ok { + if !sceneEx.Gaming { + return false + } + } + return true } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 8128e04..b6bb5d0 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -4,6 +4,7 @@ import ( "github.com/zegoim/zego_server_assistant/token/go/src/token04" "mongo.games.com/game/gamesrv/action" "mongo.games.com/game/protocol/clawdoll" + "strconv" "time" "mongo.games.com/goserver/core" @@ -288,7 +289,7 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce } //生成token - token, err := token04.GenerateToken04(uint32(machineinfo.AppId), string(p.SnId), machineinfo.ServerSecret, 3600, "") + token, err := token04.GenerateToken04(uint32(machineinfo.AppId), strconv.Itoa(int(p.SnId)), machineinfo.ServerSecret, 3600, "") if err != nil { logger.Logger.Error(err) return @@ -676,6 +677,8 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) + sceneEx.Gaming = false + case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -703,6 +706,7 @@ func (this *PlayGame) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { if sceneEx.TimeOutPlayGrab() { + sceneEx.Gaming = false logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } From d61a1539486fdabcc679c989bed67177c7032c94 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Sat, 7 Sep 2024 16:22:12 +0800 Subject: [PATCH 144/153] =?UTF-8?q?=E6=8A=95=E5=B8=81=E5=90=8E=E5=90=91?= =?UTF-8?q?=E5=89=8D=E7=A7=BB=E5=8A=A8=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 2 ++ machine/action/action_server.go | 7 ------- machine/machinedoll/command.go | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 76e7758..fab8d37 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -76,6 +76,8 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data case 1: if msg.Result == 1 { logger.Logger.Tracef("上分成功!!!!!!!!!!!!snid = ", msg.Snid) + //发送向前移动指令 + sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonFront) } else { logger.Logger.Tracef("上分失败!!!!!!!!!!!!snid = ", msg.Snid) } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index bbbac92..2eb245c 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -119,13 +119,6 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, f1, f2) case 5: //投币 - /* f1 := []func(){ - func() { machinedoll.Coin(conn) }, - } - f2 := []func(){ - func() {}, - } - Process(conn, f1, f2)*/ machinedoll.Coin(conn) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go index 5ed8a95..bab7a18 100644 --- a/machine/machinedoll/command.go +++ b/machine/machinedoll/command.go @@ -382,7 +382,7 @@ var data = []byte{ 0x65, //0 几币几玩 0x00, //1 几币几玩占用位 0x2D, //2 游戏时间 - 0x00, //3 出奖模式0 无概率 1 随机模式 2 固定模式 3 冠兴模式 + 0x01, //3 出奖模式0 无概率 1 随机模式 2 固定模式 3 冠兴模式 0x0F, //4 出奖概率 0x00, //5 出奖概率占用位 0x00, //6 空中抓物 0关闭 1开启 From 4eee248f20d2ecb21d92ec794b099d661e724009 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 16:58:01 +0800 Subject: [PATCH 145/153] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E8=A7=A3=E6=95=A3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenedata_tienlen.go | 3 +++ gamesrv/tienlen/scenepolicy_tienlen.go | 3 --- worldsrv/action_game.go | 2 +- worldsrv/gamesess.go | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 0269621..43c0797 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -287,6 +287,9 @@ func (this *TienLenSceneData) OnPlayerLeave(p *base.Player, reason int) { } } } + if !this.GetDestroyed() && this.IsCustom() && len(this.players) == 0 { + this.SceneDestroy(true) + } } func (this *TienLenSceneData) SceneDestroy(force bool) { diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 6a90360..07d2891 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,9 +148,6 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) - if s.IsCustom() && len(s.Players) == 0 { - s.Destroy(true) - } } // 玩家掉线 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index de81b77..2d3a724 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1341,8 +1341,8 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ sp.CostPayment(scene, p) } + code = gamehall.OpResultCode_Game_OPRC_Sucess_Game pack = &gamehall.SCCreatePrivateRoom{ - OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, GameFreeId: msg.GetGameFreeId(), RoomTypeId: msg.GetRoomTypeId(), RoomConfigId: msg.GetRoomConfigId(), diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 5ee4209..d395c4c 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -174,8 +174,8 @@ func (this *GameSession) AddScene(args *AddSceneParam) { Match: args.S.MatchParam, Params: args.S.params, } - if args.S.GetRoomTypeId() != 0 { - cfg := PlatformMgrSingleton.GetConfig(args.S.limitPlatform.IdStr).RoomConfig[args.S.GetRoomTypeId()] + if args.S.GetRoomConfigId() != 0 { + cfg := PlatformMgrSingleton.GetConfig(args.S.limitPlatform.IdStr).RoomConfig[args.S.GetRoomConfigId()] if cfg != nil { for _, v := range cfg.GetReward() { msg.Items = append(msg.Items, &server_proto.Item{ From 7991a8044d30488a60f69ce94ae0dc7dd2d481a7 Mon Sep 17 00:00:00 2001 From: kxdd Date: Sat, 7 Sep 2024 17:37:22 +0800 Subject: [PATCH 146/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 10 +++++++++ gamesrv/clawdoll/scenepolicy_clawdoll.go | 27 ++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index fab8d37..6b4800f 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -78,9 +78,19 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data logger.Logger.Tracef("上分成功!!!!!!!!!!!!snid = ", msg.Snid) //发送向前移动指令 sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonFront) + + s.ChangeSceneState(rule.ClawDollSceneStateStart) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + + ClawdollBroadcastPlayingInfo(s) + } else { logger.Logger.Tracef("上分失败!!!!!!!!!!!!snid = ", msg.Snid) } + case 2: if msg.Result == 1 { // 获得娃娃卡 diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index b6bb5d0..949d72a 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -531,13 +531,6 @@ func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, par if sceneEx.CanStart() { sceneEx.playingSnid = playerEx.SnId - s.ChangeSceneState(rule.ClawDollSceneStateStart) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) - - ClawdollBroadcastPlayingInfo(s) sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params) } @@ -886,6 +879,26 @@ func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode i func (this *StateWaitPayCoin) OnEnter(s *base.Scene) { logger.Logger.Trace("(this *StateWaitPayCoin) OnEnter, sceneid=", s.GetSceneId()) this.BaseState.OnEnter(s) + + sceneEx, ok := s.ExtraData.(*SceneEx) + if !ok { + return + } + + playerEx := sceneEx.GetPlayingEx() + if playerEx != nil { + pack := &clawdoll.SCCLAWDOLLRoundGameBilled{ + RoundId: proto.Int32(int32(sceneEx.RoundId)), + ClowResult: proto.Int32(0), + Award: proto.Int64(playerEx.gainCoin), + Balance: proto.Int64(playerEx.Coin), + } + + // logger.Logger.Trace("SCSmallRocketRoundGameBilled is pack: ", pack) + proto.SetDefaults(pack) + + playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_GAMEBILLED), pack) + } } func (this *StateWaitPayCoin) OnLeave(s *base.Scene) { From 07b985693edde5b7b7f19fc51068b67e4b519838 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 7 Sep 2024 18:06:05 +0800 Subject: [PATCH 147/153] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 90 ++++---------------------- gamesrv/base/scene.go | 21 +++--- gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- model/coinpoolsetting.go | 15 ----- robot/fishing/fishscene.go | 8 --- robot/thirteen/thirteenwaterscene.go | 2 +- worldsrv/action_friend.go | 4 +- worldsrv/action_game.go | 8 +-- worldsrv/action_server.go | 30 ++++----- worldsrv/coinscenepool.go | 2 +- worldsrv/coinscenepool_base.go | 2 +- worldsrv/coinscenepool_local.go | 4 +- worldsrv/gamesess.go | 5 ++ worldsrv/hundredscenemgr.go | 2 +- worldsrv/matchcontext.go | 1 - worldsrv/matchscenemgr.go | 78 +++++++++------------- worldsrv/player.go | 21 +----- worldsrv/scene.go | 33 +++++----- worldsrv/scenemgr.go | 79 +++++++++------------- 19 files changed, 136 insertions(+), 271 deletions(-) diff --git a/common/constant.go b/common/constant.go index ba96eb7..f8f3eb0 100644 --- a/common/constant.go +++ b/common/constant.go @@ -176,27 +176,24 @@ func IsDaZhong(gameId int) bool { // 房间编号区间 const ( - PrivateSceneStartId = 100000 - PrivateSceneMaxId = 999999 - MatchSceneStartId = 100000000 - MatchSceneMaxId = 199999999 - HundredSceneStartId = 200000000 - HundredSceneMaxId = 299999999 - HallSceneStartId = 300000000 - HallSceneMaxId = 399999999 - MiniGameSceneStartId = 400000000 - MiniGameSceneMaxId = 409999999 - CoinSceneStartId = 1000000000 //区间预留大点,因为队列匹配比较耗id,假定一天100w牌局,那么这个id区间够用1000天 - CoinSceneMaxId = 1999999999 - DgSceneId = 99 + PrivateSceneStartId = 100000 + PrivateSceneMaxId = 999999 + MatchSceneStartId = 100000000 + MatchSceneMaxId = 199999999 + HundredSceneStartId = 200000000 + HundredSceneMaxId = 299999999 + CoinSceneStartId = 1000000000 + CoinSceneMaxId = 1999999999 + DgSceneId = 99 ) // 房间模式 const ( - SceneMode_Public = 0 //公共房间 - SceneMode_Private = 2 //私人房间 - SceneMode_Match = 3 //赛事房间 - SceneMode_Thr = 4 //三方房间 + SceneModePublic = 0 // 公共房间 + SceneModePrivate = 2 // 私人房间 + SceneModeMatch = 3 // 赛事房间 + SceneModeThr = 4 // 三方房间 + SceneModePrivateMatch = 5 // 竞技馆房间 ) const ( @@ -359,30 +356,6 @@ const ( PlayerLeaveReason_AutoState //托管状态踢出房间 ) -// 万分比 -const RATE_BASE_VALUE int32 = 10000 - -const ( - SceneState_Normal int = iota - SceneState_Fishing //鱼潮 -) - -const ( - PlayerType_Rob int32 = 0 - PlayerType_Undefine = 1 - PlayerType_Black = -1 - PlayerType_White = -2 -) - -const ( - CoinPoolAIModel_Default int32 = iota //默认 - CoinPoolAIModel_Normal //正常模式 - CoinPoolAIModel_ShouFen //收分模式 - CoinPoolAIModel_ZheZhong //折中模式 - CoinPoolAIModel_TuFen //吐分 - CoinPoolAIModel_Max // -) - const ( RobotServerType int = 9 RobotServerId = 901 @@ -465,12 +438,6 @@ const ( MatchTrueMan_Priority = 1 //优先匹配真人 ) -const ( - SingleAdjustModeNormal = 0 - SingleAdjustModeWin = 1 - SingleAdjustModeLose = 2 -) - // 自动化标签(程序里产生的全部<0) const ( AutomaticTag_QZNN_Smart int32 = -1 @@ -515,35 +482,6 @@ const ( CodeTypeNo = 3 // 不使用验证码 ) -const ( - ActId_Share int = iota //0.微信分享 - ActId_OnlineReward //1.在线奖励 - ActId_UpgradeAccount //2.升级账号 - ActId_GoldTask //3.财神任务 - ActId_GoldCome //4.财神降临 - ActId_LuckyTurntable //5.转盘活动 - ActId_Yeb //6.余额宝 - ActId_Card //7.周卡月卡 - ActId_RebateTask //8.返利获取 - ActId_IOSINSTALLSTABLE //9.ios安装奖励 - ActId_VipLevelBonus //10.vip日周月等级奖励 - ActId_LoginRandCoin //11.登录红包 - ActId_OnlineRandCoin //12.红包雨 - ActId_MatchSwitch //13.比赛开关 - ActId_PromoterBind //14.手动绑定推广员 - ActId_Lottery //15.彩金池 - ActId_Task //16.活跃任务 - ActId_PROMOTER //17.全民推广 - ActId_Activity //18.活动界面 - ActId_NewYear //19.新年暗号红包活动 - ActId_Guess //20.猜灯谜活动 - ActId_Sign //21.七日签到 - ExchangeId_Alipay //22.兑换到支付宝 - ExchangeId_Bank //23.兑换到银行卡 - ExchangeId_Wechat //24.兑换到微信 - ActId_Max -) - // 匹配模式 const ( MatchMode_Normal int32 = iota //普通匹配 diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 7f32058..a59680f 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -894,8 +894,13 @@ func (this *Scene) Destroy(force bool) { logger.Logger.Trace("(this *Scene) Destroy(force bool) isCompleted", isCompleted) } +// IsSceneMode 房间模式 +func (this *Scene) IsSceneMode(mode int) bool { + return this.SceneMode == int32(mode) +} + func (this *Scene) IsPrivateScene() bool { - return this.SceneId >= common.PrivateSceneStartId && this.SceneId <= common.PrivateSceneMaxId || this.SceneMode == common.SceneMode_Private + return this.IsSceneMode(common.SceneModePrivate) || this.IsSceneMode(common.SceneModePrivateMatch) } // IsFreePublic 自由桌 @@ -910,10 +915,13 @@ func (this *Scene) IsRankMatch() bool { // IsMatchScene 比赛场 func (this *Scene) IsMatchScene() bool { - return this.SceneId >= common.MatchSceneStartId && this.SceneId <= common.MatchSceneMaxId + return this.IsSceneMode(common.SceneModeMatch) } func (this *Scene) IsCustom() bool { + if this.IsSceneMode(common.SceneModePrivateMatch) { + return true + } return this.GetDBGameFree().GetIsCustom() > 0 } @@ -921,12 +929,7 @@ func (this *Scene) IsFull() bool { return len(this.Players) >= this.GetPlayerNum() } -// 大厅场 -func (this *Scene) IsHallScene() bool { - return this.SceneId >= common.HallSceneStartId && this.SceneId <= common.HallSceneMaxId -} - -// 金豆自由场 +// 对战场 func (this *Scene) IsCoinScene() bool { return this.SceneId >= common.CoinSceneStartId && this.SceneId <= common.CoinSceneMaxId } @@ -1547,7 +1550,7 @@ func GetSaveGamePlayerListLogParam(platform, channel, promoter, packageTag, logi } func (this *Scene) SaveFriendRecord(snid int32, isWin int32, billCoin int64, baseScore int32) { - if this.SceneMode == common.SceneMode_Private { + if this.SceneMode == common.SceneModePrivate { return } log := model.NewFriendRecordLogEx(this.Platform, snid, isWin, this.GameId, baseScore, billCoin, int64(this.GetMatch().GetMatchType())) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 07d2891..b76f130 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -896,7 +896,7 @@ func (this *SceneWaitStartStateTienLen) OnTick(s *base.Scene) { return } } - if sceneEx.SceneMode == common.SceneMode_Public { + if sceneEx.SceneMode == common.SceneModePublic { if time.Now().Sub(sceneEx.StateStartTime) > rule.TienLenWaitStartTimeout { if sceneEx.Creator != 0 && sceneEx.GetRealPlayerNum() == 0 { sceneEx.Destroy(true) diff --git a/model/coinpoolsetting.go b/model/coinpoolsetting.go index 5f04f2d..93c1d43 100644 --- a/model/coinpoolsetting.go +++ b/model/coinpoolsetting.go @@ -5,7 +5,6 @@ import ( "mongo.games.com/game/protocol/server" "time" - "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" "mongo.games.com/goserver/core/logger" ) @@ -125,17 +124,3 @@ func ManageCoinPoolSetting(dbSetting *CoinPoolSetting) { } CoinPoolSettingDatas[key] = dbSetting } - -// 删除水池历史调控记录 -func RemoveCoinPoolSettingHis(ts time.Time) (*mgo.ChangeInfo, error) { - if rpcCli == nil { - return nil, ErrRPClientNoConn - } - var ret mgo.ChangeInfo - err := rpcCli.CallWithTimeout("CoinPoolSettingSvc.RemoveCoinPoolSettingHis", ts, &ret, time.Second*30) - if err != nil { - logger.Logger.Warn("RemoveCoinPoolSettingHis error:", err) - return &ret, err - } - return &ret, err -} diff --git a/robot/fishing/fishscene.go b/robot/fishing/fishscene.go index 7948626..7e08889 100644 --- a/robot/fishing/fishscene.go +++ b/robot/fishing/fishscene.go @@ -104,14 +104,6 @@ func (this *FishingScene) IsFull() bool { return len(this.players) >= int(fishing.MaxPlayer) } -func (this *FishingScene) IsMatchScene() bool { - return this.GetRoomId() >= common.MatchSceneStartId && this.GetRoomId() <= common.MatchSceneMaxId -} - -func (this *FishingScene) IsCoinScene() bool { - return this.GetRoomId() >= common.CoinSceneStartId && this.GetRoomId() <= common.CoinSceneMaxId -} - func (this *FishingScene) InitPlayer(s *netlib.Session, p *FishingPlayer) { } diff --git a/robot/thirteen/thirteenwaterscene.go b/robot/thirteen/thirteenwaterscene.go index 05ba78f..efc333e 100644 --- a/robot/thirteen/thirteenwaterscene.go +++ b/robot/thirteen/thirteenwaterscene.go @@ -79,7 +79,7 @@ func (s *ThirteenWaterScene) IsFull() bool { } func (s *ThirteenWaterScene) IsMatchScene() bool { - return s.GetRoomId() >= common.MatchSceneStartId + return s.RoomMode == common.SceneModeMatch } func (s *ThirteenWaterScene) Update(ts int64) { diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 981a779..92c6dfe 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -354,7 +354,7 @@ func (this *CSInviteFriendHandler) Process(s *netlib.Session, packetid int, data return nil } //私有房间 - if p.scene.sceneMode != common.SceneMode_Private { + if p.scene.sceneMode != common.SceneModePrivate { logger.Logger.Warn("CSInviteFriendHandler scene is common.SceneMode_Private") opRetCode = friend.OpResultCode_OPRC_InviteFriend_RoomLimit send(p) @@ -461,7 +461,7 @@ func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, da return nil } //私有房间 - if scene.sceneMode != common.SceneMode_Private { + if scene.sceneMode != common.SceneModePrivate { logger.Logger.Warn("CSInviteFriendHandler scene is common.SceneMode_Private") opRetCode = friend.OpResultCode_OPRC_InviteFriend_RoomLimit //只能进入私有房间 send(p) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 2d3a724..fcacfc2 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -314,7 +314,7 @@ func (this *CSQueryRoomInfoHandler) ProcessLocalGame(s *netlib.Session, packetid if scene.gameId == int(gameid) && scene.dbGameFree.GetSceneType() == msg.GetGameSite() { // 私人房需要是好友 - if scene.sceneMode == common.SceneMode_Private { + if scene.sceneMode == common.SceneModePrivate { if !FriendMgrSington.IsFriend(p.Platform, p.SnId, scene.creator) { continue } @@ -872,7 +872,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in //创建房间 csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) - roomId = SceneMgrSingleton.GenOnePrivateSceneId() + roomId = SceneMgrSingleton.GenOneCoinSceneId() if roomId == common.RANDID_INVALID { code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) @@ -1141,8 +1141,6 @@ func CSAudienceEnterRoomHandler(s *netlib.Session, packetId int, data interface{ code = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), msg.GetRoomId(), nil, true)) case scene.IsHundredScene(): - case scene.IsMatchScene(): - code = gamehall.OpResultCode_Game(MatchSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), int(msg.GetRoomId()), nil, true)) } failed: @@ -1306,7 +1304,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ CreateId: p.SnId, RoomId: roomId, - SceneMode: common.SceneMode_Private, + SceneMode: common.SceneModePrivateMatch, CycleTimes: 0, TotalRound: int(msg.GetRound()), Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 441578d..b7e9e7c 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -49,24 +49,13 @@ func init() { logger.Logger.Trace("GWPlayerLeave p.UnmarshalData(data)") p.UnmarshalData(data, scene) } + switch { case scene.IsCoinScene(): if !CoinSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v [coinscene]", p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } - case scene.IsMatchScene(): - if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { - logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) - } else { - //结算积分 - if !p.IsRob { - TournamentMgr.UpdateMatchInfo(p, msg.MatchId, int32(msg.GetReturnCoin()), int32(msg.GetCurIsWin()), msg.GetMatchRobotGrades()) - } else { - p.matchCtx = nil - } - } case scene.IsHundredScene(): if !HundredSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v [hundredcene]", @@ -77,7 +66,17 @@ func init() { } if p.scene != nil { - logger.Logger.Warnf("after GWPlayerLeave found snid:%v sceneid:%v gameid:%v modeid:%v", p.SnId, p.scene.sceneId, p.scene.gameId, p.scene.gameMode) + logger.Logger.Errorf("after GWPlayerLeave found snid:%v sceneid:%v gameid:%v modeid:%v", + p.SnId, p.scene.sceneId, p.scene.gameId, p.scene.gameMode) + } + + if scene.IsMatchScene() { + //结算积分 + if !p.IsRob { + TournamentMgr.UpdateMatchInfo(p, msg.MatchId, int32(msg.GetReturnCoin()), int32(msg.GetCurIsWin()), msg.GetMatchRobotGrades()) + } else { + p.matchCtx = nil + } } // 同步排位积分 @@ -363,11 +362,6 @@ func init() { if !HundredSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerForceLeave snid:%v sceneid:%v gameid:%v modeid:%v [hundredcene]", p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } - case scene.IsMatchScene(): - if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { - logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) - } default: scene.PlayerLeave(p, int(msg.GetReason())) } diff --git a/worldsrv/coinscenepool.go b/worldsrv/coinscenepool.go index c4782fb..ad71f43 100644 --- a/worldsrv/coinscenepool.go +++ b/worldsrv/coinscenepool.go @@ -102,7 +102,7 @@ func (csp *CoinScenePool) PreCreateRoom() { if preCreateNum <= 0 { return } - num := preCreateNum - csp.GetRoomNum(common.SceneMode_Public) + num := preCreateNum - csp.GetRoomNum(common.SceneModePublic) if num > 0 { logger.Logger.Tracef("预创建房间 [inc:%v] platform:%v gameFreeId:%v", num, csp.platform, csp.dbGameFree.Id) for i := 0; i < num; i++ { diff --git a/worldsrv/coinscenepool_base.go b/worldsrv/coinscenepool_base.go index ee214c1..0888bbc 100644 --- a/worldsrv/coinscenepool_base.go +++ b/worldsrv/coinscenepool_base.go @@ -218,7 +218,7 @@ func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { sceneId := SceneMgrSingleton.GenOneCoinSceneId() scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, - SceneMode: common.SceneMode_Public, + SceneMode: common.SceneModePublic, Params: params, GS: nil, Platform: limitPlatform, diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 39cd9c6..58c9017 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -225,7 +225,7 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ CreateId: p.SnId, RoomId: sceneId, - SceneMode: common.SceneMode_Public, + SceneMode: common.SceneModePublic, Params: common.CopySliceInt32ToInt64(params), GS: nil, Platform: limitPlatform, @@ -276,7 +276,7 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { if baseScore != 0 { scene = SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, - SceneMode: common.SceneMode_Public, + SceneMode: common.SceneModePublic, Params: common.CopySliceInt32ToInt64(params), Platform: limitPlatform, GF: pool.dbGameFree, diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index d395c4c..148b66c 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -200,6 +200,11 @@ func (this *GameSession) AddScene(args *AddSceneParam) { } this.Send(int(server_proto.SSPacketID_PACKET_WG_CREATESCENE), msg) logger.Logger.Tracef("WGCreateScene: %v", msg) + + // 初始化水池 + if args.S.limitPlatform != nil && args.S.dbGameFree != nil { + this.DetectCoinPoolSetting(args.S.limitPlatform.IdStr, args.S.dbGameFree.GetId(), args.S.groupId) + } } func (this *GameSession) DelScene(s *Scene) { diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 70c59e0..caa6f5f 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -205,7 +205,7 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, - SceneMode: common.SceneMode_Public, + SceneMode: common.SceneModePublic, Params: params, Platform: limitPlatform, GF: dbGameFree, diff --git a/worldsrv/matchcontext.go b/worldsrv/matchcontext.go index 30cfcc0..f9ae6c3 100644 --- a/worldsrv/matchcontext.go +++ b/worldsrv/matchcontext.go @@ -5,7 +5,6 @@ import "sort" type PlayerMatchContext struct { tm *TmMatch //比赛 p *Player //玩家数据 - scene *Scene //比赛房间 round int32 //第几轮 seq int //报名序号 grade int32 //比赛积分 diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 11b6528..83aacdc 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -6,18 +6,13 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/proto" - hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/server" ) -var MatchSceneMgrSingleton = &MatchSceneMgr{ - scenes: make(map[int]*Scene), -} +var MatchSceneMgrSingleton = &MatchSceneMgr{} // MatchSceneMgr 比赛场房间管理器 -type MatchSceneMgr struct { - scenes map[int]*Scene // 比赛场房间,房间id:房间数据 -} +type MatchSceneMgr struct{} // NewScene 创建比赛场房间 // tm 一场比赛,数据 @@ -50,7 +45,7 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen rule := srvdata.PBDB_GameRuleMgr.GetData(tm.dbGameFree.GetGameRule()) scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, - SceneMode: common.SceneMode_Match, + SceneMode: common.SceneModeMatch, Params: common.CopySliceInt32ToInt64(rule.GetParams()), Platform: limitPlatform, GF: tm.dbGameFree, @@ -73,16 +68,22 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen // MatchStart 开始首轮比赛 func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) { var scene *Scene + csp := CoinSceneMgrSingleton.GetCoinScenePool(tm.Platform, tm.dbGameFree.GetId()) + if csp == nil { + logger.Logger.Errorf("MatchStart: csp is nil, TMID=%v", tm.TMId) + return + } for _, tmp := range tm.TmPlayer { //先进真人 if scene == nil || scene.IsFull() { scene = ms.NewScene(tm, false, 1) - if scene != nil { - ms.scenes[scene.sceneId] = scene + if scene == nil { + logger.Logger.Errorf("MatchStart NewScene failed, TMID=%v", tm.TMId) + return } + csp.AddScene(scene) } p := PlayerMgrSington.GetPlayerBySnId(tmp.SnId) - if p == nil { continue } @@ -95,7 +96,10 @@ func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) { mc := TournamentMgr.CreatePlayerMatchContext(p, tm, tmp.seq) if mc != nil { mc.gaming = true - scene.PlayerEnter(p, -1, true) + if !scene.PlayerEnter(p, -1, true) { + logger.Logger.Errorf("MatchStart error: snid:%v enter scene %v failed", p.SnId, scene.sceneId) + continue + } } } // 填充机器人 @@ -116,20 +120,28 @@ func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) { // NewRoundStart 开始非首轮比赛 func (ms *MatchSceneMgr) NewRoundStart(tm *TmMatch, mct []*PlayerMatchContext, finals bool, round int32) { var scene *Scene + csp := CoinSceneMgrSingleton.GetCoinScenePool(tm.Platform, tm.dbGameFree.GetId()) + if csp == nil { + logger.Logger.Errorf("NewRoundStart: csp is nil, TMID=%v", tm.TMId) + return + } for _, tmp := range mct { if scene == nil || scene.IsFull() { scene = ms.NewScene(tm, finals, round) - if scene != nil { - ms.scenes[scene.sceneId] = scene + if scene == nil { + logger.Logger.Errorf("NewRoundStart NewScene failed, TMID=%v", tm.TMId) + return } + csp.AddScene(scene) } + p := tmp.p if p == nil { continue } if p.scene != nil { - logger.Logger.Errorf("NewRoundStart error: snid:%v in scene %v", p.SnId, p.scene.sceneId) + logger.Logger.Errorf("NewRoundStart error: snid:%v in scene %v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) continue } @@ -137,7 +149,10 @@ func (ms *MatchSceneMgr) NewRoundStart(tm *TmMatch, mct []*PlayerMatchContext, f mc.gaming = true mc.grade = mc.grade * 75 / 100 //积分衰减 mc.rank = tmp.rank - scene.PlayerEnter(p, -1, true) + if !scene.PlayerEnter(p, -1, true) { + logger.Logger.Errorf("NewRoundStart error: snid:%v enter scene %v failed", p.SnId, scene.sceneId) + continue + } } } // 填充机器人 @@ -156,36 +171,7 @@ func (ms *MatchSceneMgr) NewRoundStart(tm *TmMatch, mct []*PlayerMatchContext, f } } -func (ms *MatchSceneMgr) PlayerLeave(p *Player, reason int) bool { - if p == nil || p.scene == nil { - return true - } - if p.scene.MatchSortId == 0 { - return true - } - p.scene.PlayerLeave(p, reason) - return true -} - -func (ms *MatchSceneMgr) OnDestroyScene(sceneId int) { - _, has := ms.scenes[sceneId] - if !has { - return - } - delete(ms.scenes, sceneId) -} - -func (ms *MatchSceneMgr) AudienceEnter(p *Player, id int32, roomId int, exclude []int32, ischangeroom bool) hallproto.OpResultCode { - scene, ok := ms.scenes[roomId] - if !ok { - return hallproto.OpResultCode_OPRC_RoomHadClosed - } - if !scene.AudienceEnter(p, ischangeroom) { - return hallproto.OpResultCode_OPRC_RoomHadClosed - } - return hallproto.OpResultCode_OPRC_Sucess -} - +// MatchStop 强制停止比赛 func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) { if SceneMgrSingleton.scenes != nil && tm != nil { for _, scene := range SceneMgrSingleton.scenes { diff --git a/worldsrv/player.go b/worldsrv/player.go index ff662e6..cd756c5 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1055,23 +1055,6 @@ func (this *Player) EditMessage(msg *model.Message) { } } -func (this *Player) SendIosInstallStableMail() { - if this.layered[common.ActId_IOSINSTALLSTABLE] { - logger.Logger.Trace("this.layered[common.ActId_IOSINSTALLSTABLE] is true") - return - } - var newMsg *model.Message - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - newMsg = model.NewMessage("", 0, "", this.SnId, model.MSGTYPE_IOSINSTALLSTABLE, "系统通知", fmt.Sprintf("感谢您下载稳定版本,额外奖励%d元,请查收", int(model.GameParamData.IosStableInstallPrize/100)), - int64(model.GameParamData.IosStableInstallPrize), 0, 0, time.Now().Unix(), 0, "", nil, this.Platform, model.HallAll, nil) - return model.InsertMessage(this.Platform, newMsg) - }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { - if data == nil { - this.AddMessage(newMsg) - } - }), "SendMessage").Start() -} - func (this *Player) TestMail() { var newMsg *model.Message @@ -1974,7 +1957,7 @@ func (this *Player) AddCoin(num, add int64, gainWay int32, oper, remark string) //this.TotalData(num, gainWay) async := false - if num > 0 && this.scene != nil && !this.scene.IsTestScene() && !this.scene.IsMatchScene() && this.scene.sceneMode != common.SceneMode_Thr { //游戏场中加币,需要同步到gamesrv上 + if num > 0 && this.scene != nil && !this.scene.IsTestScene() && !this.scene.IsMatchScene() && this.scene.sceneMode != common.SceneModeThr { //游戏场中加币,需要同步到gamesrv上 if StartAsyncAddCoinTransact(this, num, gainWay, oper, remark, true, 0, true) { async = true } @@ -2029,7 +2012,7 @@ func (this *Player) AddCoinAsync(num, add int64, gainWay int32, oper, remark str //玩家可能正在换房间 async := false - if num > 0 && retryCnt < 3 && this.scene != nil && !this.scene.IsTestScene() && this.scene.sceneMode != common.SceneMode_Thr { //游戏场中加币,需要同步到gamesrv上 + if num > 0 && retryCnt < 3 && this.scene != nil && !this.scene.IsTestScene() && this.scene.sceneMode != common.SceneModeThr { //游戏场中加币,需要同步到gamesrv上 if StartAsyncAddCoinTransact(this, num, gainWay, oper, remark, broadcast, retryCnt, writeLog) { async = true } diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 2ff2a09..6793dfb 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -681,8 +681,6 @@ func (this *Scene) OnClose() { IsForce: proto.Int(1), } this.Broadcast(int(hallproto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) - - this.sp.OnStop(this) this.deleting = true this.closed = true @@ -728,39 +726,37 @@ func (this *Scene) SendGameDestroy(isGrace bool) { logger.Logger.Tracef("WG_DESTROYSCENE: %v", pack) } -// IsMatchScene 比赛场 -func (this *Scene) IsMatchScene() bool { - return this.sceneId >= common.MatchSceneStartId && this.sceneId < common.MatchSceneMaxId -} - // IsCoinScene 金币场 func (this *Scene) IsCoinScene() bool { - return this.sceneId >= common.CoinSceneStartId && this.sceneId < common.CoinSceneMaxId + return this != nil && this.csp != nil } // IsHundredScene 百人场 func (this *Scene) IsHundredScene() bool { - return this.sceneId >= common.HundredSceneStartId && this.sceneId < common.HundredSceneMaxId + return this != nil && this.hp != nil +} + +// IsMatchScene 比赛场 +func (this *Scene) IsMatchScene() bool { + return this.IsSceneMode(common.SceneModeMatch) } // IsPrivateScene 私人房间 func (this *Scene) IsPrivateScene() bool { - return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId + return this.IsSceneMode(common.SceneModePrivate) } -// IsCustom 房卡场房间 +// IsCustom 竞技馆房间 func (this *Scene) IsCustom() bool { + if this.IsSceneMode(common.SceneModePrivateMatch) { + return true + } if this.dbGameFree == nil { return false } return this.dbGameFree.IsCustom > 0 } -// IsSceneMode 房间模式 -func (this *Scene) IsSceneMode(mode int) bool { - return this.sceneMode == mode -} - // IsRankMatch 排位赛 func (this *Scene) IsRankMatch() bool { if this.dbGameFree == nil { @@ -769,6 +765,11 @@ func (this *Scene) IsRankMatch() bool { return this.dbGameFree.RankType > 0 } +// IsSceneMode 房间模式 +func (this *Scene) IsSceneMode(mode int) bool { + return this.sceneMode == mode +} + // IsTestScene 试玩场 func (this *Scene) IsTestScene() bool { if this.dbGameFree != nil { diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 439a945..b54b410 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -13,7 +13,6 @@ import ( "mongo.games.com/game/model" serverproto "mongo.games.com/game/protocol/server" webapiproto "mongo.games.com/game/protocol/webapi" - "mongo.games.com/game/webapi" ) func init() { @@ -94,18 +93,6 @@ func (m *SceneMgr) GenPassword() string { return "" } -func (m *SceneMgr) GenPasswordInt32() int32 { - for i := 0; i < 100; i++ { - s := strconv.Itoa(common.RandInt(10000, 100000)) - if _, ok := m.password[s]; !ok { - m.password[s] = struct{}{} - n, _ := strconv.Atoi(s) - return int32(n) - } - } - return 0 -} - func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { s := m.GetScene(sceneId) if s != nil && s.limitPlatform != nil { @@ -413,18 +400,12 @@ func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { return nil } m.scenes[args.RoomId] = s - s.sp.OnStart(s) // 添加到游戏服记录中 args.GS.AddScene(&AddSceneParam{ S: s, }) + s.sp.OnStart(s) logger.Logger.Infof("SceneMgr NewScene Platform:%v %+v", args.Platform.IdStr, args) - - // 创建水池 - if !s.IsMatchScene() && s.dbGameFree != nil && s.limitPlatform != nil { - //平台水池设置 - args.GS.DetectCoinPoolSetting(s.limitPlatform.IdStr, s.dbGameFree.GetId(), s.groupId) - } return s } @@ -437,24 +418,23 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { return } + s.sp.OnStop(s) + s.gameSess.DelScene(s) switch { case s.IsCoinScene(): CoinSceneMgrSingleton.OnDestroyScene(s.sceneId) case s.IsHundredScene(): HundredSceneMgrSingleton.OnDestroyScene(s.sceneId) - - case s.IsMatchScene(): - MatchSceneMgrSingleton.OnDestroyScene(s.sceneId) } - - s.gameSess.DelScene(s) s.OnClose() + delete(m.scenes, s.sceneId) delete(m.password, s.GetPassword()) logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } +// SendGameDestroy 发送游戏服销毁房间 func (m *SceneMgr) SendGameDestroy(sceneId []int, isGrace bool) { if len(sceneId) == 0 { return @@ -475,6 +455,30 @@ func (m *SceneMgr) SendGameDestroy(sceneId []int, isGrace bool) { srvlib.ServerSessionMgrSington.Broadcast(int(serverproto.SSPacketID_PACKET_WG_DESTROYSCENE), pack, common.GetSelfAreaId(), srvlib.GameServerType) } +// CheckDestroyEmptyRoom 尝试解散空闲房间 +// 非必须,防止内存泄露 +func (m *SceneMgr) CheckDestroyEmptyRoom() { + for _, s := range m.scenes { + switch { + case s.IsCoinScene(): + if !s.IsLongTimeInactive() { + continue + } + if s.dbGameFree == nil { + continue + } + if s.dbGameFree.GetCreateRoomNum() == 0 { + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDestroy(false) + } + if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp.GetRoomNum(common.SceneModePublic) > int(s.dbGameFree.GetCreateRoomNum()) { + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDestroy(false) + } + } + } +} + //=========================ClockSinker=============================== // InterestClockEvent 接收所有时间事件 @@ -483,28 +487,5 @@ func (m *SceneMgr) InterestClockEvent() int { } func (m *SceneMgr) OnMiniTimer() { - // 解散空闲房间 - for _, s := range m.scenes { - if webapi.ThridPlatformMgrSington.FindPlatformByPlatformBaseGameId(s.gameId) != nil { - continue - } - switch { - case s.IsCoinScene(): - if s.IsLongTimeInactive() { - if s.dbGameFree.GetCreateRoomNum() == 0 { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDestroy(false) - } - if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum(common.SceneMode_Public) > int(s.dbGameFree.GetCreateRoomNum()) { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDestroy(false) - } - } - case s.IsPrivateScene(): - if s.IsLongTimeInactive() { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDestroy(false) - } - } - } + m.CheckDestroyEmptyRoom() } From 1a14a35da9b9f6be1d5d7cbecbae2eb38bb82509 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Mon, 9 Sep 2024 09:29:51 +0800 Subject: [PATCH 148/153] =?UTF-8?q?=E4=B8=8B=E6=8A=93=E4=B8=8D=E8=B5=B0?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 2eb245c..a1b1a54 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -141,18 +141,20 @@ func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interf switch msg.GetTypeId() { case 1: //弱抓 - f1 := []func(){ - func() { machinedoll.WeakGrab(conn) }, - } - f2 := []func(){} - Process(conn, f1, f2) + /* f1 := []func(){ + func() { machinedoll.WeakGrab(conn) }, + } + f2 := []func(){} + Process(conn, f1, f2)*/ + machinedoll.WeakGrab(conn) case 2: //强力抓 - f1 := []func(){ - func() { machinedoll.Grab(conn) }, - } - f2 := []func(){} - Process(conn, f1, f2) + /* f1 := []func(){ + func() { machinedoll.Grab(conn) }, + } + f2 := []func(){} + Process(conn, f1, f2)*/ + machinedoll.Grab(conn) } return nil } From 18f67b7d2213e957d3dde847f64b2c79c1ad3d89 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Mon, 9 Sep 2024 09:45:15 +0800 Subject: [PATCH 149/153] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=90=91=E5=89=8D=E8=B5=B0=E4=B8=80=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 2 +- machine/action/action_server.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 6b4800f..d1f2194 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -77,7 +77,7 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data if msg.Result == 1 { logger.Logger.Tracef("上分成功!!!!!!!!!!!!snid = ", msg.Snid) //发送向前移动指令 - sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonFront) + //sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonFront) s.ChangeSceneState(rule.ClawDollSceneStateStart) sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart)) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index a1b1a54..4ab11d5 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -119,6 +119,7 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte Process(conn, f1, f2) case 5: //投币 + fmt.Println("===========玩家投币===========") machinedoll.Coin(conn) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) } From ea6ef0be41e50cc65559c8bc046d6352e97283f0 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 9 Sep 2024 10:21:24 +0800 Subject: [PATCH 150/153] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E6=89=A3=E9=99=A4?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_friend.go | 2 +- worldsrv/action_game.go | 4 ++-- worldsrv/scenepolicydata.go | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 92c6dfe..0f15b4d 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -354,7 +354,7 @@ func (this *CSInviteFriendHandler) Process(s *netlib.Session, packetid int, data return nil } //私有房间 - if p.scene.sceneMode != common.SceneModePrivate { + if !p.scene.IsPrivateScene() && !p.scene.IsCustom() { logger.Logger.Warn("CSInviteFriendHandler scene is common.SceneMode_Private") opRetCode = friend.OpResultCode_OPRC_InviteFriend_RoomLimit send(p) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index fcacfc2..829aede 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1249,7 +1249,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ costType = int64(msg.GetCostType()) } if costType < 1 || costType > 2 { - costType = 1 // 默认房主支付 + costType = 1 // 默认AA } // 语音 if cfg.GetVoice() != 3 { @@ -1335,7 +1335,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } - if cfg.GetCostType() == 1 { + if cfg.GetCostType() == 2 { sp.CostPayment(scene, p) } diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 2aa2754..4d5545c 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -66,7 +66,7 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { case common.SceneStateStart: s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { - if s.GetCostType() == 2 { + if s.GetCostType() == 1 { for _, v := range s.players { spd.CostPayment(s, v) } @@ -96,7 +96,7 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, snid int32, f func(items []*model.Item)) bool { isEnough := true var items []*model.Item - if costType == 1 { + if costType == 2 { // 房主 for _, v := range roomConfig.GetCost() { if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { @@ -119,7 +119,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba } else { items = append(items, &model.Item{ ItemId: v.GetItemId(), - ItemNum: v.GetItemNum(), + ItemNum: n, }) } } From d27a04020e77369d4f10749259ddece30ed82694 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 9 Sep 2024 10:40:26 +0800 Subject: [PATCH 151/153] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E8=BF=9B=E6=88=BF?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_friend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 0f15b4d..db3bcc2 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -461,7 +461,7 @@ func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, da return nil } //私有房间 - if scene.sceneMode != common.SceneModePrivate { + if !scene.IsPrivateScene() && !scene.IsCustom() { logger.Logger.Warn("CSInviteFriendHandler scene is common.SceneMode_Private") opRetCode = friend.OpResultCode_OPRC_InviteFriend_RoomLimit //只能进入私有房间 send(p) From 6c65a442db3a58c3383f5a83205ac7564e89f240 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Mon, 9 Sep 2024 11:24:14 +0800 Subject: [PATCH 152/153] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 4ab11d5..263423b 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -120,8 +120,9 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte case 5: //投币 fmt.Println("===========玩家投币===========") - machinedoll.Coin(conn) go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId()) + machinedoll.Coin(conn) + } return nil } From 18fe6403b7a7fc8c2d7aa9e94061db34ec426919 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 9 Sep 2024 14:04:53 +0800 Subject: [PATCH 153/153] =?UTF-8?q?=E9=82=80=E8=AF=B7=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=91=E5=AE=9A=E6=89=8B=E6=9C=BA=E5=8F=B7?= =?UTF-8?q?=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + dbproxy/mq/c_invite.go | 2 +- protocol/webapi/common.pb.go | 538 ++++++++++++++--------------- protocol/webapi/common.proto | 1 + protocol/welfare/welfare.pb.go | 601 +++++++++++++++++---------------- protocol/welfare/welfare.proto | 1 + worldsrv/action_player.go | 16 +- worldsrv/action_welfare.go | 1 + 8 files changed, 600 insertions(+), 561 deletions(-) diff --git a/common/constant.go b/common/constant.go index f8f3eb0..569461c 100644 --- a/common/constant.go +++ b/common/constant.go @@ -701,6 +701,7 @@ const ( InviteScoreTypePay = 2 // 充值 InviteScoreTypeRecharge = 3 // 充值完成 InviteScoreTypePayMe = 4 // 充值(给自己) + InviteScoreTypeBindTel = 5 // 绑定手机号 ) func InMatchChannel(ls []string, n string) bool { diff --git a/dbproxy/mq/c_invite.go b/dbproxy/mq/c_invite.go index f75f10c..5f91352 100644 --- a/dbproxy/mq/c_invite.go +++ b/dbproxy/mq/c_invite.go @@ -160,7 +160,7 @@ func init() { } switch log.Tp { - case common.InviteScoreTypeBind: + case common.InviteScoreTypeBind, common.InviteScoreTypeBindTel: // 更新绑定数量 // 更新邀请积分 // 1.邀请人增加积分 diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index bb8e8a7..398c963 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -6544,6 +6544,7 @@ type ActInviteConfig struct { Awards1 []*RankAward `protobuf:"bytes,6,rep,name=Awards1,proto3" json:"Awards1,omitempty"` // 周榜奖励列表 Awards2 []*RankAward `protobuf:"bytes,7,rep,name=Awards2,proto3" json:"Awards2,omitempty"` // 周榜奖励列表 Awards3 []*RankAward `protobuf:"bytes,8,rep,name=Awards3,proto3" json:"Awards3,omitempty"` // 周榜奖励列表 + BindTelScore int64 `protobuf:"varint,9,opt,name=BindTelScore,proto3" json:"BindTelScore,omitempty"` // 绑定手机号积分 } func (x *ActInviteConfig) Reset() { @@ -6634,6 +6635,13 @@ func (x *ActInviteConfig) GetAwards3() []*RankAward { return nil } +func (x *ActInviteConfig) GetBindTelScore() int64 { + if x != nil { + return x.BindTelScore + } + return 0 +} + // 等级奖励 type PermitLevelConfig struct { state protoimpl.MessageState @@ -9768,7 +9776,7 @@ var file_common_proto_rawDesc = []byte{ 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x41, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xb2, 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, @@ -9789,275 +9797,277 @@ var file_common_proto_rawDesc = []byte{ 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, - 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x11, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, - 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, - 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x64, 0x0a, 0x10, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, - 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, 0x61, 0x79, 0x73, 0x12, - 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, - 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x22, 0x68, 0x0a, - 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, - 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x22, + 0x0a, 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, + 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, + 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, + 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, + 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, + 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, + 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, + 0x61, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, - 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x70, 0x0a, 0x14, - 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, + 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, + 0x65, 0x22, 0x68, 0x0a, 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x53, - 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x61, - 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, - 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x4f, - 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, - 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, - 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6e, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x35, 0x0a, 0x06, 0x55, - 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x55, - 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x55, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x39, 0x0a, 0x0b, - 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6e, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x55, 0x6e, - 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x49, 0x73, - 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, - 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x43, + 0x61, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, + 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, + 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, + 0x22, 0x70, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, + 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, + 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, + 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x22, 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, - 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, - 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, - 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, - 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, - 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, - 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, 0x47, 0x75, 0x69, 0x64, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x54, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x81, 0x01, - 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, - 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, - 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, - 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, - 0x64, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, - 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, + 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x35, 0x0a, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x39, 0x0a, 0x0b, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 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, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, + 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, + 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, + 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, + 0x72, 0x61, 0x6d, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, - 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, - 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, + 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, + 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, + 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, + 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, + 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, + 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x54, 0x0a, 0x0d, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, - 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, - 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x81, 0x01, 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, + 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, + 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, + 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index 66d4c4b..ec6e5c1 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -737,6 +737,7 @@ message ActInviteConfig { repeated RankAward Awards1 = 6; // 周榜奖励列表 repeated RankAward Awards2 = 7; // 周榜奖励列表 repeated RankAward Awards3 = 8; // 周榜奖励列表 + int64 BindTelScore = 9; // 绑定手机号积分 } // 等级奖励 diff --git a/protocol/welfare/welfare.pb.go b/protocol/welfare/welfare.pb.go index e346e95..2ec057c 100644 --- a/protocol/welfare/welfare.pb.go +++ b/protocol/welfare/welfare.pb.go @@ -2368,6 +2368,7 @@ type SCInviteInfo struct { Awards1 []*RankAward `protobuf:"bytes,10,rep,name=Awards1,proto3" json:"Awards1,omitempty"` // 周榜奖励列表 Awards2 []*RankAward `protobuf:"bytes,11,rep,name=Awards2,proto3" json:"Awards2,omitempty"` // 周榜奖励列表 Awards3 []*RankAward `protobuf:"bytes,12,rep,name=Awards3,proto3" json:"Awards3,omitempty"` // 周榜奖励列表 + BindTelScore int64 `protobuf:"varint,13,opt,name=BindTelScore,proto3" json:"BindTelScore,omitempty"` // 绑定手机号积分 } func (x *SCInviteInfo) Reset() { @@ -2486,6 +2487,13 @@ func (x *SCInviteInfo) GetAwards3() []*RankAward { return nil } +func (x *SCInviteInfo) GetBindTelScore() int64 { + if x != nil { + return x.BindTelScore + } + return 0 +} + // 绑定邀请人 // PACKET_CSBindInvite type CSBindInvite struct { @@ -4314,7 +4322,7 @@ var file_welfare_proto_rawDesc = []byte{ 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xe8, 0x03, 0x0a, 0x0c, 0x53, 0x43, 0x49, 0x6e, 0x76, + 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8c, 0x04, 0x0a, 0x0c, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, @@ -4341,308 +4349,311 @@ var file_welfare_proto_rawDesc = []byte{ 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2c, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, 0x0a, 0x0c, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x43, 0x53, - 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xff, - 0x01, 0x0a, 0x10, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, - 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x6e, 0x6b, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x6e, 0x6b, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, - 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, - 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, - 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x22, 0x13, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x86, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, - 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, - 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x4e, - 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, - 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, - 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x16, - 0x0a, 0x14, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x9b, 0x02, 0x0a, 0x14, 0x53, 0x43, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x72, 0x64, 0x73, 0x33, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x42, 0x69, 0x6e, 0x64, + 0x54, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, 0x0a, 0x0c, 0x53, 0x43, 0x42, + 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x12, + 0x0a, 0x10, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0xff, 0x01, 0x0a, 0x10, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, + 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, + 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, + 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, + 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, + 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x86, 0x02, 0x0a, 0x11, 0x53, 0x43, + 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, + 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, - 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, - 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, - 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, - 0x6f, 0x70, 0x49, 0x64, 0x22, 0xab, 0x02, 0x0a, 0x18, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, - 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, - 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, - 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, - 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, - 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, - 0x49, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, - 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, - 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x27, 0x0a, 0x05, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x8b, 0x01, - 0x0a, 0x0b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, - 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, + 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, + 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, + 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, + 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, + 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x9b, 0x02, 0x0a, 0x14, 0x53, + 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, + 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, + 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x42, + 0x61, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, + 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, + 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, + 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, + 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, + 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x22, 0xab, 0x02, 0x0a, 0x18, 0x53, 0x43, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, + 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x54, 0x61, + 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0e, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x12, 0x26, 0x0a, 0x0e, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, + 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, + 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, + 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, + 0x6d, 0x4e, 0x75, 0x6d, 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, + 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x45, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x31, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, + 0x64, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x68, 0x6f, + 0x77, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, + 0x68, 0x6f, 0x77, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x0f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, + 0x12, 0x29, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, 0x64, 0x0a, 0x0a, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, - 0x77, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, - 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x64, 0x0a, 0x0f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x0c, 0x53, 0x43, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x2a, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x08, 0x53, 0x68, - 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, - 0x77, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x49, - 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, - 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x73, 0x22, 0x2f, 0x0a, - 0x0d, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, - 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xba, - 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, - 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, - 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x16, 0x0a, 0x14, 0x43, - 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x24, - 0x0a, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x6d, 0x61, 0x69, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, - 0x4e, 0x65, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, - 0x72, 0x74, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x14, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x10, 0x53, 0x43, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, - 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x70, - 0x22, 0x62, 0x0a, 0x0c, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x70, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x2a, 0xf5, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, - 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, - 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x10, 0x03, 0x12, 0x10, - 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x04, - 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x42, 0x69, 0x6e, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, - 0x69, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4d, 0x79, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x08, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, - 0x65, 0x73, 0x73, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, - 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x0a, 0x12, 0x1d, - 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4f, 0x76, - 0x65, 0x72, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x0b, 0x12, 0x16, 0x0a, - 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x10, 0x0c, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x65, 0x65, 0x64, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x0e, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x45, 0x72, 0x72, 0x43, 0x6f, 0x73, 0x74, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x10, 0x2a, 0x9d, 0x0b, 0x0a, - 0x09, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, - 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, - 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x46, 0x46, 0x55, 0x4e, 0x44, - 0x10, 0x94, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x46, 0x46, - 0x55, 0x4e, 0x44, 0x10, 0x95, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x55, 0x52, 0x4e, - 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x96, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x55, - 0x52, 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x97, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x0c, + 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, + 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2a, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, + 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, + 0x73, 0x22, 0x2f, 0x0a, 0x0d, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x22, 0xba, 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, + 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, + 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x31, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x31, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, + 0x16, 0x0a, 0x14, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x43, + 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, + 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x61, + 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, + 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x14, 0x53, 0x43, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x43, 0x53, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x10, 0x53, + 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, + 0x53, 0x68, 0x6f, 0x70, 0x22, 0x62, 0x0a, 0x0c, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, + 0x53, 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, + 0x75, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2a, 0xf5, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, + 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x43, 0x6f, + 0x69, 0x6e, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x6c, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x10, 0x06, 0x12, 0x11, 0x0a, + 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x79, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x07, + 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, + 0x6f, 0x6e, 0x64, 0x4c, 0x65, 0x73, 0x73, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x74, 0x46, 0x75, 0x6c, 0x6c, + 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, + 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, + 0x0b, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0c, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x0e, 0x12, 0x10, 0x0a, 0x0c, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x43, 0x6f, 0x73, 0x74, 0x10, 0x0f, 0x12, 0x11, 0x0a, + 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x10, + 0x2a, 0x9d, 0x0b, 0x0a, 0x09, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, + 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x5a, 0x45, + 0x52, 0x4f, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x46, + 0x46, 0x55, 0x4e, 0x44, 0x10, 0x94, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, + 0x49, 0x45, 0x46, 0x46, 0x55, 0x4e, 0x44, 0x10, 0x95, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, - 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x98, 0x14, 0x12, 0x20, 0x0a, 0x1b, + 0x54, 0x55, 0x52, 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x96, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, - 0x45, 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x99, 0x14, 0x12, 0x1f, - 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, - 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9a, 0x14, 0x12, - 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, - 0x46, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9b, 0x14, - 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, - 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9c, - 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, - 0x45, 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0x9d, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, - 0x9e, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, - 0x9f, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, - 0x4f, 0x10, 0xa0, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0xa1, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x45, 0x54, 0x54, 0x55, 0x52, 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x97, 0x14, 0x12, 0x20, + 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, + 0x5f, 0x47, 0x45, 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x98, 0x14, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, + 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, + 0x99, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0x9a, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, + 0x4f, 0x10, 0x9b, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0x9c, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0x9d, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, + 0x42, 0x4f, 0x58, 0x10, 0x9e, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, + 0x42, 0x4f, 0x58, 0x10, 0x9f, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, - 0x59, 0x10, 0xa2, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x10, - 0xa3, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0xa4, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, - 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa5, 0x14, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, - 0x4e, 0x50, 0x41, 0x59, 0x10, 0xa6, 0x14, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, - 0x50, 0x41, 0x59, 0x10, 0xa7, 0x14, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, 0x41, 0x64, 0x64, 0x75, - 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa8, 0x14, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, - 0x41, 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa9, 0x14, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x57, 0x65, 0x6c, 0x66, 0x52, - 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd4, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x57, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, - 0xd5, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xd6, 0x16, 0x12, 0x18, 0x0a, 0x13, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xd7, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd8, 0x16, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, - 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd9, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xde, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xdf, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x10, 0xe0, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x10, 0xe1, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xe2, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe3, 0x16, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, - 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0xe4, 0x16, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe5, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0xe6, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x10, 0xe7, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x10, 0xe8, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe9, - 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xea, 0x16, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xeb, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xec, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x10, - 0xed, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x10, 0x8c, 0x17, 0x42, 0x27, 0x5a, 0x25, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa0, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, + 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa1, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, + 0x53, 0x54, 0x50, 0x41, 0x59, 0x10, 0xa2, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, + 0x50, 0x41, 0x59, 0x10, 0xa3, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, + 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa4, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x49, 0x4e, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa5, 0x14, 0x12, 0x1d, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x10, 0xa6, 0x14, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, + 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x10, 0xa7, 0x14, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, + 0x41, 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa8, 0x14, 0x12, 0x22, + 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x69, 0x67, 0x6e, + 0x44, 0x61, 0x79, 0x5f, 0x41, 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, + 0xa9, 0x14, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x57, + 0x65, 0x6c, 0x66, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd4, 0x16, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x57, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x6c, + 0x69, 0x65, 0x66, 0x10, 0xd5, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xd6, 0x16, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xd7, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x10, 0xd8, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd9, 0x16, 0x12, 0x1c, + 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, + 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xde, 0x16, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xdf, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, + 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xe0, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xe1, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe2, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, + 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe3, 0x16, 0x12, 0x24, 0x0a, 0x1f, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x42, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, + 0xe4, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe5, 0x16, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x10, 0xe6, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe7, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe8, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x10, 0xe9, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xea, 0x16, + 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xeb, 0x16, 0x12, 0x1c, + 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xec, 0x16, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, + 0x68, 0x6f, 0x70, 0x10, 0xed, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x10, 0x8c, 0x17, + 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/protocol/welfare/welfare.proto b/protocol/welfare/welfare.proto index 220fafc..6c5c95d 100644 --- a/protocol/welfare/welfare.proto +++ b/protocol/welfare/welfare.proto @@ -318,6 +318,7 @@ message SCInviteInfo{ repeated RankAward Awards1 = 10; // 周榜奖励列表 repeated RankAward Awards2 = 11; // 周榜奖励列表 repeated RankAward Awards3 = 12; // 周榜奖励列表 + int64 BindTelScore = 13; // 绑定手机号积分 } // 绑定邀请人 diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 66abe75..f429b88 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -2647,14 +2647,28 @@ func CSBindTel(s *netlib.Session, packetId int, data interface{}, sid int64) err return } - // 首次绑定赠送奖励 if p.Tel == "" { + // 首次绑定赠送奖励 a := PlayerMgrSington.GetPlayerByAccount(p.AccountId) if a != nil { a.Tel = tel } p.Tel = tel p.BindTelReward() + + // 邀请人绑定手机号 + if p.PSnId > 0 { + cfg := PlatformMgrSingleton.GetConfig(p.Platform).ActInviteConfig + SaveInviteScore(&model.InviteScore{ + Platform: p.Platform, + SnId: p.SnId, + InviteSnId: p.InviterId, + Tp: common.InviteScoreTypeBind, + Score: cfg.GetBindTelScore(), + Ts: time.Now().Unix(), + Money: 0, + }) + } } // 删除验证码 diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index b9b993f..bc800d9 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -342,6 +342,7 @@ func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) cfg := PlatformMgrSingleton.GetConfig(p.Platform).ActInviteConfig if cfg != nil { ret.BindScore = cfg.GetBindScore() + ret.BindTelScore = cfg.GetBindTelScore() ret.RechargeScore = cfg.GetRechargeScore() ret.PayScore = cfg.GetPayScore() for _, v := range cfg.GetAwards1() {