commit eb8447abe2b9e8ca518e15b0aef4a5dafd933b05 Author: Ole Morud Date: Fri Feb 25 04:12:57 2022 +0100 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..73e2470 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Dota-Replay-Analysis diff --git a/demo/demo.pb.go b/demo/demo.pb.go new file mode 100644 index 0000000..a590270 --- /dev/null +++ b/demo/demo.pb.go @@ -0,0 +1,2032 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1 +// protoc v3.19.4 +// source: demo.proto + +package demo + +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) +) + +type EDemoCommands int32 + +const ( + EDemoCommands_DEM_Error EDemoCommands = -1 + EDemoCommands_DEM_Stop EDemoCommands = 0 + EDemoCommands_DEM_FileHeader EDemoCommands = 1 + EDemoCommands_DEM_FileInfo EDemoCommands = 2 + EDemoCommands_DEM_SyncTick EDemoCommands = 3 + EDemoCommands_DEM_SendTables EDemoCommands = 4 + EDemoCommands_DEM_ClassInfo EDemoCommands = 5 + EDemoCommands_DEM_StringTables EDemoCommands = 6 + EDemoCommands_DEM_Packet EDemoCommands = 7 + EDemoCommands_DEM_SignonPacket EDemoCommands = 8 + EDemoCommands_DEM_ConsoleCmd EDemoCommands = 9 + EDemoCommands_DEM_CustomData EDemoCommands = 10 + EDemoCommands_DEM_CustomDataCallbacks EDemoCommands = 11 + EDemoCommands_DEM_UserCmd EDemoCommands = 12 + EDemoCommands_DEM_FullPacket EDemoCommands = 13 + EDemoCommands_DEM_SaveGame EDemoCommands = 14 + EDemoCommands_DEM_SpawnGroups EDemoCommands = 15 + EDemoCommands_DEM_Max EDemoCommands = 16 + EDemoCommands_DEM_IsCompressed EDemoCommands = 64 +) + +// Enum value maps for EDemoCommands. +var ( + EDemoCommands_name = map[int32]string{ + -1: "DEM_Error", + 0: "DEM_Stop", + 1: "DEM_FileHeader", + 2: "DEM_FileInfo", + 3: "DEM_SyncTick", + 4: "DEM_SendTables", + 5: "DEM_ClassInfo", + 6: "DEM_StringTables", + 7: "DEM_Packet", + 8: "DEM_SignonPacket", + 9: "DEM_ConsoleCmd", + 10: "DEM_CustomData", + 11: "DEM_CustomDataCallbacks", + 12: "DEM_UserCmd", + 13: "DEM_FullPacket", + 14: "DEM_SaveGame", + 15: "DEM_SpawnGroups", + 16: "DEM_Max", + 64: "DEM_IsCompressed", + } + EDemoCommands_value = map[string]int32{ + "DEM_Error": -1, + "DEM_Stop": 0, + "DEM_FileHeader": 1, + "DEM_FileInfo": 2, + "DEM_SyncTick": 3, + "DEM_SendTables": 4, + "DEM_ClassInfo": 5, + "DEM_StringTables": 6, + "DEM_Packet": 7, + "DEM_SignonPacket": 8, + "DEM_ConsoleCmd": 9, + "DEM_CustomData": 10, + "DEM_CustomDataCallbacks": 11, + "DEM_UserCmd": 12, + "DEM_FullPacket": 13, + "DEM_SaveGame": 14, + "DEM_SpawnGroups": 15, + "DEM_Max": 16, + "DEM_IsCompressed": 64, + } +) + +func (x EDemoCommands) Enum() *EDemoCommands { + p := new(EDemoCommands) + *p = x + return p +} + +func (x EDemoCommands) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EDemoCommands) Descriptor() protoreflect.EnumDescriptor { + return file_demo_proto_enumTypes[0].Descriptor() +} + +func (EDemoCommands) Type() protoreflect.EnumType { + return &file_demo_proto_enumTypes[0] +} + +func (x EDemoCommands) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *EDemoCommands) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = EDemoCommands(num) + return nil +} + +// Deprecated: Use EDemoCommands.Descriptor instead. +func (EDemoCommands) EnumDescriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{0} +} + +type CDemoFileHeader struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DemoFileStamp *string `protobuf:"bytes,1,req,name=demo_file_stamp,json=demoFileStamp" json:"demo_file_stamp,omitempty"` + NetworkProtocol *int32 `protobuf:"varint,2,opt,name=network_protocol,json=networkProtocol" json:"network_protocol,omitempty"` + ServerName *string `protobuf:"bytes,3,opt,name=server_name,json=serverName" json:"server_name,omitempty"` + ClientName *string `protobuf:"bytes,4,opt,name=client_name,json=clientName" json:"client_name,omitempty"` + MapName *string `protobuf:"bytes,5,opt,name=map_name,json=mapName" json:"map_name,omitempty"` + GameDirectory *string `protobuf:"bytes,6,opt,name=game_directory,json=gameDirectory" json:"game_directory,omitempty"` + FullpacketsVersion *int32 `protobuf:"varint,7,opt,name=fullpackets_version,json=fullpacketsVersion" json:"fullpackets_version,omitempty"` + AllowClientsideEntities *bool `protobuf:"varint,8,opt,name=allow_clientside_entities,json=allowClientsideEntities" json:"allow_clientside_entities,omitempty"` + AllowClientsideParticles *bool `protobuf:"varint,9,opt,name=allow_clientside_particles,json=allowClientsideParticles" json:"allow_clientside_particles,omitempty"` + Addons *string `protobuf:"bytes,10,opt,name=addons" json:"addons,omitempty"` + DemoVersionName *string `protobuf:"bytes,11,opt,name=demo_version_name,json=demoVersionName" json:"demo_version_name,omitempty"` + DemoVersionGuid *string `protobuf:"bytes,12,opt,name=demo_version_guid,json=demoVersionGuid" json:"demo_version_guid,omitempty"` + BuildNum *int32 `protobuf:"varint,13,opt,name=build_num,json=buildNum" json:"build_num,omitempty"` +} + +func (x *CDemoFileHeader) Reset() { + *x = CDemoFileHeader{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoFileHeader) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoFileHeader) ProtoMessage() {} + +func (x *CDemoFileHeader) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoFileHeader.ProtoReflect.Descriptor instead. +func (*CDemoFileHeader) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{0} +} + +func (x *CDemoFileHeader) GetDemoFileStamp() string { + if x != nil && x.DemoFileStamp != nil { + return *x.DemoFileStamp + } + return "" +} + +func (x *CDemoFileHeader) GetNetworkProtocol() int32 { + if x != nil && x.NetworkProtocol != nil { + return *x.NetworkProtocol + } + return 0 +} + +func (x *CDemoFileHeader) GetServerName() string { + if x != nil && x.ServerName != nil { + return *x.ServerName + } + return "" +} + +func (x *CDemoFileHeader) GetClientName() string { + if x != nil && x.ClientName != nil { + return *x.ClientName + } + return "" +} + +func (x *CDemoFileHeader) GetMapName() string { + if x != nil && x.MapName != nil { + return *x.MapName + } + return "" +} + +func (x *CDemoFileHeader) GetGameDirectory() string { + if x != nil && x.GameDirectory != nil { + return *x.GameDirectory + } + return "" +} + +func (x *CDemoFileHeader) GetFullpacketsVersion() int32 { + if x != nil && x.FullpacketsVersion != nil { + return *x.FullpacketsVersion + } + return 0 +} + +func (x *CDemoFileHeader) GetAllowClientsideEntities() bool { + if x != nil && x.AllowClientsideEntities != nil { + return *x.AllowClientsideEntities + } + return false +} + +func (x *CDemoFileHeader) GetAllowClientsideParticles() bool { + if x != nil && x.AllowClientsideParticles != nil { + return *x.AllowClientsideParticles + } + return false +} + +func (x *CDemoFileHeader) GetAddons() string { + if x != nil && x.Addons != nil { + return *x.Addons + } + return "" +} + +func (x *CDemoFileHeader) GetDemoVersionName() string { + if x != nil && x.DemoVersionName != nil { + return *x.DemoVersionName + } + return "" +} + +func (x *CDemoFileHeader) GetDemoVersionGuid() string { + if x != nil && x.DemoVersionGuid != nil { + return *x.DemoVersionGuid + } + return "" +} + +func (x *CDemoFileHeader) GetBuildNum() int32 { + if x != nil && x.BuildNum != nil { + return *x.BuildNum + } + return 0 +} + +type CGameInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Dota *CGameInfo_CDotaGameInfo `protobuf:"bytes,4,opt,name=dota" json:"dota,omitempty"` +} + +func (x *CGameInfo) Reset() { + *x = CGameInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CGameInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CGameInfo) ProtoMessage() {} + +func (x *CGameInfo) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CGameInfo.ProtoReflect.Descriptor instead. +func (*CGameInfo) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{1} +} + +func (x *CGameInfo) GetDota() *CGameInfo_CDotaGameInfo { + if x != nil { + return x.Dota + } + return nil +} + +type CDemoFileInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PlaybackTime *float32 `protobuf:"fixed32,1,opt,name=playback_time,json=playbackTime" json:"playback_time,omitempty"` + PlaybackTicks *int32 `protobuf:"varint,2,opt,name=playback_ticks,json=playbackTicks" json:"playback_ticks,omitempty"` + PlaybackFrames *int32 `protobuf:"varint,3,opt,name=playback_frames,json=playbackFrames" json:"playback_frames,omitempty"` + GameInfo *CGameInfo `protobuf:"bytes,4,opt,name=game_info,json=gameInfo" json:"game_info,omitempty"` +} + +func (x *CDemoFileInfo) Reset() { + *x = CDemoFileInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoFileInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoFileInfo) ProtoMessage() {} + +func (x *CDemoFileInfo) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoFileInfo.ProtoReflect.Descriptor instead. +func (*CDemoFileInfo) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{2} +} + +func (x *CDemoFileInfo) GetPlaybackTime() float32 { + if x != nil && x.PlaybackTime != nil { + return *x.PlaybackTime + } + return 0 +} + +func (x *CDemoFileInfo) GetPlaybackTicks() int32 { + if x != nil && x.PlaybackTicks != nil { + return *x.PlaybackTicks + } + return 0 +} + +func (x *CDemoFileInfo) GetPlaybackFrames() int32 { + if x != nil && x.PlaybackFrames != nil { + return *x.PlaybackFrames + } + return 0 +} + +func (x *CDemoFileInfo) GetGameInfo() *CGameInfo { + if x != nil { + return x.GameInfo + } + return nil +} + +type CDemoPacket struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,3,opt,name=data" json:"data,omitempty"` +} + +func (x *CDemoPacket) Reset() { + *x = CDemoPacket{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoPacket) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoPacket) ProtoMessage() {} + +func (x *CDemoPacket) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoPacket.ProtoReflect.Descriptor instead. +func (*CDemoPacket) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{3} +} + +func (x *CDemoPacket) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type CDemoFullPacket struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StringTable *CDemoStringTables `protobuf:"bytes,1,opt,name=string_table,json=stringTable" json:"string_table,omitempty"` + Packet *CDemoPacket `protobuf:"bytes,2,opt,name=packet" json:"packet,omitempty"` +} + +func (x *CDemoFullPacket) Reset() { + *x = CDemoFullPacket{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoFullPacket) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoFullPacket) ProtoMessage() {} + +func (x *CDemoFullPacket) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoFullPacket.ProtoReflect.Descriptor instead. +func (*CDemoFullPacket) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{4} +} + +func (x *CDemoFullPacket) GetStringTable() *CDemoStringTables { + if x != nil { + return x.StringTable + } + return nil +} + +func (x *CDemoFullPacket) GetPacket() *CDemoPacket { + if x != nil { + return x.Packet + } + return nil +} + +type CDemoSaveGame struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + SteamId *uint64 `protobuf:"fixed64,2,opt,name=steam_id,json=steamId" json:"steam_id,omitempty"` + Signature *uint64 `protobuf:"fixed64,3,opt,name=signature" json:"signature,omitempty"` + Version *int32 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` +} + +func (x *CDemoSaveGame) Reset() { + *x = CDemoSaveGame{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoSaveGame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoSaveGame) ProtoMessage() {} + +func (x *CDemoSaveGame) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoSaveGame.ProtoReflect.Descriptor instead. +func (*CDemoSaveGame) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{5} +} + +func (x *CDemoSaveGame) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *CDemoSaveGame) GetSteamId() uint64 { + if x != nil && x.SteamId != nil { + return *x.SteamId + } + return 0 +} + +func (x *CDemoSaveGame) GetSignature() uint64 { + if x != nil && x.Signature != nil { + return *x.Signature + } + return 0 +} + +func (x *CDemoSaveGame) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +type CDemoSyncTick struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CDemoSyncTick) Reset() { + *x = CDemoSyncTick{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoSyncTick) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoSyncTick) ProtoMessage() {} + +func (x *CDemoSyncTick) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoSyncTick.ProtoReflect.Descriptor instead. +func (*CDemoSyncTick) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{6} +} + +type CDemoConsoleCmd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cmdstring *string `protobuf:"bytes,1,opt,name=cmdstring" json:"cmdstring,omitempty"` +} + +func (x *CDemoConsoleCmd) Reset() { + *x = CDemoConsoleCmd{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoConsoleCmd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoConsoleCmd) ProtoMessage() {} + +func (x *CDemoConsoleCmd) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoConsoleCmd.ProtoReflect.Descriptor instead. +func (*CDemoConsoleCmd) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{7} +} + +func (x *CDemoConsoleCmd) GetCmdstring() string { + if x != nil && x.Cmdstring != nil { + return *x.Cmdstring + } + return "" +} + +type CDemoSendTables struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` +} + +func (x *CDemoSendTables) Reset() { + *x = CDemoSendTables{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoSendTables) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoSendTables) ProtoMessage() {} + +func (x *CDemoSendTables) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoSendTables.ProtoReflect.Descriptor instead. +func (*CDemoSendTables) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{8} +} + +func (x *CDemoSendTables) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type CDemoClassInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Classes []*CDemoClassInfoClassT `protobuf:"bytes,1,rep,name=classes" json:"classes,omitempty"` +} + +func (x *CDemoClassInfo) Reset() { + *x = CDemoClassInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoClassInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoClassInfo) ProtoMessage() {} + +func (x *CDemoClassInfo) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoClassInfo.ProtoReflect.Descriptor instead. +func (*CDemoClassInfo) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{9} +} + +func (x *CDemoClassInfo) GetClasses() []*CDemoClassInfoClassT { + if x != nil { + return x.Classes + } + return nil +} + +type CDemoCustomData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CallbackIndex *int32 `protobuf:"varint,1,opt,name=callback_index,json=callbackIndex" json:"callback_index,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` +} + +func (x *CDemoCustomData) Reset() { + *x = CDemoCustomData{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoCustomData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoCustomData) ProtoMessage() {} + +func (x *CDemoCustomData) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoCustomData.ProtoReflect.Descriptor instead. +func (*CDemoCustomData) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{10} +} + +func (x *CDemoCustomData) GetCallbackIndex() int32 { + if x != nil && x.CallbackIndex != nil { + return *x.CallbackIndex + } + return 0 +} + +func (x *CDemoCustomData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type CDemoCustomDataCallbacks struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SaveId []string `protobuf:"bytes,1,rep,name=save_id,json=saveId" json:"save_id,omitempty"` +} + +func (x *CDemoCustomDataCallbacks) Reset() { + *x = CDemoCustomDataCallbacks{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoCustomDataCallbacks) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoCustomDataCallbacks) ProtoMessage() {} + +func (x *CDemoCustomDataCallbacks) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoCustomDataCallbacks.ProtoReflect.Descriptor instead. +func (*CDemoCustomDataCallbacks) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{11} +} + +func (x *CDemoCustomDataCallbacks) GetSaveId() []string { + if x != nil { + return x.SaveId + } + return nil +} + +type CDemoStringTables struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tables []*CDemoStringTablesTableT `protobuf:"bytes,1,rep,name=tables" json:"tables,omitempty"` +} + +func (x *CDemoStringTables) Reset() { + *x = CDemoStringTables{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoStringTables) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoStringTables) ProtoMessage() {} + +func (x *CDemoStringTables) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoStringTables.ProtoReflect.Descriptor instead. +func (*CDemoStringTables) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{12} +} + +func (x *CDemoStringTables) GetTables() []*CDemoStringTablesTableT { + if x != nil { + return x.Tables + } + return nil +} + +type CDemoStop struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CDemoStop) Reset() { + *x = CDemoStop{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoStop) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoStop) ProtoMessage() {} + +func (x *CDemoStop) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[13] + 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 CDemoStop.ProtoReflect.Descriptor instead. +func (*CDemoStop) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{13} +} + +type CDemoUserCmd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CmdNumber *int32 `protobuf:"varint,1,opt,name=cmd_number,json=cmdNumber" json:"cmd_number,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` +} + +func (x *CDemoUserCmd) Reset() { + *x = CDemoUserCmd{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoUserCmd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoUserCmd) ProtoMessage() {} + +func (x *CDemoUserCmd) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[14] + 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 CDemoUserCmd.ProtoReflect.Descriptor instead. +func (*CDemoUserCmd) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{14} +} + +func (x *CDemoUserCmd) GetCmdNumber() int32 { + if x != nil && x.CmdNumber != nil { + return *x.CmdNumber + } + return 0 +} + +func (x *CDemoUserCmd) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type CDemoSpawnGroups struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msgs [][]byte `protobuf:"bytes,3,rep,name=msgs" json:"msgs,omitempty"` +} + +func (x *CDemoSpawnGroups) Reset() { + *x = CDemoSpawnGroups{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoSpawnGroups) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoSpawnGroups) ProtoMessage() {} + +func (x *CDemoSpawnGroups) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoSpawnGroups.ProtoReflect.Descriptor instead. +func (*CDemoSpawnGroups) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{15} +} + +func (x *CDemoSpawnGroups) GetMsgs() [][]byte { + if x != nil { + return x.Msgs + } + return nil +} + +type CGameInfo_CDotaGameInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchId *uint64 `protobuf:"varint,1,opt,name=match_id,json=matchId" json:"match_id,omitempty"` + GameMode *int32 `protobuf:"varint,2,opt,name=game_mode,json=gameMode" json:"game_mode,omitempty"` + GameWinner *int32 `protobuf:"varint,3,opt,name=game_winner,json=gameWinner" json:"game_winner,omitempty"` + PlayerInfo []*CGameInfo_CDotaGameInfo_CPlayerInfo `protobuf:"bytes,4,rep,name=player_info,json=playerInfo" json:"player_info,omitempty"` + Leagueid *uint32 `protobuf:"varint,5,opt,name=leagueid" json:"leagueid,omitempty"` + PicksBans []*CGameInfo_CDotaGameInfo_CHeroSelectEvent `protobuf:"bytes,6,rep,name=picks_bans,json=picksBans" json:"picks_bans,omitempty"` + RadiantTeamId *uint32 `protobuf:"varint,7,opt,name=radiant_team_id,json=radiantTeamId" json:"radiant_team_id,omitempty"` + DireTeamId *uint32 `protobuf:"varint,8,opt,name=dire_team_id,json=direTeamId" json:"dire_team_id,omitempty"` + RadiantTeamTag *string `protobuf:"bytes,9,opt,name=radiant_team_tag,json=radiantTeamTag" json:"radiant_team_tag,omitempty"` + DireTeamTag *string `protobuf:"bytes,10,opt,name=dire_team_tag,json=direTeamTag" json:"dire_team_tag,omitempty"` + EndTime *uint32 `protobuf:"varint,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (x *CGameInfo_CDotaGameInfo) Reset() { + *x = CGameInfo_CDotaGameInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CGameInfo_CDotaGameInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CGameInfo_CDotaGameInfo) ProtoMessage() {} + +func (x *CGameInfo_CDotaGameInfo) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CGameInfo_CDotaGameInfo.ProtoReflect.Descriptor instead. +func (*CGameInfo_CDotaGameInfo) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *CGameInfo_CDotaGameInfo) GetMatchId() uint64 { + if x != nil && x.MatchId != nil { + return *x.MatchId + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetGameMode() int32 { + if x != nil && x.GameMode != nil { + return *x.GameMode + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetGameWinner() int32 { + if x != nil && x.GameWinner != nil { + return *x.GameWinner + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetPlayerInfo() []*CGameInfo_CDotaGameInfo_CPlayerInfo { + if x != nil { + return x.PlayerInfo + } + return nil +} + +func (x *CGameInfo_CDotaGameInfo) GetLeagueid() uint32 { + if x != nil && x.Leagueid != nil { + return *x.Leagueid + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetPicksBans() []*CGameInfo_CDotaGameInfo_CHeroSelectEvent { + if x != nil { + return x.PicksBans + } + return nil +} + +func (x *CGameInfo_CDotaGameInfo) GetRadiantTeamId() uint32 { + if x != nil && x.RadiantTeamId != nil { + return *x.RadiantTeamId + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetDireTeamId() uint32 { + if x != nil && x.DireTeamId != nil { + return *x.DireTeamId + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo) GetRadiantTeamTag() string { + if x != nil && x.RadiantTeamTag != nil { + return *x.RadiantTeamTag + } + return "" +} + +func (x *CGameInfo_CDotaGameInfo) GetDireTeamTag() string { + if x != nil && x.DireTeamTag != nil { + return *x.DireTeamTag + } + return "" +} + +func (x *CGameInfo_CDotaGameInfo) GetEndTime() uint32 { + if x != nil && x.EndTime != nil { + return *x.EndTime + } + return 0 +} + +type CGameInfo_CDotaGameInfo_CPlayerInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HeroName *string `protobuf:"bytes,1,opt,name=hero_name,json=heroName" json:"hero_name,omitempty"` + PlayerName *string `protobuf:"bytes,2,opt,name=player_name,json=playerName" json:"player_name,omitempty"` + IsFakeClient *bool `protobuf:"varint,3,opt,name=is_fake_client,json=isFakeClient" json:"is_fake_client,omitempty"` + Steamid *uint64 `protobuf:"varint,4,opt,name=steamid" json:"steamid,omitempty"` + GameTeam *int32 `protobuf:"varint,5,opt,name=game_team,json=gameTeam" json:"game_team,omitempty"` +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) Reset() { + *x = CGameInfo_CDotaGameInfo_CPlayerInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CGameInfo_CDotaGameInfo_CPlayerInfo) ProtoMessage() {} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[17] + 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 CGameInfo_CDotaGameInfo_CPlayerInfo.ProtoReflect.Descriptor instead. +func (*CGameInfo_CDotaGameInfo_CPlayerInfo) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{1, 0, 0} +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) GetHeroName() string { + if x != nil && x.HeroName != nil { + return *x.HeroName + } + return "" +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) GetPlayerName() string { + if x != nil && x.PlayerName != nil { + return *x.PlayerName + } + return "" +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) GetIsFakeClient() bool { + if x != nil && x.IsFakeClient != nil { + return *x.IsFakeClient + } + return false +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) GetSteamid() uint64 { + if x != nil && x.Steamid != nil { + return *x.Steamid + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo_CPlayerInfo) GetGameTeam() int32 { + if x != nil && x.GameTeam != nil { + return *x.GameTeam + } + return 0 +} + +type CGameInfo_CDotaGameInfo_CHeroSelectEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsPick *bool `protobuf:"varint,1,opt,name=is_pick,json=isPick" json:"is_pick,omitempty"` + Team *uint32 `protobuf:"varint,2,opt,name=team" json:"team,omitempty"` + HeroId *uint32 `protobuf:"varint,3,opt,name=hero_id,json=heroId" json:"hero_id,omitempty"` +} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) Reset() { + *x = CGameInfo_CDotaGameInfo_CHeroSelectEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CGameInfo_CDotaGameInfo_CHeroSelectEvent) ProtoMessage() {} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CGameInfo_CDotaGameInfo_CHeroSelectEvent.ProtoReflect.Descriptor instead. +func (*CGameInfo_CDotaGameInfo_CHeroSelectEvent) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{1, 0, 1} +} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) GetIsPick() bool { + if x != nil && x.IsPick != nil { + return *x.IsPick + } + return false +} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) GetTeam() uint32 { + if x != nil && x.Team != nil { + return *x.Team + } + return 0 +} + +func (x *CGameInfo_CDotaGameInfo_CHeroSelectEvent) GetHeroId() uint32 { + if x != nil && x.HeroId != nil { + return *x.HeroId + } + return 0 +} + +type CDemoClassInfoClassT struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClassId *int32 `protobuf:"varint,1,opt,name=class_id,json=classId" json:"class_id,omitempty"` + NetworkName *string `protobuf:"bytes,2,opt,name=network_name,json=networkName" json:"network_name,omitempty"` + TableName *string `protobuf:"bytes,3,opt,name=table_name,json=tableName" json:"table_name,omitempty"` +} + +func (x *CDemoClassInfoClassT) Reset() { + *x = CDemoClassInfoClassT{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoClassInfoClassT) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoClassInfoClassT) ProtoMessage() {} + +func (x *CDemoClassInfoClassT) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoClassInfoClassT.ProtoReflect.Descriptor instead. +func (*CDemoClassInfoClassT) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *CDemoClassInfoClassT) GetClassId() int32 { + if x != nil && x.ClassId != nil { + return *x.ClassId + } + return 0 +} + +func (x *CDemoClassInfoClassT) GetNetworkName() string { + if x != nil && x.NetworkName != nil { + return *x.NetworkName + } + return "" +} + +func (x *CDemoClassInfoClassT) GetTableName() string { + if x != nil && x.TableName != nil { + return *x.TableName + } + return "" +} + +type CDemoStringTablesItemsT struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Str *string `protobuf:"bytes,1,opt,name=str" json:"str,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` +} + +func (x *CDemoStringTablesItemsT) Reset() { + *x = CDemoStringTablesItemsT{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoStringTablesItemsT) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoStringTablesItemsT) ProtoMessage() {} + +func (x *CDemoStringTablesItemsT) ProtoReflect() protoreflect.Message { + mi := &file_demo_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 CDemoStringTablesItemsT.ProtoReflect.Descriptor instead. +func (*CDemoStringTablesItemsT) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *CDemoStringTablesItemsT) GetStr() string { + if x != nil && x.Str != nil { + return *x.Str + } + return "" +} + +func (x *CDemoStringTablesItemsT) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type CDemoStringTablesTableT struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TableName *string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + Items []*CDemoStringTablesItemsT `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` + ItemsClientside []*CDemoStringTablesItemsT `protobuf:"bytes,3,rep,name=items_clientside,json=itemsClientside" json:"items_clientside,omitempty"` + TableFlags *int32 `protobuf:"varint,4,opt,name=table_flags,json=tableFlags" json:"table_flags,omitempty"` +} + +func (x *CDemoStringTablesTableT) Reset() { + *x = CDemoStringTablesTableT{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CDemoStringTablesTableT) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CDemoStringTablesTableT) ProtoMessage() {} + +func (x *CDemoStringTablesTableT) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[21] + 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 CDemoStringTablesTableT.ProtoReflect.Descriptor instead. +func (*CDemoStringTablesTableT) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{12, 1} +} + +func (x *CDemoStringTablesTableT) GetTableName() string { + if x != nil && x.TableName != nil { + return *x.TableName + } + return "" +} + +func (x *CDemoStringTablesTableT) GetItems() []*CDemoStringTablesItemsT { + if x != nil { + return x.Items + } + return nil +} + +func (x *CDemoStringTablesTableT) GetItemsClientside() []*CDemoStringTablesItemsT { + if x != nil { + return x.ItemsClientside + } + return nil +} + +func (x *CDemoStringTablesTableT) GetTableFlags() int32 { + if x != nil && x.TableFlags != nil { + return *x.TableFlags + } + return 0 +} + +var File_demo_proto protoreflect.FileDescriptor + +var file_demo_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa0, 0x04, 0x0a, + 0x0f, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x6d, 0x6f, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x6d, 0x6f, 0x46, + 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x61, 0x6d, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x75, 0x6c, 0x6c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x66, 0x75, 0x6c, 0x6c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, + 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, + 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, + 0x6d, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x6d, 0x6f, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x6d, 0x6f, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x64, 0x65, 0x6d, 0x6f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x75, + 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x22, + 0x89, 0x06, 0x0a, 0x09, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, + 0x04, 0x64, 0x6f, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x43, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x44, 0x6f, 0x74, 0x61, 0x47, 0x61, 0x6d, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x6f, 0x74, 0x61, 0x1a, 0xcd, 0x05, 0x0a, 0x0d, + 0x43, 0x44, 0x6f, 0x74, 0x61, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, + 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x61, 0x6d, + 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x77, 0x69, + 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x67, 0x61, 0x6d, 0x65, + 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x43, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x44, 0x6f, 0x74, 0x61, 0x47, 0x61, 0x6d, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x65, 0x61, 0x67, 0x75, 0x65, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x6c, 0x65, 0x61, 0x67, 0x75, 0x65, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x70, 0x69, 0x63, + 0x6b, 0x73, 0x5f, 0x62, 0x61, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x43, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x44, 0x6f, 0x74, 0x61, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x48, 0x65, 0x72, 0x6f, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x70, 0x69, 0x63, 0x6b, 0x73, 0x42, + 0x61, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x74, + 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x61, + 0x64, 0x69, 0x61, 0x6e, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x64, + 0x69, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x72, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x28, 0x0a, + 0x10, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x74, + 0x54, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x5f, + 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x69, 0x72, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0xa8, 0x01, 0x0a, 0x0b, 0x43, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x65, 0x72, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x66, 0x61, 0x6b, 0x65, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, + 0x46, 0x61, 0x6b, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, + 0x65, 0x61, 0x6d, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x65, + 0x61, 0x6d, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x65, 0x61, + 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x54, 0x65, 0x61, + 0x6d, 0x1a, 0x58, 0x0a, 0x10, 0x43, 0x48, 0x65, 0x72, 0x6f, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x70, 0x69, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x50, 0x69, 0x63, 0x6b, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, + 0x61, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x72, 0x6f, 0x49, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x0d, + 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, + 0x0d, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, + 0x69, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x79, + 0x62, 0x61, 0x63, 0x6b, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, + 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x27, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x21, 0x0a, 0x0b, 0x43, + 0x44, 0x65, 0x6d, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6e, + 0x0a, 0x0f, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x76, + 0x0a, 0x0d, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x61, 0x76, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x07, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x06, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, + 0x79, 0x6e, 0x63, 0x54, 0x69, 0x63, 0x6b, 0x22, 0x2f, 0x0a, 0x0f, 0x43, 0x44, 0x65, 0x6d, 0x6f, + 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x43, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6d, + 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x6d, 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x25, 0x0a, 0x0f, 0x43, 0x44, 0x65, 0x6d, + 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xab, 0x01, 0x0a, 0x0e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x52, 0x07, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x65, 0x73, 0x1a, 0x66, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4c, 0x0a, + 0x0f, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, + 0x63, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x33, 0x0a, 0x18, 0x43, + 0x44, 0x65, 0x6d, 0x6f, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x43, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x61, 0x76, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x61, 0x76, 0x65, 0x49, 0x64, + 0x22, 0xbd, 0x02, 0x0a, 0x11, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x2f, 0x0a, 0x07, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x5f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xc2, 0x01, 0x0a, 0x07, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, + 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x74, 0x52, 0x0f, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x64, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x22, 0x0b, 0x0a, 0x09, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x74, 0x6f, 0x70, 0x22, 0x41, 0x0a, + 0x0c, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6d, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x6d, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x63, 0x6d, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x26, 0x0a, 0x10, 0x43, 0x44, 0x65, 0x6d, 0x6f, 0x53, 0x70, 0x61, 0x77, 0x6e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x2a, 0x84, 0x03, 0x0a, 0x0d, 0x45, 0x44, 0x65, + 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x09, 0x44, 0x45, + 0x4d, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4d, 0x5f, 0x53, 0x74, 0x6f, 0x70, 0x10, 0x00, + 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4d, 0x5f, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4d, 0x5f, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4d, 0x5f, 0x53, 0x79, + 0x6e, 0x63, 0x54, 0x69, 0x63, 0x6b, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4d, 0x5f, + 0x53, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, + 0x44, 0x45, 0x4d, 0x5f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x05, 0x12, + 0x14, 0x0a, 0x10, 0x44, 0x45, 0x4d, 0x5f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x4d, 0x5f, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x4d, 0x5f, 0x53, 0x69, 0x67, + 0x6e, 0x6f, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x44, + 0x45, 0x4d, 0x5f, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x43, 0x6d, 0x64, 0x10, 0x09, 0x12, + 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4d, 0x5f, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x61, 0x74, + 0x61, 0x10, 0x0a, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x45, 0x4d, 0x5f, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x44, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x10, 0x0b, + 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x4d, 0x5f, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6d, 0x64, 0x10, + 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4d, 0x5f, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x10, 0x0d, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4d, 0x5f, 0x53, 0x61, 0x76, + 0x65, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x4d, 0x5f, 0x53, + 0x70, 0x61, 0x77, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x10, 0x0f, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x4d, 0x5f, 0x4d, 0x61, 0x78, 0x10, 0x10, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x4d, + 0x5f, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x10, 0x40, 0x42, + 0x0b, 0x5a, 0x06, 0x2e, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x80, 0x01, 0x00, +} + +var ( + file_demo_proto_rawDescOnce sync.Once + file_demo_proto_rawDescData = file_demo_proto_rawDesc +) + +func file_demo_proto_rawDescGZIP() []byte { + file_demo_proto_rawDescOnce.Do(func() { + file_demo_proto_rawDescData = protoimpl.X.CompressGZIP(file_demo_proto_rawDescData) + }) + return file_demo_proto_rawDescData +} + +var file_demo_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_demo_proto_goTypes = []interface{}{ + (EDemoCommands)(0), // 0: EDemoCommands + (*CDemoFileHeader)(nil), // 1: CDemoFileHeader + (*CGameInfo)(nil), // 2: CGameInfo + (*CDemoFileInfo)(nil), // 3: CDemoFileInfo + (*CDemoPacket)(nil), // 4: CDemoPacket + (*CDemoFullPacket)(nil), // 5: CDemoFullPacket + (*CDemoSaveGame)(nil), // 6: CDemoSaveGame + (*CDemoSyncTick)(nil), // 7: CDemoSyncTick + (*CDemoConsoleCmd)(nil), // 8: CDemoConsoleCmd + (*CDemoSendTables)(nil), // 9: CDemoSendTables + (*CDemoClassInfo)(nil), // 10: CDemoClassInfo + (*CDemoCustomData)(nil), // 11: CDemoCustomData + (*CDemoCustomDataCallbacks)(nil), // 12: CDemoCustomDataCallbacks + (*CDemoStringTables)(nil), // 13: CDemoStringTables + (*CDemoStop)(nil), // 14: CDemoStop + (*CDemoUserCmd)(nil), // 15: CDemoUserCmd + (*CDemoSpawnGroups)(nil), // 16: CDemoSpawnGroups + (*CGameInfo_CDotaGameInfo)(nil), // 17: CGameInfo.CDotaGameInfo + (*CGameInfo_CDotaGameInfo_CPlayerInfo)(nil), // 18: CGameInfo.CDotaGameInfo.CPlayerInfo + (*CGameInfo_CDotaGameInfo_CHeroSelectEvent)(nil), // 19: CGameInfo.CDotaGameInfo.CHeroSelectEvent + (*CDemoClassInfoClassT)(nil), // 20: CDemoClassInfo.class_t + (*CDemoStringTablesItemsT)(nil), // 21: CDemoStringTables.items_t + (*CDemoStringTablesTableT)(nil), // 22: CDemoStringTables.table_t +} +var file_demo_proto_depIdxs = []int32{ + 17, // 0: CGameInfo.dota:type_name -> CGameInfo.CDotaGameInfo + 2, // 1: CDemoFileInfo.game_info:type_name -> CGameInfo + 13, // 2: CDemoFullPacket.string_table:type_name -> CDemoStringTables + 4, // 3: CDemoFullPacket.packet:type_name -> CDemoPacket + 20, // 4: CDemoClassInfo.classes:type_name -> CDemoClassInfo.class_t + 22, // 5: CDemoStringTables.tables:type_name -> CDemoStringTables.table_t + 18, // 6: CGameInfo.CDotaGameInfo.player_info:type_name -> CGameInfo.CDotaGameInfo.CPlayerInfo + 19, // 7: CGameInfo.CDotaGameInfo.picks_bans:type_name -> CGameInfo.CDotaGameInfo.CHeroSelectEvent + 21, // 8: CDemoStringTables.table_t.items:type_name -> CDemoStringTables.items_t + 21, // 9: CDemoStringTables.table_t.items_clientside:type_name -> CDemoStringTables.items_t + 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 +} + +func init() { file_demo_proto_init() } +func file_demo_proto_init() { + if File_demo_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_demo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoFileHeader); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CGameInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoFileInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoPacket); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoFullPacket); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoSaveGame); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoSyncTick); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoConsoleCmd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoSendTables); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoClassInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoCustomData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoCustomDataCallbacks); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoStringTables); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoStop); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoUserCmd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoSpawnGroups); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CGameInfo_CDotaGameInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CGameInfo_CDotaGameInfo_CPlayerInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CGameInfo_CDotaGameInfo_CHeroSelectEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoClassInfoClassT); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoStringTablesItemsT); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CDemoStringTablesTableT); 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_demo_proto_rawDesc, + NumEnums: 1, + NumMessages: 22, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_demo_proto_goTypes, + DependencyIndexes: file_demo_proto_depIdxs, + EnumInfos: file_demo_proto_enumTypes, + MessageInfos: file_demo_proto_msgTypes, + }.Build() + File_demo_proto = out.File + file_demo_proto_rawDesc = nil + file_demo_proto_goTypes = nil + file_demo_proto_depIdxs = nil +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..595d760 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/olemorud/replay-parser + +go 1.17 + +require ( + github.com/golang/snappy v0.0.4 + google.golang.org/protobuf v1.27.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bf8345c --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/main.go b/main.go new file mode 100644 index 0000000..e377076 --- /dev/null +++ b/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "bufio" + "fmt" + "os" + + "github.com/olemorud/replay-parser/parse" +) + +func main() { + f, err := os.Open("replays/dog2.dem") + if err != nil { + fmt.Println(fmt.Errorf("error reading file: %v", err)) + } + + r := bufio.NewReader(f) + + size, err := parse.First(r) + if err != nil { + fmt.Println(err) + } + + if _, err := r.Discard(int(size) - 12); err != nil { + fmt.Println(fmt.Errorf("error jumping to last frame: %v", err)) + } + + frame, err := parse.DecodeNextFrame(r) + if err != nil { + fmt.Println(fmt.Errorf("error parsing frame: %v", err)) + } + + //fmt.Printf("%+v", frame.Message) + + for _, player := range frame.Message.GameInfo.Dota.PlayerInfo { + fmt.Println(*player.HeroName) + fmt.Println(*player.PlayerName) + fmt.Println("Steam:", *player.Steamid) + fmt.Println("") + + } + + //fmt.Printf("%+v", ) + +} diff --git a/parse/const.go b/parse/const.go new file mode 100644 index 0000000..84125c6 --- /dev/null +++ b/parse/const.go @@ -0,0 +1,3 @@ +package parse + +const SIGNATURE = "PBDEMS2\x00" diff --git a/parse/parse.go b/parse/parse.go new file mode 100644 index 0000000..e01a07e --- /dev/null +++ b/parse/parse.go @@ -0,0 +1,98 @@ +package parse + +import ( + "bufio" + "encoding/binary" + "fmt" + "io" + + "github.com/golang/snappy" + "github.com/olemorud/replay-parser/demo" + "google.golang.org/protobuf/proto" +) + +type Frame struct { + Kind uint64 `json:"kind"` // see demo.proto + Tick uint64 `json:"tick"` // time elapsed in replay time + Size uint64 `json:"size"` // size of message in bytes + Message *demo.CDemoFileInfo `json:"message"` // protobuf encoded message (may be compressed with snappy) +} + +// If kind has a certain bit set, the frame message is compressed +// returns true if frame is compressed +func isCompressed(frame *Frame) bool { + return (frame.Kind&uint64(demo.EDemoCommands_DEM_IsCompressed) != 0) +} + +// Checks if file header is correct and returns number the address of the last frame +func First(r *bufio.Reader) (uint64, error) { + // Check if first 8 bytes of file matches the source 2 replay file header + header := make([]byte, 8) + if _, err := io.ReadFull(r, header); err != nil { + return 0, fmt.Errorf("error when reading file: %v", err) + } + if string(header) != SIGNATURE { + return 0, fmt.Errorf("wrong file signature: %v, should be ", SIGNATURE) + } + + // Read last frame + var offset uint32 + err := binary.Read(r, binary.LittleEndian, &offset) + if err != nil { + return 0, fmt.Errorf("error reading number of frames in replay: %v", err) + } + + /// remove later + println("size of demo is", offset, "frames") + + return uint64(offset), nil +} + +// Parses the next frame on the reader +func DecodeNextFrame(r *bufio.Reader) (*Frame, error) { + // Read kind, tick, size and message + frame := new(Frame) + var err error + + if frame.Kind, err = binary.ReadUvarint(r); err != nil { + return nil, fmt.Errorf("error reading frame kind for frame: %v", err) + } + + if frame.Tick, err = binary.ReadUvarint(r); err != nil { + return nil, fmt.Errorf("error reading frame tick for frame: %v", err) + } + + if frame.Size, err = binary.ReadUvarint(r); err != nil { + return nil, fmt.Errorf("error reading frame size for frame: %v", err) + } + + message := make([]byte, frame.Size) + io.ReadFull(r, message) + + frame.Message = new(demo.CDemoFileInfo) + + if isCompressed(frame) { + decoded, err := snappy.Decode(nil, message) + if err != nil { + return nil, fmt.Errorf("error decoding message: %v", err) + } + fmt.Println("I got decompressed :O") + proto.Unmarshal(decoded, frame.Message) + } else { + proto.Unmarshal(message, frame.Message) + } + + return frame, nil +} + +// Reads every single frame (probably not very efficient) +func DecodeAllFrames(r *bufio.Reader, frameCount uint64) ([]*Frame, error) { + replay := make([]*Frame, frameCount) + + // Decode all frames and add them to *Frame slice + for i := 0; i < int(frameCount); i++ { + replay[i], _ = DecodeNextFrame(r) + } + + return replay, nil +} diff --git a/proto/demo.proto b/proto/demo.proto new file mode 100644 index 0000000..df18d41 --- /dev/null +++ b/proto/demo.proto @@ -0,0 +1,155 @@ +syntax = "proto2"; + +option go_package = "./demo"; +option cc_generic_services = false; + +enum EDemoCommands { + DEM_Error = -1; + DEM_Stop = 0; + DEM_FileHeader = 1; + DEM_FileInfo = 2; + DEM_SyncTick = 3; + DEM_SendTables = 4; + DEM_ClassInfo = 5; + DEM_StringTables = 6; + DEM_Packet = 7; + DEM_SignonPacket = 8; + DEM_ConsoleCmd = 9; + DEM_CustomData = 10; + DEM_CustomDataCallbacks = 11; + DEM_UserCmd = 12; + DEM_FullPacket = 13; + DEM_SaveGame = 14; + DEM_SpawnGroups = 15; + DEM_Max = 16; + DEM_IsCompressed = 64; +} + +message CDemoFileHeader { + required string demo_file_stamp = 1; + optional int32 network_protocol = 2; + optional string server_name = 3; + optional string client_name = 4; + optional string map_name = 5; + optional string game_directory = 6; + optional int32 fullpackets_version = 7; + optional bool allow_clientside_entities = 8; + optional bool allow_clientside_particles = 9; + optional string addons = 10; + optional string demo_version_name = 11; + optional string demo_version_guid = 12; + optional int32 build_num = 13; +} + +message CGameInfo { + message CDotaGameInfo { + message CPlayerInfo { + optional string hero_name = 1; + optional string player_name = 2; + optional bool is_fake_client = 3; + optional uint64 steamid = 4; + optional int32 game_team = 5; + } + + message CHeroSelectEvent { + optional bool is_pick = 1; + optional uint32 team = 2; + optional uint32 hero_id = 3; + } + + optional uint64 match_id = 1; + optional int32 game_mode = 2; + optional int32 game_winner = 3; + repeated .CGameInfo.CDotaGameInfo.CPlayerInfo player_info = 4; + optional uint32 leagueid = 5; + repeated .CGameInfo.CDotaGameInfo.CHeroSelectEvent picks_bans = 6; + optional uint32 radiant_team_id = 7; + optional uint32 dire_team_id = 8; + optional string radiant_team_tag = 9; + optional string dire_team_tag = 10; + optional uint32 end_time = 11; + } + + optional .CGameInfo.CDotaGameInfo dota = 4; +} + +message CDemoFileInfo { + optional float playback_time = 1; + optional int32 playback_ticks = 2; + optional int32 playback_frames = 3; + optional .CGameInfo game_info = 4; +} + +message CDemoPacket { + optional bytes data = 3; +} + +message CDemoFullPacket { + optional .CDemoStringTables string_table = 1; + optional .CDemoPacket packet = 2; +} + +message CDemoSaveGame { + optional bytes data = 1; + optional fixed64 steam_id = 2; + optional fixed64 signature = 3; + optional int32 version = 4; +} + +message CDemoSyncTick { +} + +message CDemoConsoleCmd { + optional string cmdstring = 1; +} + +message CDemoSendTables { + optional bytes data = 1; +} + +message CDemoClassInfo { + message class_t { + optional int32 class_id = 1; + optional string network_name = 2; + optional string table_name = 3; + } + + repeated .CDemoClassInfo.class_t classes = 1; +} + +message CDemoCustomData { + optional int32 callback_index = 1; + optional bytes data = 2; +} + +message CDemoCustomDataCallbacks { + repeated string save_id = 1; +} + +message CDemoStringTables { + message items_t { + optional string str = 1; + optional bytes data = 2; + } + + message table_t { + optional string table_name = 1; + repeated .CDemoStringTables.items_t items = 2; + repeated .CDemoStringTables.items_t items_clientside = 3; + optional int32 table_flags = 4; + } + + repeated .CDemoStringTables.table_t tables = 1; +} + +message CDemoStop { +} + +message CDemoUserCmd { + optional int32 cmd_number = 1; + optional bytes data = 2; +} + +message CDemoSpawnGroups { + repeated bytes msgs = 3; +} diff --git a/replays/dog.dem b/replays/dog.dem new file mode 100644 index 0000000..1ddd169 Binary files /dev/null and b/replays/dog.dem differ diff --git a/replays/dog2.dem b/replays/dog2.dem new file mode 100644 index 0000000..09357aa Binary files /dev/null and b/replays/dog2.dem differ