├── .vs └── restore.dg ├── Resources ├── Misc │ └── dota2_logo.jpg ├── Protogen │ ├── protogen.exe │ ├── protobuf-net.dll │ └── common.xslt ├── ProtobufDumper │ ├── ProtobufDumper │ │ ├── packages.config │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── ProtobufDumper.csproj │ └── ProtobufDumper.sln └── Protobufs │ ├── dota │ ├── uifontfile_format.proto │ ├── networksystem_protomessages.proto │ ├── connectionless_netmessages.proto │ ├── steammessages_unified_base.steamworkssdk.proto │ ├── steammessages_oauth.steamworkssdk.proto │ ├── dota_broadcastmessages.proto │ ├── clientmessages.proto │ ├── c_peer2peer_netmessages.proto │ ├── econ_shared_enums.proto │ ├── dota_modifiers.proto │ ├── gametoolevents.proto │ ├── dota_hud_types.proto │ ├── steammessages_base.proto │ ├── steammessages_cloud.steamworkssdk.proto │ ├── dota_commonmessages.proto │ ├── dota_client_enums.proto │ ├── gameevents.proto │ ├── dota_match_metadata.proto │ ├── demo.proto │ ├── generate-base.bat │ ├── gcsystemmsgs.proto │ ├── networkbasetypes.proto │ ├── dota_gcmessages_client_watch.proto │ ├── dota_gcmessages_client_guild.proto │ ├── te.proto │ ├── dota_gcmessages_client_chat.proto │ ├── dota_gcmessages_client_team.proto │ ├── dota_gcmessages_client_tournament.proto │ ├── dota_clientmessages.proto │ ├── gcsdk_gcmessages.proto │ ├── network_connection.proto │ ├── dota_shared_enums.proto │ └── steammessages_publishedfile.steamworkssdk.proto │ └── google │ └── protobuf │ └── descriptor.proto ├── src └── Dota2 │ ├── Base │ ├── fixup.sh │ ├── Data │ │ ├── LobbyExtraData.cs │ │ ├── Games.cs │ │ ├── CacheTypes.cs │ │ └── Specifications.cs │ └── Generated │ │ └── GC │ │ └── SteamMsgGCEconSharedEnums.cs │ ├── packages.config │ ├── app.config │ ├── Utils │ ├── PropertyCopier.cs │ └── StreamHelpers.cs │ ├── license.txt │ ├── Dota2.csproj │ ├── GC │ └── DotaExtensions.cs │ ├── Datagram │ └── Config │ │ └── Model │ │ └── NetworkConfig.cs │ └── CDN │ └── DotaCDN.cs ├── .travis.yml ├── .gitmodules ├── Dota2.sln ├── README.md └── .gitignore /.vs/restore.dg: -------------------------------------------------------------------------------- 1 | #:C:\Users\kidov\Documents\Dota2\src\Dota2\Dota2.xproj 2 | -------------------------------------------------------------------------------- /Resources/Misc/dota2_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paralin/Dota2/HEAD/Resources/Misc/dota2_logo.jpg -------------------------------------------------------------------------------- /Resources/Protogen/protogen.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paralin/Dota2/HEAD/Resources/Protogen/protogen.exe -------------------------------------------------------------------------------- /Resources/Protogen/protobuf-net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paralin/Dota2/HEAD/Resources/Protogen/protobuf-net.dll -------------------------------------------------------------------------------- /src/Dota2/Base/fixup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | find . -name '*.cs' -exec sed -i 's/global::System.Serializable, //g' {} \; 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: csharp 2 | dist: trusty 3 | mono: none 4 | dotnet: 1.0.1 5 | 6 | script: 7 | - dotnet restore 8 | - cd src/Dota2 && dotnet build && cd - 9 | -------------------------------------------------------------------------------- /Resources/ProtobufDumper/ProtobufDumper/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Dota2/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/Dota2/Base/Data/LobbyExtraData.cs: -------------------------------------------------------------------------------- 1 | using Dota2.GC.Dota.Internal; 2 | 3 | namespace Dota2.Base.Data 4 | { 5 | /// 6 | /// Parsed extra data about a lobby. 7 | /// 8 | public class LobbyExtraData 9 | { 10 | /// 11 | /// List of league admins in this lobby. 12 | /// 13 | public CMsgLeagueAdminList LeagueAdminList { get; protected internal set; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Dota2/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/uifontfile_format.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | message CUIFontFilePB { 5 | optional string font_file_name = 1; 6 | optional bytes opentype_font_data = 2; 7 | } 8 | 9 | message CUIFontFilePackagePB { 10 | message CUIEncryptedFontFilePB { 11 | optional bytes encrypted_contents = 1; 12 | } 13 | 14 | required uint32 package_version = 1; 15 | repeated .CUIFontFilePackagePB.CUIEncryptedFontFilePB encrypted_font_files = 2; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Dependencies/SnappySharp"] 2 | path = Dependencies/SnappySharp 3 | url = https://github.com/paralin/Snappy.Sharp.git 4 | [submodule "Samples/LobbyDump"] 5 | path = Samples/LobbyDump 6 | url = https://github.com/paralin/Dota2LobbyDump.git 7 | [submodule "Samples/DotaGameConnect"] 8 | path = Samples/DotaGameConnect 9 | url = https://github.com/paralin/DotaGameConnect.git 10 | [submodule "Samples/GameConnect"] 11 | path = Samples/GameConnect 12 | url = https://github.com/paralin/DotaGameConnect.git 13 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/networksystem_protomessages.proto: -------------------------------------------------------------------------------- 1 | option cc_generic_services = false; 2 | 3 | message NetMessageSplitscreenUserChanged { 4 | optional uint32 slot = 1; 5 | } 6 | 7 | message NetMessageConnectionClosed { 8 | optional uint32 reason = 1; 9 | } 10 | 11 | message NetMessageConnectionCrashed { 12 | optional uint32 reason = 1; 13 | } 14 | 15 | message NetMessagePacketStart { 16 | optional uint32 incoming_sequence = 1; 17 | optional uint32 outgoing_acknowledged = 2; 18 | } 19 | 20 | message NetMessagePacketEnd { 21 | } 22 | 23 | -------------------------------------------------------------------------------- /src/Dota2/Base/Data/Games.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace Dota2.Base.Data 7 | { 8 | /// 9 | /// Potential game IDs usable by DOTA GC handler. 10 | /// 11 | public enum Games : uint 12 | { 13 | /// 14 | /// Main DOTA 2 client. 15 | /// 16 | DOTA2 = 570, 17 | 18 | /// 19 | /// DOTA 2 test. 20 | /// 21 | DOTA2TEST = 205790 22 | } 23 | } -------------------------------------------------------------------------------- /Resources/Protobufs/dota/connectionless_netmessages.proto: -------------------------------------------------------------------------------- 1 | import "netmessages.proto"; 2 | 3 | option cc_generic_services = false; 4 | 5 | message C2S_CONNECT_Message { 6 | optional uint32 host_version = 1; 7 | optional uint32 auth_protocol = 2; 8 | optional uint32 challenge_number = 3; 9 | optional fixed64 reservation_cookie = 4; 10 | optional bool low_violence = 5; 11 | optional bytes encrypted_password = 6; 12 | repeated .CCLCMsg_SplitPlayerConnect splitplayers = 7; 13 | optional bytes auth_steam = 8; 14 | optional string challenge_context = 9; 15 | } 16 | 17 | message C2S_CONNECTION_Message { 18 | optional string addon_name = 1; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /src/Dota2/Utils/PropertyCopier.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace Dota2.Utils 4 | { 5 | internal static class PropertyCopier 6 | { 7 | /// 8 | /// Copy property values from one object to another. 9 | /// 10 | /// Type 11 | /// Destination 12 | /// Src 13 | public static void CopyProperties(T dest, T src) 14 | { 15 | foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(src)) 16 | item.SetValue(dest, item.GetValue(src)); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Dota2/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2011-2016 Christian Stewart & SteamRE Team 2 | 3 | This library is free software; you can redistribute it and/or 4 | modify it under the terms of the GNU Lesser General Public 5 | License as published by the Free Software Foundation; either 6 | version 2.1 of the License, or (at your option) any later version. 7 | 8 | This library is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 | Lesser General Public License for more details. 12 | 13 | You should have received a copy of the GNU Lesser General Public 14 | License along with this library; if not, write to the Free Software 15 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -------------------------------------------------------------------------------- /Resources/Protobufs/dota/steammessages_unified_base.steamworkssdk.proto: -------------------------------------------------------------------------------- 1 | import "google/protobuf/descriptor.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | extend .google.protobuf.FieldOptions { 7 | optional string description = 50000; 8 | } 9 | 10 | extend .google.protobuf.ServiceOptions { 11 | optional string service_description = 50000; 12 | optional .EProtoExecutionSite service_execution_site = 50008 [default = k_EProtoExecutionSiteUnknown]; 13 | } 14 | 15 | extend .google.protobuf.MethodOptions { 16 | optional string method_description = 50000; 17 | } 18 | 19 | extend .google.protobuf.EnumOptions { 20 | optional string enum_description = 50000; 21 | } 22 | 23 | extend .google.protobuf.EnumValueOptions { 24 | optional string enum_value_description = 50000; 25 | } 26 | 27 | enum EProtoExecutionSite { 28 | k_EProtoExecutionSiteUnknown = 0; 29 | k_EProtoExecutionSiteSteamClient = 3; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/steammessages_oauth.steamworkssdk.proto: -------------------------------------------------------------------------------- 1 | import "steammessages_unified_base.steamworkssdk.proto"; 2 | 3 | message COAuthToken_ImplicitGrantNoPrompt_Request { 4 | optional string clientid = 1 [(description) = "Client ID for which to count the number of issued tokens"]; 5 | } 6 | 7 | message COAuthToken_ImplicitGrantNoPrompt_Response { 8 | optional string access_token = 1 [(description) = "OAuth Token, granted on success"]; 9 | optional string redirect_uri = 2 [(description) = "Redirection URI provided during client registration."]; 10 | } 11 | 12 | service OAuthToken { 13 | option (service_description) = "Service containing methods to manage OAuth tokens"; 14 | rpc ImplicitGrantNoPrompt (.COAuthToken_ImplicitGrantNoPrompt_Request) returns (.COAuthToken_ImplicitGrantNoPrompt_Response) { 15 | option (method_description) = "Grants an implicit OAuth token (grant type 'token') for the specified client ID on behalf of a user without prompting"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_broadcastmessages.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum EDotaBroadcastMessages { 5 | DOTA_BM_LANLobbyRequest = 1; 6 | DOTA_BM_LANLobbyReply = 2; 7 | } 8 | 9 | message CDOTABroadcastMsg { 10 | required .EDotaBroadcastMessages type = 1 [default = DOTA_BM_LANLobbyRequest]; 11 | optional bytes msg = 2; 12 | } 13 | 14 | message CDOTABroadcastMsg_LANLobbyRequest { 15 | } 16 | 17 | message CDOTABroadcastMsg_LANLobbyReply { 18 | message CLobbyMember { 19 | optional uint32 account_id = 1; 20 | optional string player_name = 2; 21 | } 22 | 23 | optional uint64 id = 1; 24 | optional uint32 tournament_id = 2; 25 | optional uint32 tournament_game_id = 3; 26 | repeated .CDOTABroadcastMsg_LANLobbyReply.CLobbyMember members = 4; 27 | optional bool requires_pass_key = 5; 28 | optional uint32 leader_account_id = 6; 29 | optional uint32 game_mode = 7; 30 | optional string name = 8; 31 | optional uint32 players = 9; 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Resources/ProtobufDumper/ProtobufDumper/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ProtobufDumper 4 | { 5 | class Program 6 | { 7 | static unsafe void Main( string[] args ) 8 | { 9 | Environment.ExitCode = 0; 10 | 11 | if ( args.Length == 0 ) 12 | { 13 | Console.WriteLine( "No target specified." ); 14 | 15 | Environment.ExitCode = -1; 16 | return; 17 | } 18 | 19 | string target = args[ 0 ]; 20 | string output = ( ( args.Length > 1 ) ? args[ 1 ] : null ); 21 | 22 | ImageFile imgFile = new ImageFile( target, output ); 23 | 24 | try 25 | { 26 | imgFile.Process(); 27 | } 28 | catch ( Exception ex ) 29 | { 30 | Console.WriteLine( "Unable to process file: {0}", ex.Message ); 31 | Environment.ExitCode = -1; 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Dota2.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26114.2 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{76CA9617-9495-4F74-A74A-5B3B201C5C8B}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dota2", "src\Dota2\Dota2.csproj", "{BEB5BF07-BB56-402A-97A3-A41C6444C6A5}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {BEB5BF07-BB56-402A-97A3-A41C6444C6A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {BEB5BF07-BB56-402A-97A3-A41C6444C6A5}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {BEB5BF07-BB56-402A-97A3-A41C6444C6A5}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {BEB5BF07-BB56-402A-97A3-A41C6444C6A5}.Release|Any CPU.Build.0 = Release|Any CPU 20 | EndGlobalSection 21 | GlobalSection(SolutionProperties) = preSolution 22 | HideSolutionNode = FALSE 23 | EndGlobalSection 24 | GlobalSection(NestedProjects) = preSolution 25 | {BEB5BF07-BB56-402A-97A3-A41C6444C6A5} = {76CA9617-9495-4F74-A74A-5B3B201C5C8B} 26 | EndGlobalSection 27 | EndGlobal 28 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/clientmessages.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum EBaseClientMessages { 5 | CM_CustomGameEvent = 280; 6 | CM_CustomGameEventBounce = 281; 7 | CM_ClientUIEvent = 282; 8 | CM_DevPaletteVisibilityChanged = 283; 9 | CM_WorldUIControllerHasPanelChanged = 284; 10 | CM_RotateAnchor = 285; 11 | CM_MAX_BASE = 300; 12 | } 13 | 14 | enum EClientUIEvent { 15 | EClientUIEvent_Invalid = 0; 16 | EClientUIEvent_DialogFinished = 1; 17 | EClientUIEvent_FireOutput = 2; 18 | } 19 | 20 | message CClientMsg_CustomGameEvent { 21 | optional string event_name = 1; 22 | optional bytes data = 2; 23 | } 24 | 25 | message CClientMsg_CustomGameEventBounce { 26 | optional string event_name = 1; 27 | optional bytes data = 2; 28 | optional int32 player_index = 3; 29 | } 30 | 31 | message CClientMsg_ClientUIEvent { 32 | optional .EClientUIEvent event = 1 [default = EClientUIEvent_Invalid]; 33 | optional uint32 ent_ehandle = 2; 34 | optional uint32 client_ehandle = 3; 35 | optional string data1 = 4; 36 | optional string data2 = 5; 37 | } 38 | 39 | message CClientMsg_DevPaletteVisibilityChangedEvent { 40 | optional bool visible = 1; 41 | } 42 | 43 | message CClientMsg_WorldUIControllerHasPanelChangedEvent { 44 | optional bool has_panel = 1; 45 | optional uint32 client_ehandle = 2; 46 | optional uint32 literal_hand_type = 3; 47 | } 48 | 49 | message CClientMsg_RotateAnchor { 50 | optional float angle = 1; 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/c_peer2peer_netmessages.proto: -------------------------------------------------------------------------------- 1 | import "netmessages.proto"; 2 | import "networkbasetypes.proto"; 3 | 4 | option cc_generic_services = false; 5 | 6 | enum P2P_Messages { 7 | p2p_TextMessage = 256; 8 | p2p_Voice = 257; 9 | p2p_Ping = 258; 10 | p2p_VRAvatarPosition = 259; 11 | p2p_WatchSynchronization = 260; 12 | } 13 | 14 | message CP2P_TextMessage { 15 | optional bytes text = 1; 16 | } 17 | 18 | message CSteam_Voice_Encoding { 19 | optional bytes voice_data = 1; 20 | } 21 | 22 | message CP2P_Voice { 23 | enum Handler_Flags { 24 | Played_Audio = 1; 25 | } 26 | 27 | optional .CMsgVoiceAudio audio = 1; 28 | optional uint32 broadcast_group = 2; 29 | } 30 | 31 | message CP2P_Ping { 32 | required uint64 send_time = 1; 33 | required bool is_reply = 2; 34 | } 35 | 36 | message CP2P_VRAvatarPosition { 37 | message COrientation { 38 | optional .CMsgVector pos = 1; 39 | optional .CMsgQAngle ang = 2; 40 | } 41 | 42 | repeated .CP2P_VRAvatarPosition.COrientation body_parts = 1; 43 | optional int32 hat_id = 2; 44 | optional int32 scene_id = 3; 45 | optional int32 world_scale = 4; 46 | } 47 | 48 | message CP2P_WatchSynchronization { 49 | optional int32 demo_tick = 1; 50 | optional bool paused = 2; 51 | optional int32 tv_listen_voice_indices = 3; 52 | optional int32 dota_spectator_mode = 4; 53 | optional int32 dota_spectator_watching_broadcaster = 5; 54 | optional int32 dota_spectator_hero_index = 6; 55 | optional int32 dota_spectator_autospeed = 7; 56 | optional int32 dota_replay_speed = 8; 57 | } 58 | 59 | -------------------------------------------------------------------------------- /src/Dota2/Dota2.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | A plugin for SteamKit that interacts with the DOTA 2 game coordinator. 4 | 0.10.0 5 | paralin 6 | netstandard2.0 7 | Dota2 8 | Dota2 9 | dota2;steam;networking;steamkit;dota;moba 10 | https://raw.github.com/paralin/Dota2/master/Resources/Misc/dota2_logo.jpg 11 | https://github.com/paralin/Dota2 12 | https://github.com/paralin/Dota2/blob/master/src/Dota2/license.txt 13 | git 14 | git://github.com/paralin/dota2 15 | 0.11.0 16 | true 17 | 18 | 19 | TRACE;DEBUG;NETSTANDARD1_5 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Resources/ProtobufDumper/ProtobufDumper/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle( "ProtobufDumper" )] 9 | [assembly: AssemblyDescription( "" )] 10 | [assembly: AssemblyConfiguration( "" )] 11 | [assembly: AssemblyCompany( "Microsoft" )] 12 | [assembly: AssemblyProduct( "ProtobufDumper" )] 13 | [assembly: AssemblyCopyright( "Copyright © Microsoft 2011" )] 14 | [assembly: AssemblyTrademark( "" )] 15 | [assembly: AssemblyCulture( "" )] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible( false )] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid( "6b496ed8-c555-42be-bc6d-da21870af7da" )] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion( "1.0.0.0" )] 36 | [assembly: AssemblyFileVersion( "1.0.0.0" )] 37 | -------------------------------------------------------------------------------- /src/Dota2/GC/DotaExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Dota2.Base.Data; 3 | using Dota2.GC.Dota.Internal; 4 | using ProtoBuf; 5 | 6 | namespace Dota2.GC 7 | { 8 | /// 9 | /// General Linq extensions for Dota2. 10 | /// 11 | public static class DotaExtensions 12 | { 13 | /// 14 | /// Parse the extra data on a lobby. 15 | /// 16 | /// Lobby containing extra messages. 17 | /// 18 | public static LobbyExtraData ParseExtraMessages(this CSODOTALobby lobby) 19 | { 20 | var extra = new LobbyExtraData(); 21 | foreach (var msg in lobby.extra_messages) 22 | { 23 | switch (msg.id) 24 | { 25 | case (uint) EDOTAGCMsg.k_EMsgGCLeagueAdminList: 26 | extra.LeagueAdminList = msg.contents.DeserializeProtobuf(); 27 | break; 28 | } 29 | } 30 | return extra; 31 | } 32 | 33 | /// 34 | /// Deserializes a serialized protobuf, convenience function. 35 | /// 36 | /// Binary data array. 37 | /// The protobuf type to deserialize. 38 | /// 39 | public static T DeserializeProtobuf(this byte[] data) 40 | { 41 | using (var ms = new MemoryStream(data)) 42 | { 43 | return Serializer.Deserialize(ms); 44 | } 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Resources/Protobufs/dota/econ_shared_enums.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum EGCEconBaseMsg { 5 | k_EMsgGCGenericResult = 2579; 6 | } 7 | 8 | enum EGCMsgResponse { 9 | k_EGCMsgResponseOK = 0; 10 | k_EGCMsgResponseDenied = 1; 11 | k_EGCMsgResponseServerError = 2; 12 | k_EGCMsgResponseTimeout = 3; 13 | k_EGCMsgResponseInvalid = 4; 14 | k_EGCMsgResponseNoMatch = 5; 15 | k_EGCMsgResponseUnknownError = 6; 16 | k_EGCMsgResponseNotLoggedOn = 7; 17 | k_EGCMsgFailedToCreate = 8; 18 | } 19 | 20 | enum EGCPartnerRequestResponse { 21 | k_EPartnerRequestOK = 1; 22 | k_EPartnerRequestBadAccount = 2; 23 | k_EPartnerRequestNotLinked = 3; 24 | k_EPartnerRequestUnsupportedPartnerType = 4; 25 | } 26 | 27 | enum EGCMsgUseItemResponse { 28 | k_EGCMsgUseItemResponse_ItemUsed = 0; 29 | k_EGCMsgUseItemResponse_GiftNoOtherPlayers = 1; 30 | k_EGCMsgUseItemResponse_ServerError = 2; 31 | k_EGCMsgUseItemResponse_MiniGameAlreadyStarted = 3; 32 | k_EGCMsgUseItemResponse_ItemUsed_ItemsGranted = 4; 33 | k_EGCMsgUseItemResponse_DropRateBonusAlreadyGranted = 5; 34 | k_EGCMsgUseItemResponse_NotInLowPriorityPool = 6; 35 | k_EGCMsgUseItemResponse_NotHighEnoughLevel = 7; 36 | k_EGCMsgUseItemResponse_EventNotActive = 8; 37 | k_EGCMsgUseItemResponse_ItemUsed_EventPointsGranted = 9; 38 | k_EGCMsgUseItemResponse_MissingRequirement = 10; 39 | k_EGCMsgUseItemResponse_EmoticonUnlock_NoNew = 11; 40 | k_EGCMsgUseItemResponse_EmoticonUnlock_Complete = 12; 41 | k_EGCMsgUseItemResponse_ItemUsed_Compendium = 13; 42 | } 43 | 44 | message CMsgGenericResult { 45 | optional uint32 eresult = 1 [default = 2]; 46 | optional string debug_message = 2; 47 | } 48 | 49 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_modifiers.proto: -------------------------------------------------------------------------------- 1 | import "networkbasetypes.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum DOTA_MODIFIER_ENTRY_TYPE { 7 | DOTA_MODIFIER_ENTRY_TYPE_ACTIVE = 1; 8 | DOTA_MODIFIER_ENTRY_TYPE_REMOVED = 2; 9 | } 10 | 11 | message CDOTAModifierBuffTableEntry { 12 | required .DOTA_MODIFIER_ENTRY_TYPE entry_type = 1 [default = DOTA_MODIFIER_ENTRY_TYPE_ACTIVE]; 13 | required int32 parent = 2; 14 | required int32 index = 3; 15 | required int32 serial_num = 4; 16 | optional int32 modifier_class = 5; 17 | optional int32 ability_level = 6; 18 | optional int32 stack_count = 7; 19 | optional float creation_time = 8; 20 | optional float duration = 9 [default = -1]; 21 | optional int32 caster = 10; 22 | optional int32 ability = 11; 23 | optional int32 armor = 12; 24 | optional float fade_time = 13; 25 | optional bool subtle = 14; 26 | optional float channel_time = 15; 27 | optional .CMsgVector v_start = 16; 28 | optional .CMsgVector v_end = 17; 29 | optional string portal_loop_appear = 18; 30 | optional string portal_loop_disappear = 19; 31 | optional string hero_loop_appear = 20; 32 | optional string hero_loop_disappear = 21; 33 | optional int32 movement_speed = 22; 34 | optional bool aura = 23; 35 | optional int32 activity = 24; 36 | optional int32 damage = 25; 37 | optional int32 range = 26; 38 | optional int32 dd_modifier_index = 27; 39 | optional int32 dd_ability_index = 28; 40 | optional string illusion_label = 29; 41 | optional bool active = 30; 42 | optional string player_ids = 31; 43 | optional string lua_name = 32; 44 | } 45 | 46 | message CDOTALuaModifierEntry { 47 | required int32 modifier_type = 1; 48 | required string modifier_filename = 2; 49 | } 50 | 51 | -------------------------------------------------------------------------------- /src/Dota2/Datagram/Config/Model/NetworkConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | // ReSharper disable InconsistentNaming 3 | 4 | namespace Dota2.Datagram.Config.Model 5 | { 6 | /// 7 | /// Steam Datagram network config 8 | /// 9 | public class NetworkConfig 10 | { 11 | /// 12 | /// Revision of the config 13 | /// 14 | public uint revision { get; set; } 15 | 16 | /// 17 | /// Datacenter definitions 18 | /// 19 | public Dictionary data_centers { get; set; } 20 | 21 | /// 22 | /// Routing cluster definitions 23 | /// 24 | public Dictionary routing_clusters { get; set; } 25 | } 26 | 27 | /// 28 | /// Steam Datagram datacenter definition 29 | /// 30 | public class NetworkDatacenter 31 | { 32 | /// 33 | /// Latitude of the datacenter 34 | /// 35 | public double lat { get; set; } 36 | 37 | /// 38 | /// Longitude of the datacenter 39 | /// 40 | public double lon { get; set; } 41 | 42 | /// 43 | /// IP address ranges of the datacenter 44 | /// 45 | public string[] address_ranges { get; set; } 46 | } 47 | 48 | /// 49 | /// Routing cluster definition 50 | /// 51 | public class NetworkRoutingCluster 52 | { 53 | /// 54 | /// Address range of the cluster 55 | /// 56 | public string[] addresses { get; set; } 57 | } 58 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Dota2 [![Build Status](https://travis-ci.org/paralin/Dota2.png)](https://travis-ci.org/paralin/Dota2) 2 | --- 3 | 4 | [![forthebadge](http://forthebadge.com/images/badges/powered-by-electricity.svg)](http://forthebadge.com) 5 | 6 | Dota2 is a .NET library designed as a plugin for [SteamKit](http://github.com/SteamRE/SteamKit). It provides a handler for the DOTA 2 game coordinator. The goal is to implement as much functionality of the client as possible. 7 | 8 | ## Getting Binaries 9 | 10 | 11 | ### Visual Studio 12 | 13 | Dota2 is distributed as a [NuGet package](http://nuget.org/packages/dota2). 14 | 15 | Simply install SteamKit2 and Dota2 using the package manager in Visual Studio, and NuGet will add all the required dependencies and references to your project. 16 | 17 | ### Other 18 | 19 | We additionally distribute binaries on our [releases page](https://github.com/paralin/Dota2/releases). 20 | 21 | For more information on installing SteamKit2 and Dota2, please refer to the [Installation Guide](https://github.com/SteamRE/SteamKit/wiki/Installation) on the SteamKit wiki. 22 | 23 | 24 | ## Documentation 25 | 26 | Documentation consists primarily of XML code documentation provided with the binaries. Please see the SteamKit documentation on how to set up a Steam client. 27 | 28 | One of these days, proper documentation will be written. 29 | 30 | To use the GC handler, it's simple: 31 | 32 | ``` 33 | client = new SteamClient(); 34 | DotaGCHandler.Bootstrap(client); 35 | dota = client.GetHandler(); 36 | 37 | // ... later when Steam is connected 38 | dota.Start(); 39 | ``` 40 | 41 | You can register callbacks like any other Steam network functionality from Steamkit. 42 | 43 | ## License 44 | 45 | SteamKit2 and Dota2 (this package) are released under the [LGPL-2.1 license](http://www.tldrlegal.com/license/gnu-lesser-general-public-license-v2.1-%28lgpl-2.1%29). 46 | 47 | ## Contact 48 | 49 | IRC: [irc.gamesurge.net / #opensteamworks](irc://irc.gamesurge.net/opensteamworks) 50 | 51 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/gametoolevents.proto: -------------------------------------------------------------------------------- 1 | import "networkbasetypes.proto"; 2 | 3 | option cc_generic_services = false; 4 | 5 | message ChangeMapToolEvent { 6 | optional string mapname = 1; 7 | } 8 | 9 | message TraceRayServerToolEvent { 10 | optional .CMsgVector start = 1; 11 | optional .CMsgVector end = 2; 12 | } 13 | 14 | message ToolTraceRayResult { 15 | optional bool hit = 1; 16 | optional .CMsgVector impact = 2; 17 | optional .CMsgVector normal = 3; 18 | optional float distance = 4; 19 | optional float fraction = 5; 20 | optional int32 ehandle = 6; 21 | } 22 | 23 | message SpawnEntityToolEvent { 24 | optional bytes entity_keyvalues = 1; 25 | optional bool clientsideentity = 2; 26 | } 27 | 28 | message SpawnEntityToolEventResult { 29 | optional int32 ehandle = 1; 30 | } 31 | 32 | message DestroyEntityToolEvent { 33 | optional int32 ehandle = 1; 34 | } 35 | 36 | message DestroyAllEntitiesToolEvent { 37 | } 38 | 39 | message RestartMapToolEvent { 40 | } 41 | 42 | message ToolEvent_GetEntityInfo { 43 | optional int32 ehandle = 1; 44 | optional bool clientsideentity = 2; 45 | } 46 | 47 | message ToolEvent_GetEntityInfoResult { 48 | optional string cppclass = 1 [default = "shithead"]; 49 | optional string classname = 2; 50 | optional string name = 3; 51 | optional .CMsgVector origin = 4; 52 | optional .CMsgVector mins = 5; 53 | optional .CMsgVector maxs = 6; 54 | } 55 | 56 | message ToolEvent_GetEntityInputs { 57 | optional int32 ehandle = 1; 58 | optional bool clientsideentity = 2; 59 | } 60 | 61 | message ToolEvent_GetEntityInputsResult { 62 | repeated string input_list = 1; 63 | } 64 | 65 | message ToolEvent_FireEntityInput { 66 | optional int32 ehandle = 1; 67 | optional bool clientsideentity = 2; 68 | optional string input_name = 3; 69 | optional string input_param = 4; 70 | } 71 | 72 | message ToolEvent_SFMRecordingStateChanged { 73 | optional bool isrecording = 1; 74 | } 75 | 76 | message ToolEvent_SFMToolActiveStateChanged { 77 | optional bool isactive = 1; 78 | } 79 | 80 | -------------------------------------------------------------------------------- /Resources/ProtobufDumper/ProtobufDumper.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtobufDumper", "ProtobufDumper\ProtobufDumper.csproj", "{8BFDE24C-E1D5-436B-8C2D-25700491F82B}" 5 | EndProject 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C7E764E5-04B0-4045-B8AB-FB9E778962D0}" 7 | ProjectSection(SolutionItems) = preProject 8 | .nuget\NuGet.Config = .nuget\NuGet.Config 9 | .nuget\NuGet.exe = .nuget\NuGet.exe 10 | .nuget\NuGet.targets = .nuget\NuGet.targets 11 | EndProjectSection 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | iOS|Any CPU = iOS|Any CPU 17 | Net20|Any CPU = Net20|Any CPU 18 | Profile|Any CPU = Profile|Any CPU 19 | Release|Any CPU = Release|Any CPU 20 | Silverlight2|Any CPU = Silverlight2|Any CPU 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.iOS|Any CPU.ActiveCfg = Release|Any CPU 26 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.iOS|Any CPU.Build.0 = Release|Any CPU 27 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Net20|Any CPU.ActiveCfg = Release|Any CPU 28 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Net20|Any CPU.Build.0 = Release|Any CPU 29 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Profile|Any CPU.ActiveCfg = Release|Any CPU 30 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Profile|Any CPU.Build.0 = Release|Any CPU 31 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Release|Any CPU.ActiveCfg = Release|Any CPU 32 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Release|Any CPU.Build.0 = Release|Any CPU 33 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Silverlight2|Any CPU.ActiveCfg = Release|Any CPU 34 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B}.Silverlight2|Any CPU.Build.0 = Release|Any CPU 35 | EndGlobalSection 36 | GlobalSection(SolutionProperties) = preSolution 37 | HideSolutionNode = FALSE 38 | EndGlobalSection 39 | EndGlobal 40 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_hud_types.proto: -------------------------------------------------------------------------------- 1 | import "google/protobuf/descriptor.proto"; 2 | 3 | option cc_generic_services = false; 4 | 5 | extend .google.protobuf.EnumValueOptions { 6 | optional string hud_localize_token = 50501; 7 | } 8 | 9 | enum EHeroSelectionText { 10 | k_EHeroSelectionText_Invalid = -1; 11 | k_EHeroSelectionText_None = 0; 12 | k_EHeroSelectionText_ChooseHero = 1 [(hud_localize_token) = "#DOTA_Hero_Selection_ChooseHero"]; 13 | k_EHeroSelectionText_AllDraft_Planning_YouFirst = 2 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_Planning_YouFirst"]; 14 | k_EHeroSelectionText_AllDraft_Planning_TheyFirst = 3 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_Planning_TheyFirst"]; 15 | k_EHeroSelectionText_AllDraft_BanSelected_YouFirst = 4 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_BanSelected_YouFirst"]; 16 | k_EHeroSelectionText_AllDraft_BanSelected_TheyFirst = 5 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_BanSelected_TheyFirst"]; 17 | k_EHeroSelectionText_AllDraft_YouPicking = 6 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_YouPicking"]; 18 | k_EHeroSelectionText_AllDraft_TheyPicking = 7 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_TheyPicking"]; 19 | k_EHeroSelectionText_AllDraft_TeammateRandomed = 8 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_TeammateRandomed_Panorama"]; 20 | k_EHeroSelectionText_AllDraft_YouPicking_LosingGold = 9 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_YouPicking_LosingGold"]; 21 | k_EHeroSelectionText_AllDraft_TheyPicking_LosingGold = 10 [(hud_localize_token) = "#DOTA_Hero_Selection_AllDraft_TheyPicking_LosingGold"]; 22 | k_EHeroSelectionText_CaptainsMode_ChooseCaptain = 11 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_ChooseCaptain"]; 23 | k_EHeroSelectionText_CaptainsMode_WaitingForChooseCaptain = 12 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_WaitingForChooseCaptain"]; 24 | k_EHeroSelectionText_CaptainsMode_YouSelect = 13 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_YouSelect"]; 25 | k_EHeroSelectionText_CaptainsMode_TheySelect = 14 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_TheySelect"]; 26 | k_EHeroSelectionText_CaptainsMode_YouBan = 15 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_YouBan"]; 27 | k_EHeroSelectionText_CaptainsMode_TheyBan = 16 [(hud_localize_token) = "#DOTA_Hero_Selection_CaptainsMode_TheyBan"]; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/Dota2/Base/Data/CacheTypes.cs: -------------------------------------------------------------------------------- 1 | namespace Dota2.Base.Data 2 | { 3 | /// 4 | /// Cache types 5 | /// 6 | internal enum CSOTypes : int 7 | { 8 | /// 9 | /// An economy item. 10 | /// 11 | ECON_ITEM = 1, 12 | 13 | /// 14 | /// An econ item recipe. 15 | /// 16 | ITEM_RECIPE = 5, 17 | 18 | /// 19 | /// Game account client for Econ. 20 | /// 21 | ECON_GAME_ACCOUNT_CLIENT = 7, 22 | 23 | /// 24 | /// Selected item preset. 25 | /// 26 | SELECTED_ITEM_PRESET = 35, 27 | 28 | /// 29 | /// Item preset instance. 30 | /// 31 | ITEM_PRESET_INSTANCE = 36, 32 | 33 | /// 34 | /// Active drop rate bonus. 35 | /// 36 | DROP_RATE_BONUS = 38, 37 | 38 | /// 39 | /// Pass to view a league. 40 | /// 41 | LEAGUE_VIEW_PASS = 39, 42 | 43 | /// 44 | /// Event ticket. 45 | /// 46 | EVENT_TICKET = 40, 47 | 48 | /// 49 | /// Item tournament passport. 50 | /// 51 | ITEM_TOURNAMENT_PASSPORT = 42, 52 | 53 | /// 54 | /// DOTA 2 game account client. 55 | /// 56 | GAME_ACCOUNT_CLIENT = 2002, 57 | 58 | /// 59 | /// A Dota 2 party. 60 | /// 61 | PARTY = 2003, 62 | 63 | /// 64 | /// A Dota 2 lobby. 65 | /// 66 | LOBBY = 2004, 67 | 68 | /// 69 | /// A party invite. 70 | /// 71 | PARTYINVITE = 2006, 72 | 73 | /// 74 | /// Game hero favorites. 75 | /// 76 | GAME_HERO_FAVORITES = 2007, 77 | 78 | /// 79 | /// Ping map location state. 80 | /// 81 | MAP_LOCATION_STATE = 2008, 82 | 83 | /// 84 | /// Tournament. 85 | /// 86 | TOURNAMENT = 2009, 87 | 88 | /// 89 | /// A player challenge. 90 | /// 91 | PLAYER_CHALLENGE = 2010, 92 | 93 | /// 94 | /// A lobby invite, introduced in Reborn. 95 | /// 96 | LOBBYINVITE = 2011 97 | } 98 | } -------------------------------------------------------------------------------- /src/Dota2/Base/Data/Specifications.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using CMsgDOTATournament = Dota2.GC.Dota.Internal.CMsgDOTATournament; 4 | using CSODOTAGameAccountClient = Dota2.GC.Dota.Internal.CSODOTAGameAccountClient; 5 | using CSODOTAGameHeroFavorites = Dota2.GC.Dota.Internal.CSODOTAGameHeroFavorites; 6 | using CSODOTALobby = Dota2.GC.Dota.Internal.CSODOTALobby; 7 | using CSODOTALobbyInvite = Dota2.GC.Dota.Internal.CSODOTALobbyInvite; 8 | using CSODOTAMapLocationState = Dota2.GC.Dota.Internal.CSODOTAMapLocationState; 9 | using CSODOTAParty = Dota2.GC.Dota.Internal.CSODOTAParty; 10 | using CSODOTAPartyInvite = Dota2.GC.Dota.Internal.CSODOTAPartyInvite; 11 | using CSODOTAPlayerChallenge = Dota2.GC.Dota.Internal.CSODOTAPlayerChallenge; 12 | using CSOEconGameAccountClient = Dota2.GC.Internal.CSOEconGameAccountClient; 13 | using CSOEconItem = Dota2.GC.Internal.CSOEconItem; 14 | using CSOEconItemDropRateBonus = Dota2.GC.Internal.CSOEconItemDropRateBonus; 15 | using CSOEconItemEventTicket = Dota2.GC.Internal.CSOEconItemEventTicket; 16 | using CSOEconItemLeagueViewPass = Dota2.GC.Internal.CSOEconItemLeagueViewPass; 17 | using CSOEconItemTournamentPassport = Dota2.GC.Internal.CSOEconItemTournamentPassport; 18 | using CSOItemRecipe = Dota2.GC.Internal.CSOItemRecipe; 19 | 20 | namespace Dota2.Base.Data 21 | { 22 | /// 23 | /// Helper to associate cache types with classes. 24 | /// 25 | static class Dota2SOTypes 26 | { 27 | /// 28 | /// Cache type associations. 29 | /// 30 | public static Dictionary SOTypes = new Dictionary() 31 | { 32 | {CSOTypes.ECON_ITEM, typeof(CSOEconItem)}, 33 | {CSOTypes.ITEM_RECIPE, typeof(CSOItemRecipe)}, 34 | {CSOTypes.ECON_GAME_ACCOUNT_CLIENT, typeof(CSOEconGameAccountClient)}, 35 | {CSOTypes.DROP_RATE_BONUS, typeof(CSOEconItemDropRateBonus)}, 36 | {CSOTypes.LEAGUE_VIEW_PASS, typeof(CSOEconItemLeagueViewPass)}, 37 | {CSOTypes.EVENT_TICKET, typeof(CSOEconItemEventTicket)}, 38 | {CSOTypes.ITEM_TOURNAMENT_PASSPORT, typeof(CSOEconItemTournamentPassport)}, 39 | {CSOTypes.GAME_ACCOUNT_CLIENT, typeof(CSODOTAGameAccountClient)}, 40 | {CSOTypes.PARTY, typeof(CSODOTAParty)}, 41 | {CSOTypes.LOBBY, typeof(CSODOTALobby)}, 42 | {CSOTypes.PARTYINVITE, typeof(CSODOTAPartyInvite)}, 43 | {CSOTypes.GAME_HERO_FAVORITES, typeof(CSODOTAGameHeroFavorites)}, 44 | {CSOTypes.MAP_LOCATION_STATE, typeof(CSODOTAMapLocationState)}, 45 | {CSOTypes.TOURNAMENT, typeof(CMsgDOTATournament)}, 46 | {CSOTypes.PLAYER_CHALLENGE, typeof(CSODOTAPlayerChallenge)}, 47 | {CSOTypes.LOBBYINVITE, typeof(CSODOTALobbyInvite)}, 48 | }; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/steammessages_base.proto: -------------------------------------------------------------------------------- 1 | import "google/protobuf/descriptor.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | extend .google.protobuf.MessageOptions { 7 | optional int32 msgpool_soft_limit = 50000 [default = 32]; 8 | optional int32 msgpool_hard_limit = 50001 [default = 384]; 9 | } 10 | 11 | message CMsgProtoBufHeader { 12 | optional fixed64 steamid = 1; 13 | optional int32 client_sessionid = 2; 14 | optional uint32 routing_appid = 3; 15 | optional fixed64 jobid_source = 10 [default = 18446744073709551615]; 16 | optional fixed64 jobid_target = 11 [default = 18446744073709551615]; 17 | optional string target_job_name = 12; 18 | optional int32 seq_num = 24; 19 | optional int32 eresult = 13 [default = 2]; 20 | optional string error_message = 14; 21 | optional uint32 ip = 15; 22 | optional uint32 auth_account_flags = 16; 23 | optional uint32 token_source = 22; 24 | optional bool admin_spoofing_user = 23; 25 | optional int32 transport_error = 17 [default = 1]; 26 | optional uint64 messageid = 18 [default = 18446744073709551615]; 27 | optional uint32 publisher_group_id = 19; 28 | optional uint32 sysid = 20; 29 | optional uint64 trace_tag = 21; 30 | optional uint32 webapi_key_id = 25; 31 | } 32 | 33 | message CMsgMulti { 34 | optional uint32 size_unzipped = 1; 35 | optional bytes message_body = 2; 36 | } 37 | 38 | message CMsgProtobufWrapped { 39 | optional bytes message_body = 1; 40 | } 41 | 42 | message CMsgAuthTicket { 43 | optional uint32 estate = 1; 44 | optional uint32 eresult = 2 [default = 2]; 45 | optional fixed64 steamid = 3; 46 | optional fixed64 gameid = 4; 47 | optional uint32 h_steam_pipe = 5; 48 | optional uint32 ticket_crc = 6; 49 | optional bytes ticket = 7; 50 | } 51 | 52 | message CCDDBAppDetailCommon { 53 | optional uint32 appid = 1; 54 | optional string name = 2; 55 | optional string icon = 3; 56 | optional string logo = 4; 57 | optional string logo_small = 5; 58 | optional bool tool = 6; 59 | optional bool demo = 7; 60 | optional bool media = 8; 61 | optional bool community_visible_stats = 9; 62 | optional string friendly_name = 10; 63 | optional string propagation = 11; 64 | optional bool has_adult_content = 12; 65 | } 66 | 67 | message CMsgAppRights { 68 | optional bool edit_info = 1; 69 | optional bool publish = 2; 70 | optional bool view_error_data = 3; 71 | optional bool download = 4; 72 | optional bool upload_cdkeys = 5; 73 | optional bool generate_cdkeys = 6; 74 | optional bool view_financials = 7; 75 | optional bool manage_ceg = 8; 76 | optional bool manage_signing = 9; 77 | optional bool manage_cdkeys = 10; 78 | optional bool edit_marketing = 11; 79 | optional bool economy_support = 12; 80 | optional bool economy_support_supervisor = 13; 81 | optional bool manage_pricing = 14; 82 | optional bool broadcast_live = 15; 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/steammessages_cloud.steamworkssdk.proto: -------------------------------------------------------------------------------- 1 | import "steammessages_unified_base.steamworkssdk.proto"; 2 | 3 | message CCloud_GetUploadServerInfo_Request { 4 | optional uint32 appid = 1 [(description) = "App ID to which a file will be uploaded to."]; 5 | } 6 | 7 | message CCloud_GetUploadServerInfo_Response { 8 | optional string server_url = 1; 9 | } 10 | 11 | message CCloud_GetFileDetails_Request { 12 | optional uint64 ugcid = 1 [(description) = "ID of the Cloud file to get details for."]; 13 | optional uint32 appid = 2 [(description) = "App ID the file belongs to."]; 14 | } 15 | 16 | message CCloud_UserFile { 17 | optional uint32 appid = 1; 18 | optional uint64 ugcid = 2; 19 | optional string filename = 3; 20 | optional uint64 timestamp = 4; 21 | optional uint32 file_size = 5; 22 | optional string url = 6; 23 | optional fixed64 steamid_creator = 7; 24 | } 25 | 26 | message CCloud_GetFileDetails_Response { 27 | optional .CCloud_UserFile details = 1; 28 | } 29 | 30 | message CCloud_EnumerateUserFiles_Request { 31 | optional uint32 appid = 1 [(description) = "App ID to enumerate the files of."]; 32 | optional bool extended_details = 2 [(description) = "(Optional) Get extended details back on the files found. Defaults to only returned the app Id and UGC Id of the files found."]; 33 | optional uint32 count = 3 [(description) = "(Optional) Maximum number of results to return on this call. Defaults to a maximum of 500 files returned."]; 34 | optional uint32 start_index = 4 [(description) = "(Optional) Starting index to begin enumeration at. Defaults to the beginning of the list."]; 35 | } 36 | 37 | message CCloud_EnumerateUserFiles_Response { 38 | repeated .CCloud_UserFile files = 1; 39 | optional uint32 total_files = 2; 40 | } 41 | 42 | message CCloud_Delete_Request { 43 | optional string filename = 1; 44 | optional uint32 appid = 2 [(description) = "App ID the file belongs to."]; 45 | } 46 | 47 | message CCloud_Delete_Response { 48 | } 49 | 50 | service Cloud { 51 | option (service_description) = "A service for Steam Cloud operations."; 52 | rpc GetUploadServerInfo (.CCloud_GetUploadServerInfo_Request) returns (.CCloud_GetUploadServerInfo_Response) { 53 | option (method_description) = "Returns the URL of the proper cloud server for a user."; 54 | } 55 | rpc GetFileDetails (.CCloud_GetFileDetails_Request) returns (.CCloud_GetFileDetails_Response) { 56 | option (method_description) = "Returns details on a Cloud file."; 57 | } 58 | rpc EnumerateUserFiles (.CCloud_EnumerateUserFiles_Request) returns (.CCloud_EnumerateUserFiles_Response) { 59 | option (method_description) = "Enumerates Cloud files for a user of a given app ID. Returns up to 500 files at a time."; 60 | } 61 | rpc Delete (.CCloud_Delete_Request) returns (.CCloud_Delete_Response) { 62 | option (method_description) = "Deletes a file from the user's cloud."; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_commonmessages.proto: -------------------------------------------------------------------------------- 1 | import "networkbasetypes.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum EDOTAStatPopupTypes { 7 | k_EDOTA_SPT_Textline = 0; 8 | k_EDOTA_SPT_Basic = 1; 9 | k_EDOTA_SPT_Poll = 2; 10 | k_EDOTA_SPT_Grid = 3; 11 | k_EDOTA_SPT_DualImage = 4; 12 | } 13 | 14 | enum dotaunitorder_t { 15 | DOTA_UNIT_ORDER_NONE = 0; 16 | DOTA_UNIT_ORDER_MOVE_TO_POSITION = 1; 17 | DOTA_UNIT_ORDER_MOVE_TO_TARGET = 2; 18 | DOTA_UNIT_ORDER_ATTACK_MOVE = 3; 19 | DOTA_UNIT_ORDER_ATTACK_TARGET = 4; 20 | DOTA_UNIT_ORDER_CAST_POSITION = 5; 21 | DOTA_UNIT_ORDER_CAST_TARGET = 6; 22 | DOTA_UNIT_ORDER_CAST_TARGET_TREE = 7; 23 | DOTA_UNIT_ORDER_CAST_NO_TARGET = 8; 24 | DOTA_UNIT_ORDER_CAST_TOGGLE = 9; 25 | DOTA_UNIT_ORDER_HOLD_POSITION = 10; 26 | DOTA_UNIT_ORDER_TRAIN_ABILITY = 11; 27 | DOTA_UNIT_ORDER_DROP_ITEM = 12; 28 | DOTA_UNIT_ORDER_GIVE_ITEM = 13; 29 | DOTA_UNIT_ORDER_PICKUP_ITEM = 14; 30 | DOTA_UNIT_ORDER_PICKUP_RUNE = 15; 31 | DOTA_UNIT_ORDER_PURCHASE_ITEM = 16; 32 | DOTA_UNIT_ORDER_SELL_ITEM = 17; 33 | DOTA_UNIT_ORDER_DISASSEMBLE_ITEM = 18; 34 | DOTA_UNIT_ORDER_MOVE_ITEM = 19; 35 | DOTA_UNIT_ORDER_CAST_TOGGLE_AUTO = 20; 36 | DOTA_UNIT_ORDER_STOP = 21; 37 | DOTA_UNIT_ORDER_TAUNT = 22; 38 | DOTA_UNIT_ORDER_BUYBACK = 23; 39 | DOTA_UNIT_ORDER_GLYPH = 24; 40 | DOTA_UNIT_ORDER_EJECT_ITEM_FROM_STASH = 25; 41 | DOTA_UNIT_ORDER_CAST_RUNE = 26; 42 | DOTA_UNIT_ORDER_PING_ABILITY = 27; 43 | DOTA_UNIT_ORDER_MOVE_TO_DIRECTION = 28; 44 | DOTA_UNIT_ORDER_PATROL = 29; 45 | DOTA_UNIT_ORDER_VECTOR_TARGET_POSITION = 30; 46 | DOTA_UNIT_ORDER_RADAR = 31; 47 | DOTA_UNIT_ORDER_SET_ITEM_COMBINE_LOCK = 32; 48 | DOTA_UNIT_ORDER_CONTINUE = 33; 49 | DOTA_UNIT_ORDER_VECTOR_TARGET_CANCELED = 34; 50 | DOTA_UNIT_ORDER_CAST_RIVER_PAINT = 35; 51 | } 52 | 53 | message CDOTAMsg_LocationPing { 54 | optional int32 x = 1; 55 | optional int32 y = 2; 56 | optional int32 target = 3; 57 | optional bool direct_ping = 4; 58 | optional int32 type = 5; 59 | } 60 | 61 | message CDOTAMsg_ItemAlert { 62 | optional int32 x = 1; 63 | optional int32 y = 2; 64 | optional int32 itemid = 3; 65 | } 66 | 67 | message CDOTAMsg_MapLine { 68 | optional int32 x = 1; 69 | optional int32 y = 2; 70 | optional bool initial = 3; 71 | } 72 | 73 | message CDOTAMsg_WorldLine { 74 | optional int32 x = 1; 75 | optional int32 y = 2; 76 | optional int32 z = 3; 77 | optional bool initial = 4; 78 | optional bool end = 5; 79 | } 80 | 81 | message CDOTAMsg_SendStatPopup { 82 | optional .EDOTAStatPopupTypes style = 1 [default = k_EDOTA_SPT_Textline]; 83 | repeated string stat_strings = 2; 84 | repeated int32 stat_images = 3; 85 | repeated int32 stat_image_types = 4; 86 | optional float duration = 5; 87 | } 88 | 89 | message CDOTAMsg_CoachHUDPing { 90 | optional uint32 x = 1; 91 | optional uint32 y = 2; 92 | optional string tgtpath = 3; 93 | } 94 | 95 | message CDOTAMsg_UnitOrder { 96 | optional sint32 issuer = 1 [default = -1]; 97 | optional .dotaunitorder_t order_type = 2 [default = DOTA_UNIT_ORDER_NONE]; 98 | repeated int32 units = 3; 99 | optional int32 target_index = 4; 100 | optional int32 ability_index = 5; 101 | optional .CMsgVector position = 6; 102 | optional bool queue = 7; 103 | optional int32 sequence_number = 8; 104 | } 105 | 106 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_client_enums.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum ETournamentTemplate { 5 | k_ETournamentTemplate_None = 0; 6 | k_ETournamentTemplate_AutomatedWin3 = 1; 7 | } 8 | 9 | enum ETournamentGameState { 10 | k_ETournamentGameState_Unknown = 0; 11 | k_ETournamentGameState_Canceled = 1; 12 | k_ETournamentGameState_Scheduled = 2; 13 | k_ETournamentGameState_Active = 3; 14 | k_ETournamentGameState_RadVictory = 20; 15 | k_ETournamentGameState_DireVictory = 21; 16 | k_ETournamentGameState_RadVictoryByForfeit = 22; 17 | k_ETournamentGameState_DireVictoryByForfeit = 23; 18 | k_ETournamentGameState_ServerFailure = 40; 19 | k_ETournamentGameState_NotNeeded = 41; 20 | } 21 | 22 | enum ETournamentTeamState { 23 | k_ETournamentTeamState_Unknown = 0; 24 | k_ETournamentTeamState_Node1 = 1; 25 | k_ETournamentTeamState_NodeMax = 1024; 26 | k_ETournamentTeamState_Eliminated = 14003; 27 | k_ETournamentTeamState_Forfeited = 14004; 28 | k_ETournamentTeamState_Finished1st = 15001; 29 | k_ETournamentTeamState_Finished2nd = 15002; 30 | k_ETournamentTeamState_Finished3rd = 15003; 31 | k_ETournamentTeamState_Finished4th = 15004; 32 | k_ETournamentTeamState_Finished5th = 15005; 33 | k_ETournamentTeamState_Finished6th = 15006; 34 | k_ETournamentTeamState_Finished7th = 15007; 35 | k_ETournamentTeamState_Finished8th = 15008; 36 | k_ETournamentTeamState_Finished9th = 15009; 37 | k_ETournamentTeamState_Finished10th = 15010; 38 | k_ETournamentTeamState_Finished11th = 15011; 39 | k_ETournamentTeamState_Finished12th = 15012; 40 | k_ETournamentTeamState_Finished13th = 15013; 41 | k_ETournamentTeamState_Finished14th = 15014; 42 | k_ETournamentTeamState_Finished15th = 15015; 43 | k_ETournamentTeamState_Finished16th = 15016; 44 | } 45 | 46 | enum ETournamentState { 47 | k_ETournamentState_Unknown = 0; 48 | k_ETournamentState_CanceledByAdmin = 1; 49 | k_ETournamentState_Completed = 2; 50 | k_ETournamentState_Merged = 3; 51 | k_ETournamentState_ServerFailure = 4; 52 | k_ETournamentState_TeamAbandoned = 5; 53 | k_ETournamentState_TeamTimeoutForfeit = 6; 54 | k_ETournamentState_TeamTimeoutRefund = 7; 55 | k_ETournamentState_ServerFailureGrantedVictory = 8; 56 | k_ETournamentState_TeamTimeoutGrantedVictory = 9; 57 | k_ETournamentState_InProgress = 100; 58 | k_ETournamentState_WaitingToMerge = 101; 59 | } 60 | 61 | enum ETournamentNodeState { 62 | k_ETournamentNodeState_Unknown = 0; 63 | k_ETournamentNodeState_Canceled = 1; 64 | k_ETournamentNodeState_TeamsNotYetAssigned = 2; 65 | k_ETournamentNodeState_InBetweenGames = 3; 66 | k_ETournamentNodeState_GameInProgress = 4; 67 | k_ETournamentNodeState_A_Won = 5; 68 | k_ETournamentNodeState_B_Won = 6; 69 | k_ETournamentNodeState_A_WonByForfeit = 7; 70 | k_ETournamentNodeState_B_WonByForfeit = 8; 71 | k_ETournamentNodeState_A_Bye = 9; 72 | k_ETournamentNodeState_A_Abandoned = 10; 73 | k_ETournamentNodeState_ServerFailure = 11; 74 | k_ETournamentNodeState_A_TimeoutForfeit = 12; 75 | k_ETournamentNodeState_A_TimeoutRefund = 13; 76 | } 77 | 78 | enum EDOTAGroupMergeResult { 79 | k_EDOTAGroupMergeResult_OK = 0; 80 | k_EDOTAGroupMergeResult_FAILED_GENERIC = 1; 81 | k_EDOTAGroupMergeResult_NOT_LEADER = 2; 82 | k_EDOTAGroupMergeResult_TOO_MANY_PLAYERS = 3; 83 | k_EDOTAGroupMergeResult_TOO_MANY_COACHES = 4; 84 | k_EDOTAGroupMergeResult_ENGINE_MISMATCH = 5; 85 | k_EDOTAGroupMergeResult_NO_SUCH_GROUP = 6; 86 | k_EDOTAGroupMergeResult_OTHER_GROUP_NOT_OPEN = 7; 87 | k_EDOTAGroupMergeResult_ALREADY_INVITED = 8; 88 | k_EDOTAGroupMergeResult_NOT_INVITED = 9; 89 | } 90 | 91 | -------------------------------------------------------------------------------- /src/Dota2/Utils/StreamHelpers.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | 5 | namespace Dota2.Utils 6 | { 7 | internal static class StreamHelpers 8 | { 9 | private static byte[] data = new byte[8]; 10 | 11 | public static Int16 ReadInt16(this Stream stream) 12 | { 13 | stream.Read(data, 0, 2); 14 | 15 | return BitConverter.ToInt16(data, 0); 16 | } 17 | 18 | public static UInt16 ReadUInt16(this Stream stream) 19 | { 20 | stream.Read(data, 0, 2); 21 | 22 | return BitConverter.ToUInt16(data, 0); 23 | } 24 | 25 | public static Int32 ReadInt32(this Stream stream) 26 | { 27 | stream.Read(data, 0, 4); 28 | 29 | return BitConverter.ToInt32(data, 0); 30 | } 31 | 32 | public static UInt32 ReadUInt32(this Stream stream) 33 | { 34 | stream.Read(data, 0, 4); 35 | 36 | return BitConverter.ToUInt32(data, 0); 37 | } 38 | 39 | public static UInt64 ReadUInt64(this Stream stream) 40 | { 41 | stream.Read(data, 0, 8); 42 | 43 | return BitConverter.ToUInt64(data, 0); 44 | } 45 | 46 | public static float ReadFloat(this Stream stream) 47 | { 48 | stream.Read(data, 0, 4); 49 | 50 | return BitConverter.ToSingle(data, 0); 51 | } 52 | 53 | public static string ReadNullTermString(this Stream stream, Encoding encoding) 54 | { 55 | int characterSize = encoding.GetByteCount("e"); 56 | 57 | using (MemoryStream ms = new MemoryStream()) 58 | { 59 | while (true) 60 | { 61 | byte[] data = new byte[characterSize]; 62 | stream.Read(data, 0, characterSize); 63 | 64 | if (encoding.GetString(data, 0, characterSize) == "\0") 65 | { 66 | break; 67 | } 68 | 69 | ms.Write(data, 0, data.Length); 70 | } 71 | 72 | return encoding.GetString(ms.ToArray()); 73 | } 74 | } 75 | 76 | public static void WriteNullTermString(this Stream stream, string value, Encoding encoding) 77 | { 78 | var dataLength = encoding.GetByteCount(value); 79 | var data = new byte[dataLength + 1]; 80 | encoding.GetBytes(value, 0, value.Length, data, 0); 81 | data[dataLength] = 0x00; // '\0' 82 | 83 | stream.Write(data, 0, data.Length); 84 | } 85 | 86 | private static byte[] bufferCache; 87 | 88 | public static byte[] ReadBytesCached(this Stream stream, int len) 89 | { 90 | if (bufferCache == null || bufferCache.Length < len) 91 | bufferCache = new byte[len]; 92 | 93 | stream.Read(bufferCache, 0, len); 94 | 95 | return bufferCache; 96 | } 97 | 98 | private static byte[] discardBuffer = new byte[2 << 12]; 99 | 100 | public static void ReadAndDiscard(this Stream stream, int len) 101 | { 102 | while (len > discardBuffer.Length) 103 | { 104 | stream.Read(discardBuffer, 0, discardBuffer.Length); 105 | len -= discardBuffer.Length; 106 | } 107 | 108 | stream.Read(discardBuffer, 0, len); 109 | } 110 | } 111 | } -------------------------------------------------------------------------------- /Resources/Protobufs/dota/gameevents.proto: -------------------------------------------------------------------------------- 1 | import "networkbasetypes.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum EBaseGameEvents { 7 | GE_VDebugGameSessionIDEvent = 200; 8 | GE_PlaceDecalEvent = 201; 9 | GE_ClearWorldDecalsEvent = 202; 10 | GE_ClearEntityDecalsEvent = 203; 11 | GE_ClearDecalsForSkeletonInstanceEvent = 204; 12 | GE_Source1LegacyGameEventList = 205; 13 | GE_Source1LegacyListenEvents = 206; 14 | GE_Source1LegacyGameEvent = 207; 15 | GE_SosStartSoundEvent = 208; 16 | GE_SosStopSoundEvent = 209; 17 | GE_SosSetSoundEventParams = 210; 18 | GE_SosSetLibraryStackFields = 211; 19 | GE_SosStopSoundEventHash = 212; 20 | } 21 | 22 | message CMsgVDebugGameSessionIDEvent { 23 | optional int32 clientid = 1; 24 | optional string gamesessionid = 2; 25 | } 26 | 27 | message CMsgPlaceDecalEvent { 28 | optional .CMsgVector position = 1; 29 | optional .CMsgVector normal = 2; 30 | optional .CMsgVector saxis = 3; 31 | optional uint32 decalmaterialindex = 4; 32 | optional uint32 flags = 5; 33 | optional fixed32 color = 6; 34 | optional float width = 7; 35 | optional float height = 8; 36 | optional float depth = 9; 37 | optional uint32 entityhandleindex = 10; 38 | optional fixed32 skeletoninstancehash = 11; 39 | optional int32 boneindex = 12; 40 | optional bool translucenthit = 13; 41 | optional bool is_adjacent = 14; 42 | } 43 | 44 | message CMsgClearWorldDecalsEvent { 45 | optional uint32 flagstoclear = 1; 46 | } 47 | 48 | message CMsgClearEntityDecalsEvent { 49 | optional uint32 flagstoclear = 1; 50 | } 51 | 52 | message CMsgClearDecalsForSkeletonInstanceEvent { 53 | optional uint32 flagstoclear = 1; 54 | optional uint32 entityhandleindex = 2; 55 | optional uint32 skeletoninstancehash = 3; 56 | } 57 | 58 | message CMsgSource1LegacyGameEventList { 59 | message key_t { 60 | optional int32 type = 1; 61 | optional string name = 2; 62 | } 63 | 64 | message descriptor_t { 65 | optional int32 eventid = 1; 66 | optional string name = 2; 67 | repeated .CMsgSource1LegacyGameEventList.key_t keys = 3; 68 | } 69 | 70 | repeated .CMsgSource1LegacyGameEventList.descriptor_t descriptors = 1; 71 | } 72 | 73 | message CMsgSource1LegacyListenEvents { 74 | optional int32 playerslot = 1; 75 | repeated uint32 eventarraybits = 2; 76 | } 77 | 78 | message CMsgSource1LegacyGameEvent { 79 | message key_t { 80 | optional int32 type = 1; 81 | optional string val_string = 2; 82 | optional float val_float = 3; 83 | optional int32 val_long = 4; 84 | optional int32 val_short = 5; 85 | optional int32 val_byte = 6; 86 | optional bool val_bool = 7; 87 | optional uint64 val_uint64 = 8; 88 | } 89 | 90 | optional string event_name = 1; 91 | optional int32 eventid = 2; 92 | repeated .CMsgSource1LegacyGameEvent.key_t keys = 3; 93 | } 94 | 95 | message CMsgSosStartSoundEvent { 96 | optional int32 soundevent_guid = 1; 97 | optional fixed32 soundevent_hash = 2; 98 | optional int32 source_entity_index = 3; 99 | optional int32 seed = 4; 100 | optional bytes packed_params = 5; 101 | optional float start_time = 6; 102 | } 103 | 104 | message CMsgSosStopSoundEvent { 105 | optional int32 soundevent_guid = 1; 106 | } 107 | 108 | message CMsgSosStopSoundEventHash { 109 | optional fixed32 soundevent_hash = 1; 110 | optional int32 source_entity_index = 2; 111 | } 112 | 113 | message CMsgSosSetSoundEventParams { 114 | optional int32 soundevent_guid = 1; 115 | optional bytes packed_params = 5; 116 | } 117 | 118 | message CMsgSosSetLibraryStackFields { 119 | optional fixed32 stack_hash = 1; 120 | optional bytes packed_fields = 5; 121 | } 122 | 123 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_match_metadata.proto: -------------------------------------------------------------------------------- 1 | import "base_gcmessages.proto"; 2 | import "dota_gcmessages_common_match_management.proto"; 3 | 4 | option cc_generic_services = false; 5 | 6 | message CDOTAMatchMetadataFile { 7 | required int32 version = 1; 8 | required uint64 match_id = 2; 9 | optional .CDOTAMatchMetadata metadata = 3; 10 | optional bytes private_metadata = 5; 11 | } 12 | 13 | message CDOTAMatchMetadata { 14 | message Team { 15 | message PlayerKill { 16 | optional uint32 victim_slot = 1; 17 | optional uint32 count = 2; 18 | } 19 | 20 | message ItemPurchase { 21 | optional uint32 item_id = 1; 22 | optional int32 purchase_time = 2; 23 | } 24 | 25 | message InventorySnapshot { 26 | repeated uint32 item_id = 1; 27 | optional int32 game_time = 2; 28 | optional uint32 kills = 3; 29 | optional uint32 deaths = 4; 30 | optional uint32 assists = 5; 31 | optional uint32 level = 6; 32 | } 33 | 34 | message AutoStyleCriteria { 35 | optional uint32 name_token = 1; 36 | optional float value = 2; 37 | } 38 | 39 | message Player { 40 | optional uint32 account_id = 1; 41 | repeated uint32 ability_upgrades = 2; 42 | optional uint32 player_slot = 3; 43 | repeated .CSOEconItem equipped_econ_items = 4; 44 | repeated .CDOTAMatchMetadata.Team.PlayerKill kills = 5; 45 | repeated .CDOTAMatchMetadata.Team.ItemPurchase items = 6; 46 | optional uint32 avg_kills_x16 = 7; 47 | optional uint32 avg_deaths_x16 = 8; 48 | optional uint32 avg_assists_x16 = 9; 49 | optional uint32 avg_gpm_x16 = 10; 50 | optional uint32 avg_xpm_x16 = 11; 51 | optional uint32 best_kills_x16 = 12; 52 | optional uint32 best_assists_x16 = 13; 53 | optional uint32 best_gpm_x16 = 14; 54 | optional uint32 best_xpm_x16 = 15; 55 | optional uint32 win_streak = 16; 56 | optional uint32 best_win_streak = 17; 57 | optional float fight_score = 18; 58 | optional float farm_score = 19; 59 | optional float support_score = 20; 60 | optional float push_score = 21; 61 | repeated uint32 level_up_times = 22; 62 | repeated float graph_net_worth = 23; 63 | repeated .CDOTAMatchMetadata.Team.InventorySnapshot inventory_snapshot = 24; 64 | optional bool avg_stats_calibrated = 25; 65 | repeated .CDOTAMatchMetadata.Team.AutoStyleCriteria auto_style_criteria = 26; 66 | optional uint32 event_id = 27; 67 | optional uint32 event_points = 28; 68 | } 69 | 70 | optional uint32 dota_team = 1; 71 | repeated .CDOTAMatchMetadata.Team.Player players = 2; 72 | repeated float graph_experience = 3; 73 | repeated float graph_gold_earned = 4; 74 | repeated float graph_net_worth = 5; 75 | optional bool cm_first_pick = 6; 76 | optional uint32 cm_captain_player_id = 7; 77 | repeated uint32 cm_bans = 8; 78 | repeated uint32 cm_picks = 9; 79 | optional uint32 cm_penalty = 10; 80 | } 81 | 82 | repeated .CDOTAMatchMetadata.Team teams = 1; 83 | repeated .CLobbyTimedRewardDetails item_rewards = 2; 84 | optional fixed64 lobby_id = 3; 85 | optional fixed64 report_until_time = 4; 86 | optional bytes event_game_custom_table = 5; 87 | } 88 | 89 | message CDOTAMatchPrivateMetadata { 90 | message Team { 91 | message Player { 92 | optional uint32 account_id = 1; 93 | optional uint32 player_slot = 2; 94 | optional bytes position_stream = 3; 95 | } 96 | 97 | message Building { 98 | optional string unit_name = 1; 99 | optional uint32 position_quant_x = 2; 100 | optional uint32 position_quant_y = 3; 101 | optional float death_time = 4; 102 | } 103 | 104 | optional uint32 dota_team = 1; 105 | repeated .CDOTAMatchPrivateMetadata.Team.Player players = 2; 106 | repeated .CDOTAMatchPrivateMetadata.Team.Building buildings = 3; 107 | } 108 | 109 | repeated .CDOTAMatchPrivateMetadata.Team teams = 1; 110 | } 111 | 112 | -------------------------------------------------------------------------------- /Resources/ProtobufDumper/ProtobufDumper/ProtobufDumper.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | AnyCPU 6 | 9.0.30729 7 | 2.0 8 | {8BFDE24C-E1D5-436B-8C2D-25700491F82B} 9 | Exe 10 | Properties 11 | ProtobufDumper 12 | ProtobufDumper 13 | v4.0 14 | 512 15 | 16 | 17 | 3.5 18 | 19 | 20 | ..\ 21 | true 22 | 23 | 24 | true 25 | full 26 | false 27 | bin\Debug\ 28 | DEBUG;TRACE 29 | prompt 30 | 4 31 | AnyCPU 32 | true 33 | AllRules.ruleset 34 | 35 | 36 | pdbonly 37 | true 38 | bin\Release\ 39 | TRACE 40 | prompt 41 | 4 42 | AnyCPU 43 | true 44 | AllRules.ruleset 45 | 46 | 47 | 48 | 49 | ..\packages\protobuf-net.2.0.0.668\lib\net40\protobuf-net.dll 50 | 51 | 52 | ..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll 53 | 54 | 55 | 3.5 56 | 57 | 58 | 3.5 59 | 60 | 61 | 3.5 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 84 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/demo.proto: -------------------------------------------------------------------------------- 1 | option cc_generic_services = false; 2 | 3 | enum EDemoCommands { 4 | DEM_Error = -1; 5 | DEM_Stop = 0; 6 | DEM_FileHeader = 1; 7 | DEM_FileInfo = 2; 8 | DEM_SyncTick = 3; 9 | DEM_SendTables = 4; 10 | DEM_ClassInfo = 5; 11 | DEM_StringTables = 6; 12 | DEM_Packet = 7; 13 | DEM_SignonPacket = 8; 14 | DEM_ConsoleCmd = 9; 15 | DEM_CustomData = 10; 16 | DEM_CustomDataCallbacks = 11; 17 | DEM_UserCmd = 12; 18 | DEM_FullPacket = 13; 19 | DEM_SaveGame = 14; 20 | DEM_SpawnGroups = 15; 21 | DEM_Max = 16; 22 | DEM_IsCompressed = 64; 23 | } 24 | 25 | message CDemoFileHeader { 26 | required string demo_file_stamp = 1; 27 | optional int32 network_protocol = 2; 28 | optional string server_name = 3; 29 | optional string client_name = 4; 30 | optional string map_name = 5; 31 | optional string game_directory = 6; 32 | optional int32 fullpackets_version = 7; 33 | optional bool allow_clientside_entities = 8; 34 | optional bool allow_clientside_particles = 9; 35 | optional string addons = 10; 36 | } 37 | 38 | message CGameInfo { 39 | message CDotaGameInfo { 40 | message CPlayerInfo { 41 | optional string hero_name = 1; 42 | optional string player_name = 2; 43 | optional bool is_fake_client = 3; 44 | optional uint64 steamid = 4; 45 | optional int32 game_team = 5; 46 | } 47 | 48 | message CHeroSelectEvent { 49 | optional bool is_pick = 1; 50 | optional uint32 team = 2; 51 | optional uint32 hero_id = 3; 52 | } 53 | 54 | optional uint64 match_id = 1; 55 | optional int32 game_mode = 2; 56 | optional int32 game_winner = 3; 57 | repeated .CGameInfo.CDotaGameInfo.CPlayerInfo player_info = 4; 58 | optional uint32 leagueid = 5; 59 | repeated .CGameInfo.CDotaGameInfo.CHeroSelectEvent picks_bans = 6; 60 | optional uint32 radiant_team_id = 7; 61 | optional uint32 dire_team_id = 8; 62 | optional string radiant_team_tag = 9; 63 | optional string dire_team_tag = 10; 64 | optional uint32 end_time = 11; 65 | } 66 | 67 | optional .CGameInfo.CDotaGameInfo dota = 4; 68 | } 69 | 70 | message CDemoFileInfo { 71 | optional float playback_time = 1; 72 | optional int32 playback_ticks = 2; 73 | optional int32 playback_frames = 3; 74 | optional .CGameInfo game_info = 4; 75 | } 76 | 77 | message CDemoPacket { 78 | optional int32 sequence_in = 1; 79 | optional int32 sequence_out_ack = 2; 80 | optional bytes data = 3; 81 | } 82 | 83 | message CDemoFullPacket { 84 | optional .CDemoStringTables string_table = 1; 85 | optional .CDemoPacket packet = 2; 86 | } 87 | 88 | message CDemoSaveGame { 89 | optional bytes data = 1; 90 | optional fixed64 steam_id = 2; 91 | optional fixed64 signature = 3; 92 | optional int32 version = 4; 93 | } 94 | 95 | message CDemoSyncTick { 96 | } 97 | 98 | message CDemoConsoleCmd { 99 | optional string cmdstring = 1; 100 | } 101 | 102 | message CDemoSendTables { 103 | optional bytes data = 1; 104 | } 105 | 106 | message CDemoClassInfo { 107 | message class_t { 108 | optional int32 class_id = 1; 109 | optional string network_name = 2; 110 | optional string table_name = 3; 111 | } 112 | 113 | repeated .CDemoClassInfo.class_t classes = 1; 114 | } 115 | 116 | message CDemoCustomData { 117 | optional int32 callback_index = 1; 118 | optional bytes data = 2; 119 | } 120 | 121 | message CDemoCustomDataCallbacks { 122 | repeated string save_id = 1; 123 | } 124 | 125 | message CDemoStringTables { 126 | message items_t { 127 | optional string str = 1; 128 | optional bytes data = 2; 129 | } 130 | 131 | message table_t { 132 | optional string table_name = 1; 133 | repeated .CDemoStringTables.items_t items = 2; 134 | repeated .CDemoStringTables.items_t items_clientside = 3; 135 | optional int32 table_flags = 4; 136 | } 137 | 138 | repeated .CDemoStringTables.table_t tables = 1; 139 | } 140 | 141 | message CDemoStop { 142 | } 143 | 144 | message CDemoUserCmd { 145 | optional int32 cmd_number = 1; 146 | optional bytes data = 2; 147 | } 148 | 149 | message CDemoSpawnGroups { 150 | repeated bytes msgs = 3; 151 | } 152 | 153 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/generate-base.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | echo Building Dota GC base... 4 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"steammessages.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgBase.cs" -t:csharp -ns:"Dota2.GC.Internal" 5 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"gcsystemmsgs.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgGCSystem.cs" -t:csharp -ns:"Dota2.GC.Internal" 6 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"base_gcmessages.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgGC.cs" -t:csharp -ns:"Dota2.GC.Internal" 7 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"gcsdk_gcmessages.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgGCSDK.cs" -t:csharp -ns:"Dota2.GC.Internal" 8 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"econ_shared_enums.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgGCEconSharedEnums.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 9 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"econ_gcmessages.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\SteamMsgGCEcon.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 10 | 11 | echo Building Dota messages... 12 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"network_connection.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\NetworkConnection.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 13 | 14 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_client_enums.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgClientEnums.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 15 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_shared_enums.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgSharedEnums.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 16 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_common.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCCommon.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" -p:import="Dota2.GC.Internal" 17 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_common_match_management.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCCommonMatchMgmt.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" -p:import="Dota2.GC.Internal" 18 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_msgid.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCMsgId.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 19 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClient.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" -p:import="Dota2.GC.Internal" 20 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_chat.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientChat.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 21 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_fantasy.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientFantasy.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 22 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_guild.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientGuild.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 23 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_match_management.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientMatchMgmt.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" -p:import="Dota2.GC.Internal" 24 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_team.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientTeam.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 25 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_tournament.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientTournament.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 26 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_client_watch.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCClientWatch.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" 27 | ..\..\Protogen\protogen -p:lightFramework -s:..\ -i:"dota_gcmessages_server.proto" -o:"..\..\..\src\Dota2\Base\Generated\GC\Dota\MsgGCServer.cs" -t:csharp -ns:"Dota2.GC.Dota.Internal" -------------------------------------------------------------------------------- /src/Dota2/CDN/DotaCDN.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Net.Http; 4 | using System.Threading.Tasks; 5 | using Dota2.Base.Data; 6 | using Dota2.Datagram.Config.Model; 7 | using Newtonsoft.Json; 8 | using Newtonsoft.Json.Linq; 9 | 10 | namespace Dota2.CDN 11 | { 12 | /// 13 | /// Interacts with the DOTA 2 CDN 14 | /// 15 | public static class DotaCDN 16 | { 17 | /// 18 | /// Gets the CDN Hostname for a CDN type 19 | /// 20 | /// CDN type 21 | /// 22 | public static string GetHostname(CDNType type) 23 | { 24 | switch (type) 25 | { 26 | case CDNType.LOCAL: 27 | return "localhost"; 28 | case CDNType.STANDARD: 29 | return "cdn.dota2.com"; 30 | case CDNType.CHINA: 31 | return "cdn.dota2.com.cn"; 32 | case CDNType.TEST: 33 | return "cdntest.steampowered.com"; 34 | } 35 | 36 | return null; 37 | } 38 | 39 | /// 40 | /// Build the URL to something static in the CDN 41 | /// 42 | /// 43 | public static string StaticDataPath(CDNData target, Games game = Games.DOTA2) 44 | { 45 | switch (target) 46 | { 47 | case CDNData.DATAGRAM_NETWORK_CONFIG: 48 | return "/apps/sdr/network_config.json"; 49 | default: 50 | return null; 51 | } 52 | } 53 | 54 | /// 55 | /// Builds the URL to the Steam Datagram network config file. 56 | /// 57 | /// 58 | /// 59 | /// 60 | public static Uri DatagramNetworkConfig(CDNType type = CDNType.STANDARD, Games game = Games.DOTA2) 61 | { 62 | UriBuilder builder = new UriBuilder("http", GetHostname(type), 80, 63 | StaticDataPath(CDNData.DATAGRAM_NETWORK_CONFIG, game)); 64 | return builder.Uri; 65 | } 66 | 67 | /// 68 | /// Retrieve the network config from the DOTA 2 CDN 69 | /// 70 | /// Network config on success, null otherwise. 71 | public static async Task GetNetworkConfig(CDNType type = CDNType.STANDARD, Games game = Games.DOTA2) 72 | { 73 | using (var wc = new HttpClient()) 74 | { 75 | HttpResponseMessage response = await wc.GetAsync(DatagramNetworkConfig(type, game)); 76 | response.EnsureSuccessStatusCode(); 77 | JObject obj = JObject.Parse(await response.Content.ReadAsStringAsync()); 78 | return obj.ToObject(); 79 | } 80 | } 81 | 82 | /// 83 | /// CDN type 84 | /// 85 | public enum CDNType 86 | { 87 | /// 88 | /// Local CDN. Presumably developer machines. 89 | /// 90 | LOCAL, 91 | 92 | /// 93 | /// Standard, public CDN 94 | /// 95 | STANDARD, 96 | 97 | /// 98 | /// CDN specific to China due to regulations. 99 | /// 100 | CHINA, 101 | 102 | /// 103 | /// TEST cdn, valve internal. 104 | /// 105 | TEST 106 | } 107 | 108 | /// 109 | /// Known data on the CDN with constant paths 110 | /// 111 | public enum CDNData 112 | { 113 | /// 114 | /// Steam Datagram network config 115 | /// 116 | DATAGRAM_NETWORK_CONFIG, 117 | } 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | project.lock.json 11 | .nuget 12 | artifacts 13 | 14 | # Build results 15 | [Dd]ebug/ 16 | [Dd]ebugPublic/ 17 | [Rr]elease/ 18 | [Rr]eleases/ 19 | x64/ 20 | x86/ 21 | build/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | 26 | # Roslyn cache directories 27 | *.ide/ 28 | 29 | # MSTest test Results 30 | [Tt]est[Rr]esult*/ 31 | [Bb]uild[Ll]og.* 32 | 33 | #NUNIT 34 | *.VisualState.xml 35 | TestResult.xml 36 | 37 | # Build Results of an ATL Project 38 | [Dd]ebugPS/ 39 | [Rr]eleasePS/ 40 | dlldata.c 41 | 42 | *_i.c 43 | *_p.c 44 | *_i.h 45 | *.ilk 46 | *.meta 47 | *.obj 48 | *.pch 49 | *.pdb 50 | *.pgc 51 | *.pgd 52 | *.rsp 53 | *.sbr 54 | *.tlb 55 | *.tli 56 | *.tlh 57 | *.tmp 58 | *.tmp_proj 59 | *.log 60 | *.vspscc 61 | *.vssscc 62 | .builds 63 | *.pidb 64 | *.svclog 65 | *.scc 66 | 67 | # Chutzpah Test files 68 | _Chutzpah* 69 | 70 | # Visual C++ cache files 71 | ipch/ 72 | *.aps 73 | *.ncb 74 | *.opensdf 75 | *.sdf 76 | *.cachefile 77 | 78 | # Visual Studio profiler 79 | *.psess 80 | *.vsp 81 | *.vspx 82 | 83 | # TFS 2012 Local Workspace 84 | $tf/ 85 | 86 | # Guidance Automation Toolkit 87 | *.gpState 88 | 89 | # ReSharper is a .NET coding add-in 90 | _ReSharper*/ 91 | *.[Rr]e[Ss]harper 92 | *.DotSettings.user 93 | 94 | # JustCode is a .NET coding addin-in 95 | .JustCode 96 | 97 | # TeamCity is a build add-in 98 | _TeamCity* 99 | 100 | # DotCover is a Code Coverage Tool 101 | *.dotCover 102 | 103 | # NCrunch 104 | _NCrunch_* 105 | .*crunch*.local.xml 106 | 107 | # MightyMoose 108 | *.mm.* 109 | AutoTest.Net/ 110 | 111 | # Web workbench (sass) 112 | .sass-cache/ 113 | 114 | # Installshield output folder 115 | [Ee]xpress/ 116 | 117 | # DocProject is a documentation generator add-in 118 | DocProject/buildhelp/ 119 | DocProject/Help/*.HxT 120 | DocProject/Help/*.HxC 121 | DocProject/Help/*.hhc 122 | DocProject/Help/*.hhk 123 | DocProject/Help/*.hhp 124 | DocProject/Help/Html2 125 | DocProject/Help/html 126 | 127 | # Click-Once directory 128 | publish/ 129 | 130 | # Publish Web Output 131 | *.[Pp]ublish.xml 132 | *.azurePubxml 133 | # TODO: Comment the next line if you want to checkin your web deploy settings 134 | # but database connection strings (with potential passwords) will be unencrypted 135 | *.pubxml 136 | *.publishproj 137 | 138 | # NuGet Packages 139 | *.nupkg 140 | # The packages folder can be ignored because of Package Restore 141 | **/packages/* 142 | # except build/, which is used as an MSBuild target. 143 | !**/packages/build/ 144 | # If using the old MSBuild-Integrated Package Restore, uncomment this: 145 | #!**/packages/repositories.config 146 | 147 | # Windows Azure Build Output 148 | csx/ 149 | *.build.csdef 150 | 151 | # Windows Store app package directory 152 | AppPackages/ 153 | 154 | # Others 155 | sql/ 156 | *.Cache 157 | ClientBin/ 158 | [Ss]tyle[Cc]op.* 159 | ~$* 160 | *~ 161 | *.dbmdl 162 | *.dbproj.schemaview 163 | *.pfx 164 | *.publishsettings 165 | node_modules/ 166 | 167 | # RIA/Silverlight projects 168 | Generated_Code/ 169 | 170 | # Backup & report files from converting an old project file 171 | # to a newer Visual Studio version. Backup files are not needed, 172 | # because we have git ;-) 173 | _UpgradeReport_Files/ 174 | Backup*/ 175 | UpgradeLog*.XML 176 | UpgradeLog*.htm 177 | 178 | # SQL Server files 179 | *.mdf 180 | *.ldf 181 | 182 | # Business Intelligence projects 183 | *.rdl.data 184 | *.bim.layout 185 | *.bim_*.settings 186 | 187 | # Microsoft Fakes 188 | FakesAssemblies/ 189 | 190 | # ========================= 191 | # Operating System Files 192 | # ========================= 193 | 194 | # OSX 195 | # ========================= 196 | 197 | .DS_Store 198 | .AppleDouble 199 | .LSOverride 200 | 201 | # Thumbnails 202 | ._* 203 | 204 | # Files that might appear on external disk 205 | .Spotlight-V100 206 | .Trashes 207 | 208 | # Directories potentially created on remote AFP share 209 | .AppleDB 210 | .AppleDesktop 211 | Network Trash Folder 212 | Temporary Items 213 | .apdisk 214 | 215 | # Windows 216 | # ========================= 217 | 218 | # Windows image file caches 219 | Thumbs.db 220 | ehthumbs.db 221 | 222 | # Folder config file 223 | Desktop.ini 224 | 225 | # Recycle Bin used on file shares 226 | $RECYCLE.BIN/ 227 | 228 | # Windows Installer files 229 | *.cab 230 | *.msi 231 | *.msm 232 | *.msp 233 | 234 | # Windows shortcuts 235 | *.lnk 236 | *.swp 237 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/gcsystemmsgs.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum EGCSystemMsg { 5 | k_EGCMsgInvalid = 0; 6 | k_EGCMsgMulti = 1; 7 | k_EGCMsgGenericReply = 10; 8 | k_EGCMsgSystemBase = 50; 9 | k_EGCMsgAchievementAwarded = 51; 10 | k_EGCMsgConCommand = 52; 11 | k_EGCMsgStartPlaying = 53; 12 | k_EGCMsgStopPlaying = 54; 13 | k_EGCMsgStartGameserver = 55; 14 | k_EGCMsgStopGameserver = 56; 15 | k_EGCMsgWGRequest = 57; 16 | k_EGCMsgWGResponse = 58; 17 | k_EGCMsgGetUserGameStatsSchema = 59; 18 | k_EGCMsgGetUserGameStatsSchemaResponse = 60; 19 | k_EGCMsgGetUserStatsDEPRECATED = 61; 20 | k_EGCMsgGetUserStatsResponse = 62; 21 | k_EGCMsgAppInfoUpdated = 63; 22 | k_EGCMsgValidateSession = 64; 23 | k_EGCMsgValidateSessionResponse = 65; 24 | k_EGCMsgLookupAccountFromInput = 66; 25 | k_EGCMsgSendHTTPRequest = 67; 26 | k_EGCMsgSendHTTPRequestResponse = 68; 27 | k_EGCMsgPreTestSetup = 69; 28 | k_EGCMsgRecordSupportAction = 70; 29 | k_EGCMsgGetAccountDetails_DEPRECATED = 71; 30 | k_EGCMsgReceiveInterAppMessage = 73; 31 | k_EGCMsgFindAccounts = 74; 32 | k_EGCMsgPostAlert = 75; 33 | k_EGCMsgGetLicenses = 76; 34 | k_EGCMsgGetUserStats = 77; 35 | k_EGCMsgGetCommands = 78; 36 | k_EGCMsgGetCommandsResponse = 79; 37 | k_EGCMsgAddFreeLicense = 80; 38 | k_EGCMsgAddFreeLicenseResponse = 81; 39 | k_EGCMsgGetIPLocation = 82; 40 | k_EGCMsgGetIPLocationResponse = 83; 41 | k_EGCMsgSystemStatsSchema = 84; 42 | k_EGCMsgGetSystemStats = 85; 43 | k_EGCMsgGetSystemStatsResponse = 86; 44 | k_EGCMsgSendEmail = 87; 45 | k_EGCMsgSendEmailResponse = 88; 46 | k_EGCMsgGetEmailTemplate = 89; 47 | k_EGCMsgGetEmailTemplateResponse = 90; 48 | k_EGCMsgGrantGuestPass = 91; 49 | k_EGCMsgGrantGuestPassResponse = 92; 50 | k_EGCMsgGetAccountDetails = 93; 51 | k_EGCMsgGetAccountDetailsResponse = 94; 52 | k_EGCMsgGetPersonaNames = 95; 53 | k_EGCMsgGetPersonaNamesResponse = 96; 54 | k_EGCMsgMultiplexMsg = 97; 55 | k_EGCMsgWebAPIRegisterInterfaces = 101; 56 | k_EGCMsgWebAPIJobRequest = 102; 57 | k_EGCMsgWebAPIJobRequestHttpResponse = 104; 58 | k_EGCMsgWebAPIJobRequestForwardResponse = 105; 59 | k_EGCMsgMemCachedGet = 200; 60 | k_EGCMsgMemCachedGetResponse = 201; 61 | k_EGCMsgMemCachedSet = 202; 62 | k_EGCMsgMemCachedDelete = 203; 63 | k_EGCMsgMemCachedStats = 204; 64 | k_EGCMsgMemCachedStatsResponse = 205; 65 | k_EGCMsgSQLStats = 210; 66 | k_EGCMsgSQLStatsResponse = 211; 67 | k_EGCMsgMasterSetDirectory = 220; 68 | k_EGCMsgMasterSetDirectoryResponse = 221; 69 | k_EGCMsgMasterSetWebAPIRouting = 222; 70 | k_EGCMsgMasterSetWebAPIRoutingResponse = 223; 71 | k_EGCMsgMasterSetClientMsgRouting = 224; 72 | k_EGCMsgMasterSetClientMsgRoutingResponse = 225; 73 | k_EGCMsgSetOptions = 226; 74 | k_EGCMsgSetOptionsResponse = 227; 75 | k_EGCMsgSystemBase2 = 500; 76 | k_EGCMsgGetPurchaseTrustStatus = 501; 77 | k_EGCMsgGetPurchaseTrustStatusResponse = 502; 78 | k_EGCMsgUpdateSession = 503; 79 | k_EGCMsgGCAccountVacStatusChange = 504; 80 | k_EGCMsgCheckFriendship = 505; 81 | k_EGCMsgCheckFriendshipResponse = 506; 82 | k_EGCMsgGetPartnerAccountLink = 507; 83 | k_EGCMsgGetPartnerAccountLinkResponse = 508; 84 | k_EGCMsgVSReportedSuspiciousActivity = 509; 85 | k_EGCMsgDPPartnerMicroTxns = 512; 86 | k_EGCMsgDPPartnerMicroTxnsResponse = 513; 87 | k_EGCMsgGetIPASN = 514; 88 | k_EGCMsgGetIPASNResponse = 515; 89 | k_EGCMsgGetAppFriendsList = 516; 90 | k_EGCMsgGetAppFriendsListResponse = 517; 91 | k_EGCMsgVacVerificationChange = 518; 92 | k_EGCMsgAccountPhoneNumberChange = 519; 93 | } 94 | 95 | enum ESOMsg { 96 | k_ESOMsg_Create = 21; 97 | k_ESOMsg_Update = 22; 98 | k_ESOMsg_Destroy = 23; 99 | k_ESOMsg_CacheSubscribed = 24; 100 | k_ESOMsg_CacheUnsubscribed = 25; 101 | k_ESOMsg_UpdateMultiple = 26; 102 | k_ESOMsg_CacheSubscriptionRefresh = 28; 103 | k_ESOMsg_CacheSubscribedUpToDate = 29; 104 | } 105 | 106 | enum EGCBaseClientMsg { 107 | k_EMsgGCPingRequest = 3001; 108 | k_EMsgGCPingResponse = 3002; 109 | k_EMsgGCToClientPollConvarRequest = 3003; 110 | k_EMsgGCToClientPollConvarResponse = 3004; 111 | k_EMsgGCClientWelcome = 4004; 112 | k_EMsgGCServerWelcome = 4005; 113 | k_EMsgGCClientHello = 4006; 114 | k_EMsgGCServerHello = 4007; 115 | k_EMsgGCClientConnectionStatus = 4009; 116 | k_EMsgGCServerConnectionStatus = 4010; 117 | } 118 | 119 | enum EGCToGCMsg { 120 | k_EGCToGCMsgMasterAck = 150; 121 | k_EGCToGCMsgMasterAckResponse = 151; 122 | k_EGCToGCMsgRouted = 152; 123 | k_EGCToGCMsgRoutedReply = 153; 124 | k_EMsgGCUpdateSubGCSessionInfo = 154; 125 | k_EMsgGCRequestSubGCSessionInfo = 155; 126 | k_EMsgGCRequestSubGCSessionInfoResponse = 156; 127 | k_EGCToGCMsgMasterStartupComplete = 157; 128 | k_EMsgGCToGCSOCacheSubscribe = 158; 129 | k_EMsgGCToGCSOCacheUnsubscribe = 159; 130 | k_EMsgGCToGCLoadSessionSOCache = 160; 131 | k_EMsgGCToGCLoadSessionSOCacheResponse = 161; 132 | k_EMsgGCToGCUpdateSessionStats = 162; 133 | k_EMsgGCToGCUniverseStartup = 163; 134 | k_EMsgGCToGCUniverseStartupResponse = 164; 135 | k_EMsgGCToGCForwardAccountDetails = 165; 136 | } 137 | 138 | -------------------------------------------------------------------------------- /Resources/Protogen/common.xslt: -------------------------------------------------------------------------------- 1 | 2 | 5 | 12 | 13 | 14 | Node not handled: / 15 | 16 | ; 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/networkbasetypes.proto: -------------------------------------------------------------------------------- 1 | import "network_connection.proto"; 2 | 3 | option cc_generic_services = false; 4 | 5 | enum NET_Messages { 6 | net_NOP = 0; 7 | net_Disconnect = 1; 8 | net_SplitScreenUser = 3; 9 | net_Tick = 4; 10 | net_StringCmd = 5; 11 | net_SetConVar = 6; 12 | net_SignonState = 7; 13 | net_SpawnGroup_Load = 8; 14 | net_SpawnGroup_ManifestUpdate = 9; 15 | net_SpawnGroup_SetCreationTick = 11; 16 | net_SpawnGroup_Unload = 12; 17 | net_SpawnGroup_LoadCompleted = 13; 18 | } 19 | 20 | enum SpawnGroupFlags_t { 21 | SPAWN_GROUP_LOAD_ENTITIES_FROM_SAVE = 1; 22 | SPAWN_GROUP_DONT_SPAWN_ENTITIES = 2; 23 | SPAWN_GROUP_SYNCHRONOUS_SPAWN = 4; 24 | SPAWN_GROUP_IS_INITIAL_SPAWN_GROUP = 8; 25 | SPAWN_GROUP_CREATE_CLIENT_ONLY_ENTITIES = 16; 26 | SPAWN_GROUP_BLOCK_UNTIL_LOADED = 64; 27 | SPAWN_GROUP_LOAD_STREAMING_DATA = 128; 28 | SPAWN_GROUP_CREATE_NEW_SCENE_WORLD = 256; 29 | } 30 | 31 | message CMsgVector { 32 | optional float x = 1; 33 | optional float y = 2; 34 | optional float z = 3; 35 | } 36 | 37 | message CMsgVector2D { 38 | optional float x = 1; 39 | optional float y = 2; 40 | } 41 | 42 | message CMsgQAngle { 43 | optional float x = 1; 44 | optional float y = 2; 45 | optional float z = 3; 46 | } 47 | 48 | message CMsgPlayerInfo { 49 | optional string name = 1; 50 | optional fixed64 xuid = 2; 51 | optional int32 userid = 3; 52 | optional fixed64 steamid = 4; 53 | optional bool fakeplayer = 5; 54 | optional bool ishltv = 6; 55 | } 56 | 57 | message CMsg_CVars { 58 | message CVar { 59 | optional string name = 1; 60 | optional string value = 2; 61 | } 62 | 63 | repeated .CMsg_CVars.CVar cvars = 1; 64 | } 65 | 66 | message CNETMsg_NOP { 67 | } 68 | 69 | message CNETMsg_SplitScreenUser { 70 | optional int32 slot = 1; 71 | } 72 | 73 | message CNETMsg_Disconnect { 74 | optional .ENetworkDisconnectionReason reason = 2 [default = NETWORK_DISCONNECT_INVALID]; 75 | } 76 | 77 | message CNETMsg_Tick { 78 | optional uint32 tick = 1; 79 | optional uint32 host_frametime = 2; 80 | optional uint32 host_frametime_std_deviation = 3; 81 | optional uint32 host_computationtime = 4; 82 | optional uint32 host_computationtime_std_deviation = 5; 83 | optional uint32 host_framestarttime_std_deviation = 6; 84 | } 85 | 86 | message CNETMsg_StringCmd { 87 | optional string command = 1; 88 | } 89 | 90 | message CNETMsg_SetConVar { 91 | optional .CMsg_CVars convars = 1; 92 | } 93 | 94 | message CNETMsg_SignonState { 95 | optional uint32 signon_state = 1; 96 | optional uint32 spawn_count = 2; 97 | optional uint32 num_server_players = 3; 98 | repeated string players_networkids = 4; 99 | optional string map_name = 5; 100 | optional string addons = 6; 101 | } 102 | 103 | message CSVCMsg_GameEvent { 104 | message key_t { 105 | optional int32 type = 1; 106 | optional string val_string = 2; 107 | optional float val_float = 3; 108 | optional int32 val_long = 4; 109 | optional int32 val_short = 5; 110 | optional int32 val_byte = 6; 111 | optional bool val_bool = 7; 112 | optional uint64 val_uint64 = 8; 113 | } 114 | 115 | optional string event_name = 1; 116 | optional int32 eventid = 2; 117 | repeated .CSVCMsg_GameEvent.key_t keys = 3; 118 | } 119 | 120 | message CSVCMsgList_GameEvents { 121 | message event_t { 122 | optional int32 tick = 1; 123 | optional .CSVCMsg_GameEvent event = 2; 124 | } 125 | 126 | repeated .CSVCMsgList_GameEvents.event_t events = 1; 127 | } 128 | 129 | message CSVCMsg_UserMessage { 130 | optional int32 msg_type = 1; 131 | optional bytes msg_data = 2; 132 | } 133 | 134 | message CSVCMsgList_UserMessages { 135 | message usermsg_t { 136 | optional int32 tick = 1; 137 | optional .CSVCMsg_UserMessage msg = 2; 138 | } 139 | 140 | repeated .CSVCMsgList_UserMessages.usermsg_t usermsgs = 1; 141 | } 142 | 143 | message CNETMsg_SpawnGroup_Load { 144 | optional string worldname = 1; 145 | optional string entitylumpname = 2; 146 | optional string entityfiltername = 3; 147 | optional uint32 spawngrouphandle = 4; 148 | optional uint32 spawngroupownerhandle = 5; 149 | optional .CMsgVector world_offset_pos = 6; 150 | optional .CMsgQAngle world_offset_angle = 7; 151 | optional bytes spawngroupmanifest = 8; 152 | optional uint32 flags = 9; 153 | optional int32 tickcount = 10; 154 | optional bool manifestincomplete = 11; 155 | optional string localnamefixup = 12; 156 | optional string parentnamefixup = 13; 157 | optional int32 manifestloadpriority = 14; 158 | optional uint32 worldgroupid = 15; 159 | optional uint32 creationsequence = 16; 160 | optional string savegamefilename = 17; 161 | optional uint32 spawngroupparenthandle = 18; 162 | } 163 | 164 | message CNETMsg_SpawnGroup_ManifestUpdate { 165 | optional uint32 spawngrouphandle = 1; 166 | optional bytes spawngroupmanifest = 2; 167 | optional bool manifestincomplete = 3; 168 | } 169 | 170 | message CNETMsg_SpawnGroup_SetCreationTick { 171 | optional uint32 spawngrouphandle = 1; 172 | optional int32 tickcount = 2; 173 | optional uint32 creationsequence = 3; 174 | } 175 | 176 | message CNETMsg_SpawnGroup_Unload { 177 | optional uint32 spawngrouphandle = 1; 178 | optional uint32 flags = 2; 179 | optional int32 tickcount = 3; 180 | } 181 | 182 | message CNETMsg_SpawnGroup_LoadCompleted { 183 | optional uint32 spawngrouphandle = 1; 184 | } 185 | 186 | message CSVCMsg_GameSessionConfiguration { 187 | optional bool is_multiplayer = 1; 188 | optional bool is_loadsavegame = 2; 189 | optional bool is_background_map = 3; 190 | optional bool is_headless = 4; 191 | optional uint32 min_client_limit = 5; 192 | optional uint32 max_client_limit = 6; 193 | optional uint32 max_clients = 7; 194 | optional fixed32 tick_interval = 8; 195 | optional string hostname = 9; 196 | optional string savegamename = 10; 197 | optional string s1_mapname = 11; 198 | optional string gamemode = 12; 199 | optional string server_ip_address = 13; 200 | optional bytes data = 14; 201 | optional bool is_localonly = 15; 202 | optional bool is_transition = 16; 203 | optional string previouslevel = 17; 204 | optional string landmarkname = 18; 205 | } 206 | 207 | -------------------------------------------------------------------------------- /src/Dota2/Base/Generated/GC/SteamMsgGCEconSharedEnums.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | #pragma warning disable 1591 10 | 11 | // Option: light framework (CF/Silverlight) enabled 12 | 13 | // Generated from: econ_shared_enums.proto 14 | namespace Dota2.GC.Dota.Internal 15 | { 16 | [global::ProtoBuf.ProtoContract(Name=@"CMsgGenericResult")] 17 | public partial class CMsgGenericResult : global::ProtoBuf.IExtensible 18 | { 19 | public CMsgGenericResult() {} 20 | 21 | 22 | private uint _eresult = (uint)2; 23 | [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"eresult", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] 24 | [global::System.ComponentModel.DefaultValue((uint)2)] 25 | public uint eresult 26 | { 27 | get { return _eresult; } 28 | set { _eresult = value; } 29 | } 30 | 31 | private string _debug_message = ""; 32 | [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"debug_message", DataFormat = global::ProtoBuf.DataFormat.Default)] 33 | [global::System.ComponentModel.DefaultValue("")] 34 | public string debug_message 35 | { 36 | get { return _debug_message; } 37 | set { _debug_message = value; } 38 | } 39 | private global::ProtoBuf.IExtension extensionObject; 40 | global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) 41 | { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } 42 | } 43 | 44 | [global::ProtoBuf.ProtoContract(Name=@"EGCEconBaseMsg", EnumPassthru=true)] 45 | public enum EGCEconBaseMsg 46 | { 47 | 48 | [global::ProtoBuf.ProtoEnum(Name=@"k_EMsgGCGenericResult", Value=2579)] 49 | k_EMsgGCGenericResult = 2579 50 | } 51 | 52 | [global::ProtoBuf.ProtoContract(Name=@"EGCMsgResponse", EnumPassthru=true)] 53 | public enum EGCMsgResponse 54 | { 55 | 56 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseOK", Value=0)] 57 | k_EGCMsgResponseOK = 0, 58 | 59 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseDenied", Value=1)] 60 | k_EGCMsgResponseDenied = 1, 61 | 62 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseServerError", Value=2)] 63 | k_EGCMsgResponseServerError = 2, 64 | 65 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseTimeout", Value=3)] 66 | k_EGCMsgResponseTimeout = 3, 67 | 68 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseInvalid", Value=4)] 69 | k_EGCMsgResponseInvalid = 4, 70 | 71 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseNoMatch", Value=5)] 72 | k_EGCMsgResponseNoMatch = 5, 73 | 74 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseUnknownError", Value=6)] 75 | k_EGCMsgResponseUnknownError = 6, 76 | 77 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgResponseNotLoggedOn", Value=7)] 78 | k_EGCMsgResponseNotLoggedOn = 7, 79 | 80 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgFailedToCreate", Value=8)] 81 | k_EGCMsgFailedToCreate = 8 82 | } 83 | 84 | [global::ProtoBuf.ProtoContract(Name=@"EGCPartnerRequestResponse", EnumPassthru=true)] 85 | public enum EGCPartnerRequestResponse 86 | { 87 | 88 | [global::ProtoBuf.ProtoEnum(Name=@"k_EPartnerRequestOK", Value=1)] 89 | k_EPartnerRequestOK = 1, 90 | 91 | [global::ProtoBuf.ProtoEnum(Name=@"k_EPartnerRequestBadAccount", Value=2)] 92 | k_EPartnerRequestBadAccount = 2, 93 | 94 | [global::ProtoBuf.ProtoEnum(Name=@"k_EPartnerRequestNotLinked", Value=3)] 95 | k_EPartnerRequestNotLinked = 3, 96 | 97 | [global::ProtoBuf.ProtoEnum(Name=@"k_EPartnerRequestUnsupportedPartnerType", Value=4)] 98 | k_EPartnerRequestUnsupportedPartnerType = 4 99 | } 100 | 101 | [global::ProtoBuf.ProtoContract(Name=@"EGCMsgUseItemResponse", EnumPassthru=true)] 102 | public enum EGCMsgUseItemResponse 103 | { 104 | 105 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_ItemUsed", Value=0)] 106 | k_EGCMsgUseItemResponse_ItemUsed = 0, 107 | 108 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_GiftNoOtherPlayers", Value=1)] 109 | k_EGCMsgUseItemResponse_GiftNoOtherPlayers = 1, 110 | 111 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_ServerError", Value=2)] 112 | k_EGCMsgUseItemResponse_ServerError = 2, 113 | 114 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_MiniGameAlreadyStarted", Value=3)] 115 | k_EGCMsgUseItemResponse_MiniGameAlreadyStarted = 3, 116 | 117 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_ItemUsed_ItemsGranted", Value=4)] 118 | k_EGCMsgUseItemResponse_ItemUsed_ItemsGranted = 4, 119 | 120 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_DropRateBonusAlreadyGranted", Value=5)] 121 | k_EGCMsgUseItemResponse_DropRateBonusAlreadyGranted = 5, 122 | 123 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_NotInLowPriorityPool", Value=6)] 124 | k_EGCMsgUseItemResponse_NotInLowPriorityPool = 6, 125 | 126 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_NotHighEnoughLevel", Value=7)] 127 | k_EGCMsgUseItemResponse_NotHighEnoughLevel = 7, 128 | 129 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_EventNotActive", Value=8)] 130 | k_EGCMsgUseItemResponse_EventNotActive = 8, 131 | 132 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_ItemUsed_EventPointsGranted", Value=9)] 133 | k_EGCMsgUseItemResponse_ItemUsed_EventPointsGranted = 9, 134 | 135 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_MissingRequirement", Value=10)] 136 | k_EGCMsgUseItemResponse_MissingRequirement = 10, 137 | 138 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_EmoticonUnlock_NoNew", Value=11)] 139 | k_EGCMsgUseItemResponse_EmoticonUnlock_NoNew = 11, 140 | 141 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_EmoticonUnlock_Complete", Value=12)] 142 | k_EGCMsgUseItemResponse_EmoticonUnlock_Complete = 12, 143 | 144 | [global::ProtoBuf.ProtoEnum(Name=@"k_EGCMsgUseItemResponse_ItemUsed_Compendium", Value=13)] 145 | k_EGCMsgUseItemResponse_ItemUsed_Compendium = 13 146 | } 147 | 148 | } 149 | #pragma warning restore 1591 150 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_gcmessages_client_watch.proto: -------------------------------------------------------------------------------- 1 | import "dota_shared_enums.proto"; 2 | import "dota_gcmessages_common.proto"; 3 | 4 | option optimize_for = SPEED; 5 | option cc_generic_services = false; 6 | 7 | message CSourceTVGameSmall { 8 | message Player { 9 | optional uint32 account_id = 1; 10 | optional uint32 hero_id = 2; 11 | } 12 | 13 | optional uint32 activate_time = 1; 14 | optional uint32 deactivate_time = 2; 15 | optional uint64 server_steam_id = 3; 16 | optional uint64 lobby_id = 4; 17 | optional uint32 league_id = 5; 18 | optional uint32 lobby_type = 6; 19 | optional int32 game_time = 7; 20 | optional uint32 delay = 8; 21 | optional uint32 spectators = 9; 22 | optional uint32 game_mode = 10; 23 | optional uint32 average_mmr = 11; 24 | optional string team_name_radiant = 15; 25 | optional string team_name_dire = 16; 26 | optional fixed64 team_logo_radiant = 24; 27 | optional fixed64 team_logo_dire = 25; 28 | optional uint32 sort_score = 17; 29 | optional float last_update_time = 18; 30 | optional int32 radiant_lead = 19; 31 | optional uint32 radiant_score = 20; 32 | optional uint32 dire_score = 21; 33 | repeated .CSourceTVGameSmall.Player players = 22; 34 | optional fixed32 building_state = 23; 35 | optional uint32 weekend_tourney_tournament_id = 26; 36 | optional uint32 weekend_tourney_division = 27; 37 | optional uint32 weekend_tourney_skill_level = 28; 38 | optional uint32 weekend_tourney_bracket_round = 29; 39 | } 40 | 41 | message CMsgClientToGCFindTopSourceTVGames { 42 | optional string search_key = 1; 43 | optional uint32 league_id = 2; 44 | optional uint32 hero_id = 3; 45 | optional uint32 start_game = 4; 46 | optional uint32 game_list_index = 5; 47 | repeated uint64 lobby_ids = 6; 48 | } 49 | 50 | message CMsgGCToClientFindTopSourceTVGamesResponse { 51 | optional string search_key = 1; 52 | optional uint32 league_id = 2; 53 | optional uint32 hero_id = 3; 54 | optional uint32 start_game = 4; 55 | optional uint32 num_games = 5; 56 | optional uint32 game_list_index = 6; 57 | repeated .CSourceTVGameSmall game_list = 7; 58 | optional bool specific_games = 8; 59 | } 60 | 61 | message CMsgGCToClientTopWeekendTourneyGames { 62 | repeated .CSourceTVGameSmall live_games = 1; 63 | } 64 | 65 | message CMsgClientToGCTopMatchesRequest { 66 | optional uint32 hero_id = 1; 67 | optional uint32 player_account_id = 2; 68 | optional uint32 team_id = 3; 69 | } 70 | 71 | message CMsgClientToGCTopLeagueMatchesRequest { 72 | } 73 | 74 | message CMsgClientToGCTopFriendMatchesRequest { 75 | } 76 | 77 | message CMsgClientToGCMatchesMinimalRequest { 78 | repeated uint64 match_ids = 1; 79 | } 80 | 81 | message CMsgClientToGCMatchesMinimalResponse { 82 | repeated .CMsgDOTAMatchMinimal matches = 1; 83 | optional bool last_match = 2; 84 | } 85 | 86 | message CMsgGCToClientTopLeagueMatchesResponse { 87 | repeated .CMsgDOTAMatchMinimal matches = 2; 88 | } 89 | 90 | message CMsgGCToClientTopFriendMatchesResponse { 91 | repeated .CMsgDOTAMatchMinimal matches = 1; 92 | } 93 | 94 | message CMsgClientToGCFindTopMatches { 95 | optional uint32 start_game = 1; 96 | optional uint32 league_id = 2; 97 | optional uint32 hero_id = 3; 98 | optional uint32 friend_id = 4; 99 | optional bool friend_list = 5; 100 | optional bool league_list = 6; 101 | } 102 | 103 | message CMsgGCToClientFindTopLeagueMatchesResponse { 104 | optional uint32 start_game = 1; 105 | optional uint32 league_id = 2; 106 | optional uint32 hero_id = 3; 107 | repeated uint32 match_ids = 4; 108 | repeated .CMsgDOTAMatch matches = 5; 109 | } 110 | 111 | message CMsgSpectateFriendGame { 112 | optional fixed64 steam_id = 1; 113 | } 114 | 115 | message CMsgSpectateFriendGameResponse { 116 | optional fixed64 server_steamid = 4; 117 | } 118 | 119 | message CMsgDOTAMatchMinimal { 120 | message Player { 121 | optional uint32 account_id = 1; 122 | optional uint32 hero_id = 2; 123 | optional uint32 kills = 3; 124 | optional uint32 deaths = 4; 125 | optional uint32 assists = 5; 126 | repeated uint32 items = 6; 127 | optional uint32 player_slot = 7; 128 | } 129 | 130 | message Tourney { 131 | optional uint32 league_id = 1; 132 | optional uint32 series_type = 8; 133 | optional uint32 series_game = 9; 134 | optional uint32 weekend_tourney_tournament_id = 10; 135 | optional uint32 weekend_tourney_season_trophy_id = 11; 136 | optional uint32 weekend_tourney_division = 12; 137 | optional uint32 weekend_tourney_skill_level = 13; 138 | optional uint32 radiant_team_id = 2; 139 | optional string radiant_team_name = 3; 140 | optional fixed64 radiant_team_logo = 4; 141 | optional uint32 dire_team_id = 5; 142 | optional string dire_team_name = 6; 143 | optional fixed64 dire_team_logo = 7; 144 | } 145 | 146 | optional uint64 match_id = 1; 147 | optional fixed32 start_time = 2; 148 | optional uint32 duration = 3; 149 | optional .DOTA_GameMode game_mode = 4 [default = DOTA_GAMEMODE_NONE]; 150 | repeated .CMsgDOTAMatchMinimal.Player players = 6; 151 | optional .CMsgDOTAMatchMinimal.Tourney tourney = 7; 152 | optional .EMatchOutcome match_outcome = 8 [default = k_EMatchOutcome_Unknown]; 153 | } 154 | 155 | message CDOTAReplayDownloadInfo { 156 | message Highlight { 157 | optional uint32 timestamp = 1; 158 | optional string description = 2; 159 | } 160 | 161 | optional .CMsgDOTAMatchMinimal match = 1; 162 | optional string title = 2; 163 | optional string description = 3; 164 | optional uint32 size = 4; 165 | repeated string tags = 5; 166 | optional bool exists_on_disk = 6; 167 | } 168 | 169 | message CMsgWatchGame { 170 | optional fixed64 server_steamid = 1; 171 | optional uint32 client_version = 2; 172 | optional fixed64 watch_server_steamid = 3; 173 | optional uint64 lobby_id = 4; 174 | repeated uint32 regions = 5; 175 | } 176 | 177 | message CMsgCancelWatchGame { 178 | } 179 | 180 | message CMsgWatchGameResponse { 181 | enum WatchGameResult { 182 | PENDING = 0; 183 | READY = 1; 184 | GAMESERVERNOTFOUND = 2; 185 | UNAVAILABLE = 3; 186 | CANCELLED = 4; 187 | INCOMPATIBLEVERSION = 5; 188 | MISSINGLEAGUESUBSCRIPTION = 6; 189 | LOBBYNOTFOUND = 7; 190 | } 191 | 192 | optional .CMsgWatchGameResponse.WatchGameResult watch_game_result = 1 [default = PENDING]; 193 | optional uint32 source_tv_public_addr = 2; 194 | optional uint32 source_tv_private_addr = 3; 195 | optional uint32 source_tv_port = 4; 196 | optional fixed64 game_server_steamid = 5; 197 | optional fixed64 watch_server_steamid = 6; 198 | optional fixed64 watch_tv_unique_secret_code = 7; 199 | } 200 | 201 | message CMsgPartyLeaderWatchGamePrompt { 202 | optional fixed64 game_server_steamid = 5; 203 | } 204 | 205 | message CDOTABroadcasterInfo { 206 | optional uint32 account_id = 1; 207 | optional fixed64 server_steam_id = 2; 208 | optional bool live = 3; 209 | optional string team_name_radiant = 4; 210 | optional string team_name_dire = 5; 211 | optional string stage_name = 6; 212 | optional uint32 series_game = 7; 213 | optional uint32 series_type = 8; 214 | optional uint32 upcoming_broadcast_timestamp = 9; 215 | optional bool allow_live_video = 10; 216 | } 217 | 218 | -------------------------------------------------------------------------------- /Resources/Protobufs/google/protobuf/descriptor.proto: -------------------------------------------------------------------------------- 1 | package google.protobuf; 2 | 3 | option java_package = "com.google.protobuf"; 4 | option java_outer_classname = "DescriptorProtos"; 5 | option optimize_for = SPEED; 6 | 7 | message FileDescriptorSet { 8 | repeated .google.protobuf.FileDescriptorProto file = 1; 9 | } 10 | 11 | message FileDescriptorProto { 12 | optional string name = 1; 13 | optional string package = 2; 14 | repeated string dependency = 3; 15 | repeated int32 public_dependency = 10; 16 | repeated int32 weak_dependency = 11; 17 | repeated .google.protobuf.DescriptorProto message_type = 4; 18 | repeated .google.protobuf.EnumDescriptorProto enum_type = 5; 19 | repeated .google.protobuf.ServiceDescriptorProto service = 6; 20 | repeated .google.protobuf.FieldDescriptorProto extension = 7; 21 | optional .google.protobuf.FileOptions options = 8; 22 | optional .google.protobuf.SourceCodeInfo source_code_info = 9; 23 | } 24 | 25 | message DescriptorProto { 26 | message ExtensionRange { 27 | optional int32 start = 1; 28 | optional int32 end = 2; 29 | } 30 | 31 | optional string name = 1; 32 | repeated .google.protobuf.FieldDescriptorProto field = 2; 33 | repeated .google.protobuf.FieldDescriptorProto extension = 6; 34 | repeated .google.protobuf.DescriptorProto nested_type = 3; 35 | repeated .google.protobuf.EnumDescriptorProto enum_type = 4; 36 | repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; 37 | repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; 38 | optional .google.protobuf.MessageOptions options = 7; 39 | } 40 | 41 | message FieldDescriptorProto { 42 | enum Type { 43 | TYPE_DOUBLE = 1; 44 | TYPE_FLOAT = 2; 45 | TYPE_INT64 = 3; 46 | TYPE_UINT64 = 4; 47 | TYPE_INT32 = 5; 48 | TYPE_FIXED64 = 6; 49 | TYPE_FIXED32 = 7; 50 | TYPE_BOOL = 8; 51 | TYPE_STRING = 9; 52 | TYPE_GROUP = 10; 53 | TYPE_MESSAGE = 11; 54 | TYPE_BYTES = 12; 55 | TYPE_UINT32 = 13; 56 | TYPE_ENUM = 14; 57 | TYPE_SFIXED32 = 15; 58 | TYPE_SFIXED64 = 16; 59 | TYPE_SINT32 = 17; 60 | TYPE_SINT64 = 18; 61 | } 62 | 63 | enum Label { 64 | LABEL_OPTIONAL = 1; 65 | LABEL_REQUIRED = 2; 66 | LABEL_REPEATED = 3; 67 | } 68 | 69 | optional string name = 1; 70 | optional int32 number = 3; 71 | optional .google.protobuf.FieldDescriptorProto.Label label = 4 [default = LABEL_OPTIONAL]; 72 | optional .google.protobuf.FieldDescriptorProto.Type type = 5 [default = TYPE_DOUBLE]; 73 | optional string type_name = 6; 74 | optional string extendee = 2; 75 | optional string default_value = 7; 76 | optional int32 oneof_index = 9; 77 | optional .google.protobuf.FieldOptions options = 8; 78 | } 79 | 80 | message OneofDescriptorProto { 81 | optional string name = 1; 82 | } 83 | 84 | message EnumDescriptorProto { 85 | optional string name = 1; 86 | repeated .google.protobuf.EnumValueDescriptorProto value = 2; 87 | optional .google.protobuf.EnumOptions options = 3; 88 | } 89 | 90 | message EnumValueDescriptorProto { 91 | optional string name = 1; 92 | optional int32 number = 2; 93 | optional .google.protobuf.EnumValueOptions options = 3; 94 | } 95 | 96 | message ServiceDescriptorProto { 97 | optional string name = 1; 98 | repeated .google.protobuf.MethodDescriptorProto method = 2; 99 | optional .google.protobuf.ServiceOptions options = 3; 100 | } 101 | 102 | message MethodDescriptorProto { 103 | optional string name = 1; 104 | optional string input_type = 2; 105 | optional string output_type = 3; 106 | optional .google.protobuf.MethodOptions options = 4; 107 | } 108 | 109 | message FileOptions { 110 | enum OptimizeMode { 111 | SPEED = 1; 112 | CODE_SIZE = 2; 113 | LITE_RUNTIME = 3; 114 | } 115 | 116 | optional string java_package = 1; 117 | optional string java_outer_classname = 8; 118 | optional bool java_multiple_files = 10 [default = false]; 119 | optional bool java_generate_equals_and_hash = 20 [default = false]; 120 | optional bool java_string_check_utf8 = 27 [default = false]; 121 | optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; 122 | optional string go_package = 11; 123 | optional bool cc_generic_services = 16 [default = false]; 124 | optional bool java_generic_services = 17 [default = false]; 125 | optional bool py_generic_services = 18 [default = false]; 126 | optional bool deprecated = 23 [default = false]; 127 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 128 | 129 | extensions 1000 to max; 130 | } 131 | 132 | message MessageOptions { 133 | optional bool message_set_wire_format = 1 [default = false]; 134 | optional bool no_standard_descriptor_accessor = 2 [default = false]; 135 | optional bool deprecated = 3 [default = false]; 136 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 137 | 138 | extensions 1000 to max; 139 | } 140 | 141 | message FieldOptions { 142 | enum CType { 143 | STRING = 0; 144 | CORD = 1; 145 | STRING_PIECE = 2; 146 | } 147 | 148 | optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; 149 | optional bool packed = 2; 150 | optional bool lazy = 5 [default = false]; 151 | optional bool deprecated = 3 [default = false]; 152 | optional string experimental_map_key = 9; 153 | optional bool weak = 10 [default = false]; 154 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 155 | 156 | extensions 1000 to max; 157 | } 158 | 159 | message EnumOptions { 160 | optional bool allow_alias = 2; 161 | optional bool deprecated = 3 [default = false]; 162 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 163 | 164 | extensions 1000 to max; 165 | } 166 | 167 | message EnumValueOptions { 168 | optional bool deprecated = 1 [default = false]; 169 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 170 | 171 | extensions 1000 to max; 172 | } 173 | 174 | message ServiceOptions { 175 | optional bool deprecated = 33 [default = false]; 176 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 177 | 178 | extensions 1000 to max; 179 | } 180 | 181 | message MethodOptions { 182 | optional bool deprecated = 33 [default = false]; 183 | repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; 184 | 185 | extensions 1000 to max; 186 | } 187 | 188 | message UninterpretedOption { 189 | message NamePart { 190 | required string name_part = 1; 191 | required bool is_extension = 2; 192 | } 193 | 194 | repeated .google.protobuf.UninterpretedOption.NamePart name = 2; 195 | optional string identifier_value = 3; 196 | optional uint64 positive_int_value = 4; 197 | optional int64 negative_int_value = 5; 198 | optional double double_value = 6; 199 | optional bytes string_value = 7; 200 | optional string aggregate_value = 8; 201 | } 202 | 203 | message SourceCodeInfo { 204 | message Location { 205 | repeated int32 path = 1 [packed = true]; 206 | repeated int32 span = 2 [packed = true]; 207 | optional string leading_comments = 3; 208 | optional string trailing_comments = 4; 209 | } 210 | 211 | repeated .google.protobuf.SourceCodeInfo.Location location = 1; 212 | } 213 | 214 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_gcmessages_client_guild.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | message CMsgDOTAGuildSDO { 5 | message Member { 6 | optional uint32 account_id = 1; 7 | optional uint32 time_joined = 2; 8 | optional uint32 role = 3; 9 | } 10 | 11 | message Invitation { 12 | optional uint32 account_id = 1; 13 | optional uint32 time_sent = 2; 14 | optional uint32 account_id_sender = 3; 15 | } 16 | 17 | optional uint32 guild_id = 1; 18 | optional string name = 2; 19 | optional string tag = 3; 20 | optional uint32 time_created = 4; 21 | optional uint32 time_disbanded = 5; 22 | optional uint64 logo = 6; 23 | optional uint64 base_logo = 7; 24 | optional uint64 banner_logo = 8; 25 | repeated .CMsgDOTAGuildSDO.Member members = 9; 26 | repeated .CMsgDOTAGuildSDO.Invitation invitations = 10; 27 | optional string message = 11; 28 | optional bool incremental = 12; 29 | } 30 | 31 | message CMsgDOTAGuildAuditSDO { 32 | message Entry { 33 | optional uint32 event_index = 1; 34 | optional uint32 timestamp = 2; 35 | optional uint32 action = 3; 36 | optional uint32 account_id_requestor = 4; 37 | optional uint32 account_id_target = 5; 38 | optional uint32 reference_data_a = 6; 39 | optional uint32 reference_data_b = 7; 40 | } 41 | 42 | optional uint32 guild_id = 1; 43 | repeated .CMsgDOTAGuildAuditSDO.Entry entries = 2; 44 | } 45 | 46 | message CMsgDOTAAccountGuildMembershipsSDO { 47 | message Membership { 48 | optional uint32 guild_id = 1; 49 | optional uint32 role = 2; 50 | } 51 | 52 | message Invitation { 53 | optional uint32 guild_id = 1; 54 | optional uint32 time_sent = 2; 55 | optional uint32 account_id_sender = 3; 56 | } 57 | 58 | optional uint32 account_id = 1; 59 | repeated .CMsgDOTAAccountGuildMembershipsSDO.Membership memberships = 2; 60 | repeated .CMsgDOTAAccountGuildMembershipsSDO.Invitation invitations = 3; 61 | } 62 | 63 | message CMsgDOTAGuildCreateRequest { 64 | optional string name = 1; 65 | optional string tag = 2; 66 | optional uint64 logo = 3; 67 | optional uint64 base_logo = 4; 68 | optional uint64 banner_logo = 5; 69 | } 70 | 71 | message CMsgDOTAGuildCreateResponse { 72 | enum EError { 73 | UNSPECIFIED = 0; 74 | NAME_EMPTY = 1; 75 | NAME_BAD_CHARACTERS = 2; 76 | NAME_TOO_LONG = 3; 77 | NAME_TAKEN = 4; 78 | TAG_EMPTY = 5; 79 | TAG_BAD_CHARACTERS = 6; 80 | TAG_TOO_LONG = 7; 81 | ACCOUNT_TOO_MANY_GUILDS = 8; 82 | LOGO_UPLOAD_FAILED = 9; 83 | } 84 | 85 | optional uint32 guild_id = 1; 86 | repeated .CMsgDOTAGuildCreateResponse.EError errors = 2; 87 | } 88 | 89 | message CMsgDOTAGuildSetAccountRoleRequest { 90 | optional uint32 guild_id = 1; 91 | optional uint32 target_account_id = 2; 92 | optional uint32 target_role = 3; 93 | } 94 | 95 | message CMsgDOTAGuildSetAccountRoleResponse { 96 | enum EResult { 97 | SUCCESS = 0; 98 | ERROR_UNSPECIFIED = 1; 99 | ERROR_NO_PERMISSION = 2; 100 | ERROR_NO_OTHER_LEADER = 3; 101 | ERROR_ACCOUNT_TOO_MANY_GUILDS = 4; 102 | ERROR_GUILD_TOO_MANY_MEMBERS = 5; 103 | } 104 | 105 | optional .CMsgDOTAGuildSetAccountRoleResponse.EResult result = 1 [default = SUCCESS]; 106 | } 107 | 108 | message CMsgDOTAGuildInviteAccountRequest { 109 | optional uint32 guild_id = 1; 110 | optional uint32 target_account_id = 2; 111 | } 112 | 113 | message CMsgDOTAGuildInviteAccountResponse { 114 | enum EResult { 115 | SUCCESS = 0; 116 | ERROR_UNSPECIFIED = 1; 117 | ERROR_NO_PERMISSION = 2; 118 | ERROR_ACCOUNT_ALREADY_INVITED = 3; 119 | ERROR_ACCOUNT_ALREADY_IN_GUILD = 4; 120 | ERROR_ACCOUNT_TOO_MANY_INVITES = 5; 121 | ERROR_GUILD_TOO_MANY_INVITES = 6; 122 | ERROR_ACCOUNT_TOO_MANY_GUILDS = 7; 123 | } 124 | 125 | optional .CMsgDOTAGuildInviteAccountResponse.EResult result = 1 [default = SUCCESS]; 126 | } 127 | 128 | message CMsgDOTAGuildCancelInviteRequest { 129 | optional uint32 guild_id = 1; 130 | optional uint32 target_account_id = 2; 131 | } 132 | 133 | message CMsgDOTAGuildCancelInviteResponse { 134 | enum EResult { 135 | SUCCESS = 0; 136 | ERROR_UNSPECIFIED = 1; 137 | ERROR_NO_PERMISSION = 2; 138 | } 139 | 140 | optional .CMsgDOTAGuildCancelInviteResponse.EResult result = 1 [default = SUCCESS]; 141 | } 142 | 143 | message CMsgDOTAGuildUpdateDetailsRequest { 144 | optional uint32 guild_id = 1; 145 | optional uint64 logo = 2; 146 | optional uint64 base_logo = 3; 147 | optional uint64 banner_logo = 4; 148 | } 149 | 150 | message CMsgDOTAGuildUpdateDetailsResponse { 151 | enum EResult { 152 | SUCCESS = 0; 153 | ERROR_UNSPECIFIED = 1; 154 | ERROR_NO_PERMISSION = 2; 155 | } 156 | 157 | optional .CMsgDOTAGuildUpdateDetailsResponse.EResult result = 1 [default = SUCCESS]; 158 | } 159 | 160 | message CMsgDOTAGCToGCUpdateOpenGuildPartyRequest { 161 | optional uint64 party_id = 1; 162 | optional uint32 guild_id = 2; 163 | repeated uint32 member_account_ids = 3; 164 | optional string description = 4; 165 | } 166 | 167 | message CMsgDOTAGCToGCUpdateOpenGuildPartyResponse { 168 | optional bool maintain_association = 1; 169 | } 170 | 171 | message CMsgDOTAGCToGCDestroyOpenGuildPartyRequest { 172 | optional uint64 party_id = 1; 173 | optional uint32 guild_id = 2; 174 | } 175 | 176 | message CMsgDOTAGCToGCDestroyOpenGuildPartyResponse { 177 | } 178 | 179 | message CMsgDOTAPartySetOpenGuildRequest { 180 | optional uint32 guild_id = 1; 181 | optional string description = 2; 182 | } 183 | 184 | message CMsgDOTAPartySetOpenGuildResponse { 185 | enum EResult { 186 | SUCCESS = 0; 187 | ERROR_UNSPECIFIED = 1; 188 | } 189 | 190 | optional .CMsgDOTAPartySetOpenGuildResponse.EResult result = 1 [default = SUCCESS]; 191 | } 192 | 193 | message CMsgDOTAJoinOpenGuildPartyRequest { 194 | optional uint64 party_id = 1; 195 | } 196 | 197 | message CMsgDOTAJoinOpenGuildPartyResponse { 198 | enum EResult { 199 | SUCCESS = 0; 200 | ERROR_UNSPECIFIED = 1; 201 | } 202 | 203 | optional .CMsgDOTAJoinOpenGuildPartyResponse.EResult result = 1 [default = SUCCESS]; 204 | } 205 | 206 | message CMsgDOTAGuildOpenPartyRefresh { 207 | message OpenParty { 208 | optional uint64 party_id = 1; 209 | repeated uint32 member_account_ids = 2; 210 | optional uint32 time_created = 3; 211 | optional string description = 4; 212 | } 213 | 214 | optional uint32 guild_id = 1; 215 | repeated .CMsgDOTAGuildOpenPartyRefresh.OpenParty open_parties = 2; 216 | } 217 | 218 | message CMsgDOTARequestGuildData { 219 | } 220 | 221 | message CMsgDOTAGuildInviteData { 222 | optional bool invited_to_guild = 1; 223 | optional uint32 guild_id = 2; 224 | optional string guild_name = 3; 225 | optional string guild_tag = 4; 226 | optional uint64 logo = 5; 227 | optional uint32 inviter = 6; 228 | optional string inviter_name = 7; 229 | optional uint32 member_count = 8; 230 | } 231 | 232 | message CMsgDOTAGuildUpdateMessage { 233 | optional string message = 1; 234 | optional uint32 guild_id = 2; 235 | } 236 | 237 | message CMsgDOTAGuildEditLogoRequest { 238 | optional uint32 guild_id = 1; 239 | optional uint64 logo = 2; 240 | } 241 | 242 | message CMsgDOTAGuildEditLogoResponse { 243 | enum EResult { 244 | SUCCESS = 0; 245 | NO_PERMISSION = 1; 246 | LOGO_UPLOAD_FAILED = 2; 247 | UNSPECIFIED_ERROR = 3; 248 | } 249 | 250 | optional uint32 guild_id = 1; 251 | optional .CMsgDOTAGuildEditLogoResponse.EResult result = 2 [default = SUCCESS]; 252 | } 253 | 254 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/te.proto: -------------------------------------------------------------------------------- 1 | import "networkbasetypes.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum ETEProtobufIds { 7 | TE_EffectDispatchId = 400; 8 | TE_ArmorRicochetId = 401; 9 | TE_BeamEntPointId = 402; 10 | TE_BeamEntsId = 403; 11 | TE_BeamPointsId = 404; 12 | TE_BeamRingId = 405; 13 | TE_BreakModelId = 406; 14 | TE_BSPDecalId = 407; 15 | TE_BubblesId = 408; 16 | TE_BubbleTrailId = 409; 17 | TE_DecalId = 410; 18 | TE_WorldDecalId = 411; 19 | TE_EnergySplashId = 412; 20 | TE_FizzId = 413; 21 | TE_ShatterSurfaceId = 414; 22 | TE_GlowSpriteId = 415; 23 | TE_ImpactId = 416; 24 | TE_MuzzleFlashId = 417; 25 | TE_BloodStreamId = 418; 26 | TE_ExplosionId = 419; 27 | TE_DustId = 420; 28 | TE_LargeFunnelId = 421; 29 | TE_SparksId = 422; 30 | TE_PhysicsPropId = 423; 31 | TE_PlayerDecalId = 424; 32 | TE_ProjectedDecalId = 425; 33 | TE_SmokeId = 426; 34 | } 35 | 36 | message CMsgTEArmorRicochet { 37 | optional .CMsgVector pos = 1; 38 | optional .CMsgVector dir = 2; 39 | } 40 | 41 | message CMsgTEBaseBeam { 42 | optional fixed64 modelindex = 1; 43 | optional fixed64 haloindex = 2; 44 | optional uint32 startframe = 3; 45 | optional uint32 framerate = 4; 46 | optional float life = 5; 47 | optional float width = 6; 48 | optional float endwidth = 7; 49 | optional uint32 fadelength = 8; 50 | optional float amplitude = 9; 51 | optional fixed32 color = 10; 52 | optional uint32 speed = 11; 53 | optional uint32 flags = 12; 54 | } 55 | 56 | message CMsgTEBeamEntPoint { 57 | optional .CMsgTEBaseBeam base = 1; 58 | optional uint32 startentity = 2; 59 | optional uint32 endentity = 3; 60 | optional .CMsgVector start = 4; 61 | optional .CMsgVector end = 5; 62 | } 63 | 64 | message CMsgTEBeamEnts { 65 | optional .CMsgTEBaseBeam base = 1; 66 | optional uint32 startentity = 2; 67 | optional uint32 endentity = 3; 68 | } 69 | 70 | message CMsgTEBeamPoints { 71 | optional .CMsgTEBaseBeam base = 1; 72 | optional .CMsgVector start = 2; 73 | optional .CMsgVector end = 3; 74 | } 75 | 76 | message CMsgTEBeamRing { 77 | optional .CMsgTEBaseBeam base = 1; 78 | optional uint32 startentity = 2; 79 | optional uint32 endentity = 3; 80 | } 81 | 82 | message CMsgTEBreakModel { 83 | optional .CMsgVector origin = 1; 84 | optional .CMsgQAngle angles = 2; 85 | optional .CMsgVector size = 3; 86 | optional .CMsgVector velocity = 4; 87 | optional uint32 randomization = 5; 88 | optional fixed64 modelindex = 6; 89 | optional uint32 count = 7; 90 | optional float time = 8; 91 | optional uint32 flags = 9; 92 | } 93 | 94 | message CMsgTEBSPDecal { 95 | optional .CMsgVector origin = 1; 96 | optional .CMsgVector normal = 2; 97 | optional .CMsgVector saxis = 3; 98 | optional uint32 entity = 4; 99 | optional uint32 index = 5; 100 | } 101 | 102 | message CMsgTEBubbles { 103 | optional .CMsgVector mins = 1; 104 | optional .CMsgVector maxs = 2; 105 | optional float height = 3; 106 | optional uint32 count = 4; 107 | optional float speed = 5; 108 | } 109 | 110 | message CMsgTEBubbleTrail { 111 | optional .CMsgVector mins = 1; 112 | optional .CMsgVector maxs = 2; 113 | optional float waterz = 3; 114 | optional uint32 count = 4; 115 | optional float speed = 5; 116 | } 117 | 118 | message CMsgTEDecal { 119 | optional .CMsgVector origin = 1; 120 | optional .CMsgVector start = 2; 121 | optional uint32 entity = 3; 122 | optional uint32 hitbox = 4; 123 | optional uint32 index = 5; 124 | } 125 | 126 | message CMsgEffectData { 127 | optional .CMsgVector origin = 1; 128 | optional .CMsgVector start = 2; 129 | optional .CMsgVector normal = 3; 130 | optional .CMsgQAngle angles = 4; 131 | optional fixed32 entity = 5; 132 | optional fixed32 otherentity = 6; 133 | optional float scale = 7; 134 | optional float magnitude = 8; 135 | optional float radius = 9; 136 | optional fixed32 surfaceprop = 10; 137 | optional fixed64 effectindex = 11; 138 | optional uint32 damagetype = 12; 139 | optional uint32 material = 13; 140 | optional uint32 hitbox = 14; 141 | optional uint32 color = 15; 142 | optional uint32 flags = 16; 143 | optional int32 attachmentindex = 17; 144 | optional uint32 effectname = 18; 145 | optional uint32 attachmentname = 19; 146 | } 147 | 148 | message CMsgTEEffectDispatch { 149 | optional .CMsgEffectData effectdata = 1; 150 | } 151 | 152 | message CMsgTEEnergySplash { 153 | optional .CMsgVector pos = 1; 154 | optional .CMsgVector dir = 2; 155 | optional bool explosive = 3; 156 | } 157 | 158 | message CMsgTEFizz { 159 | optional uint32 entity = 1; 160 | optional uint32 density = 2; 161 | optional int32 current = 3; 162 | } 163 | 164 | message CMsgTEShatterSurface { 165 | optional .CMsgVector origin = 1; 166 | optional .CMsgQAngle angles = 2; 167 | optional .CMsgVector force = 3; 168 | optional .CMsgVector forcepos = 4; 169 | optional float width = 5; 170 | optional float height = 6; 171 | optional float shardsize = 7; 172 | optional uint32 surfacetype = 8; 173 | optional fixed32 frontcolor = 9; 174 | optional fixed32 backcolor = 10; 175 | } 176 | 177 | message CMsgTEGlowSprite { 178 | optional .CMsgVector origin = 1; 179 | optional float scale = 2; 180 | optional float life = 3; 181 | optional uint32 brightness = 4; 182 | } 183 | 184 | message CMsgTEImpact { 185 | optional .CMsgVector origin = 1; 186 | optional .CMsgVector normal = 2; 187 | optional uint32 type = 3; 188 | } 189 | 190 | message CMsgTEMuzzleFlash { 191 | optional .CMsgVector origin = 1; 192 | optional .CMsgQAngle angles = 2; 193 | optional float scale = 3; 194 | optional uint32 type = 4; 195 | } 196 | 197 | message CMsgTEBloodStream { 198 | optional .CMsgVector origin = 1; 199 | optional .CMsgVector direction = 2; 200 | optional fixed32 color = 3; 201 | optional uint32 amount = 4; 202 | } 203 | 204 | message CMsgTEExplosion { 205 | optional .CMsgVector origin = 1; 206 | optional uint32 framerate = 2; 207 | optional uint32 flags = 3; 208 | optional .CMsgVector normal = 4; 209 | optional uint32 materialtype = 5; 210 | optional uint32 radius = 6; 211 | optional uint32 magnitude = 7; 212 | optional float scale = 8; 213 | optional bool affect_ragdolls = 9; 214 | } 215 | 216 | message CMsgTEDust { 217 | optional .CMsgVector origin = 1; 218 | optional float size = 2; 219 | optional float speed = 3; 220 | optional .CMsgVector direction = 4; 221 | } 222 | 223 | message CMsgTELargeFunnel { 224 | optional .CMsgVector origin = 1; 225 | optional uint32 reversed = 2; 226 | } 227 | 228 | message CMsgTESparks { 229 | optional .CMsgVector origin = 1; 230 | optional uint32 magnitude = 2; 231 | optional uint32 length = 3; 232 | optional .CMsgVector direction = 4; 233 | } 234 | 235 | message CMsgTEPhysicsProp { 236 | optional .CMsgVector origin = 1; 237 | optional .CMsgVector velocity = 2; 238 | optional .CMsgQAngle angles = 3; 239 | optional fixed32 skin = 4; 240 | optional uint32 flags = 5; 241 | optional uint32 effects = 6; 242 | optional fixed32 color = 7; 243 | optional fixed64 modelindex = 8; 244 | optional uint32 breakmodelsnottomake = 9; 245 | optional float scale = 10; 246 | } 247 | 248 | message CMsgTEPlayerDecal { 249 | optional .CMsgVector origin = 1; 250 | optional uint32 player = 2; 251 | optional uint32 entity = 3; 252 | } 253 | 254 | message CMsgTEProjectedDecal { 255 | optional .CMsgVector origin = 1; 256 | optional .CMsgQAngle angles = 2; 257 | optional uint32 index = 3; 258 | optional float distance = 4; 259 | } 260 | 261 | message CMsgTESmoke { 262 | optional .CMsgVector origin = 1; 263 | optional float scale = 2; 264 | } 265 | 266 | message CMsgTEWorldDecal { 267 | optional .CMsgVector origin = 1; 268 | optional .CMsgVector normal = 2; 269 | optional uint32 index = 3; 270 | } 271 | 272 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_gcmessages_client_chat.proto: -------------------------------------------------------------------------------- 1 | import "dota_shared_enums.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | message CMsgClientToGCPrivateChatInvite { 7 | optional string private_chat_channel_name = 1; 8 | optional uint32 invited_account_id = 2; 9 | } 10 | 11 | message CMsgClientToGCPrivateChatKick { 12 | optional string private_chat_channel_name = 1; 13 | optional uint32 kick_account_id = 2; 14 | } 15 | 16 | message CMsgClientToGCPrivateChatPromote { 17 | optional string private_chat_channel_name = 1; 18 | optional uint32 promote_account_id = 2; 19 | } 20 | 21 | message CMsgClientToGCPrivateChatDemote { 22 | optional string private_chat_channel_name = 1; 23 | optional uint32 demote_account_id = 2; 24 | } 25 | 26 | message CMsgGCToClientPrivateChatResponse { 27 | enum Result { 28 | SUCCESS = 0; 29 | FAILURE_CREATION_LOCK = 1; 30 | FAILURE_SQL_TRANSACTION = 2; 31 | FAILURE_SDO_LOAD = 3; 32 | FAILURE_NO_PERMISSION = 4; 33 | FAILURE_ALREADY_MEMBER = 5; 34 | FAILURE_NOT_A_MEMBER = 7; 35 | FAILURE_NO_REMAINING_ADMINS = 8; 36 | FAILURE_NO_ROOM = 9; 37 | FAILURE_CREATION_RATE_LIMITED = 10; 38 | FAILURE_UNKNOWN_CHANNEL_NAME = 11; 39 | FAILURE_UNKNOWN_USER = 12; 40 | FAILURE_UNKNOWN_ERROR = 13; 41 | FAILURE_CANNOT_KICK_ADMIN = 14; 42 | FAILURE_ALREADY_ADMIN = 15; 43 | } 44 | 45 | optional string private_chat_channel_name = 1; 46 | optional .CMsgGCToClientPrivateChatResponse.Result result = 2 [default = SUCCESS]; 47 | optional string username = 3; 48 | } 49 | 50 | message CMsgClientToGCPrivateChatInfoRequest { 51 | optional string private_chat_channel_name = 1; 52 | } 53 | 54 | message CMsgGCToClientPrivateChatInfoResponse { 55 | message Member { 56 | optional uint32 account_id = 1; 57 | optional string name = 2; 58 | optional uint32 status = 3; 59 | } 60 | 61 | optional string private_chat_channel_name = 1; 62 | repeated .CMsgGCToClientPrivateChatInfoResponse.Member members = 2; 63 | optional uint32 creator = 3; 64 | optional uint32 creation_date = 4; 65 | } 66 | 67 | message CMsgDOTAJoinChatChannel { 68 | optional string channel_name = 2; 69 | optional .DOTAChatChannelType_t channel_type = 4 [default = DOTAChannelType_Regional]; 70 | } 71 | 72 | message CMsgDOTALeaveChatChannel { 73 | optional uint64 channel_id = 1; 74 | } 75 | 76 | message CMsgGCChatReportPublicSpam { 77 | optional uint64 channel_id = 1; 78 | optional uint32 channel_user_id = 2; 79 | } 80 | 81 | message CMsgDOTAClientIgnoredUser { 82 | optional uint32 ignored_account_id = 1; 83 | } 84 | 85 | message CMsgDOTAChatMessage { 86 | message DiceRoll { 87 | optional int32 roll_min = 1; 88 | optional int32 roll_max = 2; 89 | optional int32 result = 3; 90 | } 91 | 92 | message TriviaAnswered { 93 | optional uint32 question_id = 1; 94 | optional uint32 answer_index = 2; 95 | optional uint32 party_questions_correct = 3; 96 | optional uint32 party_questions_viewed = 4; 97 | optional uint32 party_trivia_points = 5; 98 | } 99 | 100 | optional uint32 account_id = 1; 101 | optional uint64 channel_id = 2; 102 | optional string persona_name = 3; 103 | optional string text = 4; 104 | optional uint32 timestamp = 5; 105 | optional uint32 suggest_invite_account_id = 6; 106 | optional string suggest_invite_name = 7; 107 | optional uint32 fantasy_draft_owner_account_id = 8; 108 | optional uint32 fantasy_draft_player_account_id = 9; 109 | optional uint32 event_id = 10; 110 | optional bool suggest_invite_to_lobby = 11; 111 | optional uint32 event_points = 12; 112 | optional bool coin_flip = 13; 113 | optional int32 player_id = 14 [default = -1]; 114 | optional uint32 share_profile_account_id = 15; 115 | optional uint32 channel_user_id = 16; 116 | optional .CMsgDOTAChatMessage.DiceRoll dice_roll = 17; 117 | optional uint64 share_party_id = 18; 118 | optional uint64 share_lobby_id = 19; 119 | optional uint64 share_lobby_custom_game_id = 20; 120 | optional string share_lobby_passkey = 21; 121 | optional uint32 private_chat_channel_id = 22; 122 | optional uint32 status = 23; 123 | optional bool legacy_battle_cup_victory = 24; 124 | optional uint32 battle_cup_streak = 29; 125 | optional uint32 badge_level = 25; 126 | optional uint32 suggest_pick_hero_id = 26; 127 | optional string suggest_pick_hero_role = 27; 128 | optional uint32 suggest_ban_hero_id = 30; 129 | optional bool terse = 28; 130 | optional bool ignore_muted = 31; 131 | optional .CMsgDOTAChatMessage.TriviaAnswered trivia_answer = 32; 132 | } 133 | 134 | message CMsgDOTAChatMember { 135 | optional fixed64 steam_id = 1; 136 | optional string persona_name = 2; 137 | optional uint32 channel_user_id = 3; 138 | optional uint32 status = 4; 139 | } 140 | 141 | message CMsgDOTAJoinChatChannelResponse { 142 | enum Result { 143 | JOIN_SUCCESS = 0; 144 | INVALID_CHANNEL_TYPE = 1; 145 | ACCOUNT_NOT_FOUND = 2; 146 | ACH_FAILED = 3; 147 | USER_IN_TOO_MANY_CHANNELS = 4; 148 | RATE_LIMIT_EXCEEDED = 5; 149 | CHANNEL_FULL = 6; 150 | CHANNEL_FULL_OVERFLOWED = 7; 151 | FAILED_TO_ADD_USER = 8; 152 | CHANNEL_TYPE_DISABLED = 9; 153 | PRIVATE_CHAT_CREATE_FAILED = 10; 154 | PRIVATE_CHAT_NO_PERMISSION = 11; 155 | PRIVATE_CHAT_CREATE_LOCK_FAILED = 12; 156 | PRIVATE_CHAT_KICKED = 13; 157 | } 158 | 159 | optional uint32 response = 1; 160 | optional string channel_name = 2; 161 | optional fixed64 channel_id = 3; 162 | optional uint32 max_members = 4; 163 | repeated .CMsgDOTAChatMember members = 5; 164 | optional .DOTAChatChannelType_t channel_type = 6 [default = DOTAChannelType_Regional]; 165 | optional .CMsgDOTAJoinChatChannelResponse.Result result = 7 [default = JOIN_SUCCESS]; 166 | optional bool gc_initiated_join = 8; 167 | optional uint32 channel_user_id = 9; 168 | optional string welcome_message = 10; 169 | } 170 | 171 | message CMsgDOTAChatChannelFullUpdate { 172 | optional fixed64 channel_id = 1; 173 | repeated .CMsgDOTAChatMember members = 2; 174 | } 175 | 176 | message CMsgDOTAOtherJoinedChatChannel { 177 | optional fixed64 channel_id = 1; 178 | optional string persona_name = 2; 179 | optional fixed64 steam_id = 3; 180 | optional uint32 channel_user_id = 4; 181 | optional uint32 status = 5; 182 | } 183 | 184 | message CMsgDOTAOtherLeftChatChannel { 185 | optional fixed64 channel_id = 1; 186 | optional fixed64 steam_id = 2; 187 | optional uint32 channel_user_id = 3; 188 | } 189 | 190 | message CMsgDOTAChatChannelMemberUpdate { 191 | message JoinedMember { 192 | optional fixed64 steam_id = 1; 193 | optional string persona_name = 2; 194 | optional uint32 channel_user_id = 3; 195 | optional uint32 status = 4; 196 | } 197 | 198 | optional fixed64 channel_id = 1; 199 | repeated fixed64 left_steam_ids = 2; 200 | repeated .CMsgDOTAChatChannelMemberUpdate.JoinedMember joined_members = 3; 201 | } 202 | 203 | message CMsgDOTARequestChatChannelList { 204 | } 205 | 206 | message CMsgDOTARequestChatChannelListResponse { 207 | message ChatChannel { 208 | optional string channel_name = 1; 209 | optional uint32 num_members = 2; 210 | optional .DOTAChatChannelType_t channel_type = 3 [default = DOTAChannelType_Regional]; 211 | } 212 | 213 | repeated .CMsgDOTARequestChatChannelListResponse.ChatChannel channels = 1; 214 | } 215 | 216 | message CMsgDOTAChatGetUserList { 217 | optional fixed64 channel_id = 1; 218 | } 219 | 220 | message CMsgDOTAChatGetUserListResponse { 221 | message Member { 222 | optional fixed64 steam_id = 1; 223 | optional string persona_name = 2; 224 | optional uint32 channel_user_id = 3; 225 | optional uint32 status = 4; 226 | } 227 | 228 | optional fixed64 channel_id = 1; 229 | repeated .CMsgDOTAChatGetUserListResponse.Member members = 2; 230 | } 231 | 232 | message CMsgDOTAChatGetMemberCount { 233 | optional string channel_name = 1; 234 | optional .DOTAChatChannelType_t channel_type = 2 [default = DOTAChannelType_Regional]; 235 | } 236 | 237 | message CMsgDOTAChatGetMemberCountResponse { 238 | optional string channel_name = 1; 239 | optional .DOTAChatChannelType_t channel_type = 2 [default = DOTAChannelType_Regional]; 240 | optional uint32 member_count = 3; 241 | } 242 | 243 | message CMsgDOTAChatRegionsEnabled { 244 | message Region { 245 | optional float min_latitude = 1; 246 | optional float max_latitude = 2; 247 | optional float min_longitude = 3; 248 | optional float max_longitude = 4; 249 | } 250 | 251 | optional bool enable_all_regions = 1; 252 | repeated .CMsgDOTAChatRegionsEnabled.Region enabled_regions = 2; 253 | } 254 | 255 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_gcmessages_client_team.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum ETeamInviteResult { 5 | TEAM_INVITE_SUCCESS = 0; 6 | TEAM_INVITE_FAILURE_INVITE_REJECTED = 1; 7 | TEAM_INVITE_FAILURE_INVITE_TIMEOUT = 2; 8 | TEAM_INVITE_ERROR_TEAM_AT_MEMBER_LIMIT = 3; 9 | TEAM_INVITE_ERROR_TEAM_LOCKED = 4; 10 | TEAM_INVITE_ERROR_INVITEE_NOT_AVAILABLE = 5; 11 | TEAM_INVITE_ERROR_INVITEE_BUSY = 6; 12 | TEAM_INVITE_ERROR_INVITEE_ALREADY_MEMBER = 7; 13 | TEAM_INVITE_ERROR_INVITEE_AT_TEAM_LIMIT = 8; 14 | TEAM_INVITE_ERROR_INVITEE_INSUFFICIENT_LEVEL = 9; 15 | TEAM_INVITE_ERROR_INVITER_INVALID_ACCOUNT_TYPE = 10; 16 | TEAM_INVITE_ERROR_INVITER_NOT_ADMIN = 11; 17 | TEAM_INVITE_ERROR_INCORRECT_USER_RESPONDED = 12; 18 | TEAM_INVITE_ERROR_UNSPECIFIED = 13; 19 | } 20 | 21 | message CMsgDOTATeamMemberSDO { 22 | optional uint32 account_id = 1; 23 | repeated uint32 team_ids = 2; 24 | optional uint32 profile_team_id = 3; 25 | } 26 | 27 | message CMsgDOTATeamAdminSDO { 28 | optional uint32 account_id = 1; 29 | repeated uint32 team_ids = 2; 30 | } 31 | 32 | message CMsgDOTATeamMember { 33 | optional uint32 account_id = 1; 34 | optional uint32 time_joined = 4; 35 | } 36 | 37 | message CMsgDOTATeam { 38 | repeated .CMsgDOTATeamMember members = 1; 39 | optional uint32 team_id = 2; 40 | optional string name = 3; 41 | optional string tag = 4; 42 | optional uint32 admin_id = 5; 43 | optional uint32 time_created = 6; 44 | optional bool disbanded = 7; 45 | optional uint32 wins = 8; 46 | optional uint32 losses = 9; 47 | optional uint32 rank = 10; 48 | optional uint32 calibration_games_remaining = 24; 49 | optional uint64 logo = 11; 50 | optional uint64 base_logo = 12; 51 | optional uint64 banner_logo = 13; 52 | optional uint64 sponsor_logo = 14; 53 | optional string country_code = 15; 54 | optional string url = 16; 55 | optional uint32 fullgamesplayed = 17; 56 | repeated uint32 leagues = 18; 57 | optional uint32 gamesplayed = 19; 58 | optional uint32 gamesplayedwithcurrentroster = 20; 59 | optional uint32 teammatchmakinggamesplayed = 21; 60 | optional uint32 lastplayedgametime = 22; 61 | optional uint32 lastrenametime = 23; 62 | repeated uint64 recent_match_ids = 25; 63 | repeated uint64 top_match_ids = 26; 64 | optional bool pickup_team = 27; 65 | } 66 | 67 | message CMsgDOTATeamInfo { 68 | message Member { 69 | optional uint32 account_id = 1; 70 | optional uint32 time_joined = 2; 71 | optional bool admin = 3; 72 | optional bool sub = 4; 73 | } 74 | 75 | repeated .CMsgDOTATeamInfo.Member members = 1; 76 | optional uint32 team_id = 2; 77 | optional string name = 3; 78 | optional string tag = 4; 79 | optional uint32 time_created = 5; 80 | optional bool pro = 6; 81 | optional bool locked = 7; 82 | optional bool pickup_team = 8; 83 | optional uint64 ugc_logo = 9; 84 | optional uint64 ugc_base_logo = 10; 85 | optional uint64 ugc_banner_logo = 11; 86 | optional uint64 ugc_sponsor_logo = 12; 87 | optional string country_code = 13; 88 | optional string url = 14; 89 | optional uint32 wins = 15; 90 | optional uint32 losses = 16; 91 | optional uint32 rank = 17; 92 | optional uint32 calibration_games_remaining = 18; 93 | optional uint32 games_played_total = 19; 94 | optional uint32 games_played_matchmaking = 20; 95 | repeated uint32 leagues_participated = 21; 96 | repeated uint64 top_match_ids = 22; 97 | repeated uint64 recent_match_ids = 23; 98 | } 99 | 100 | message CMsgDOTATeamsInfo { 101 | optional uint32 league_id = 1; 102 | repeated .CMsgDOTATeamInfo teams = 2; 103 | } 104 | 105 | message CMsgDOTAMyTeamInfoRequest { 106 | } 107 | 108 | message CMsgDOTACreateTeam { 109 | optional string name = 1; 110 | optional string tag = 2; 111 | optional uint64 logo = 3; 112 | optional uint64 base_logo = 4; 113 | optional uint64 banner_logo = 5; 114 | optional uint64 sponsor_logo = 6; 115 | optional string country_code = 7; 116 | optional string url = 8; 117 | optional bool pickup_team = 9; 118 | } 119 | 120 | message CMsgDOTACreateTeamResponse { 121 | enum Result { 122 | INVALID = -1; 123 | SUCCESS = 0; 124 | NAME_EMPTY = 1; 125 | NAME_BAD_CHARACTERS = 2; 126 | NAME_TAKEN = 3; 127 | NAME_TOO_LONG = 4; 128 | TAG_EMPTY = 5; 129 | TAG_BAD_CHARACTERS = 6; 130 | TAG_TAKEN = 7; 131 | TAG_TOO_LONG = 8; 132 | CREATOR_BUSY = 9; 133 | UNSPECIFIED_ERROR = 10; 134 | CREATOR_TEAM_LIMIT_REACHED = 11; 135 | NO_LOGO = 12; 136 | CREATOR_TEAM_CREATION_COOLDOWN = 13; 137 | LOGO_UPLOAD_FAILED = 14; 138 | NAME_CHANGED_TOO_RECENTLY = 15; 139 | CREATOR_INSUFFICIENT_LEVEL = 16; 140 | INVALID_ACCOUNT_TYPE = 17; 141 | } 142 | 143 | optional .CMsgDOTACreateTeamResponse.Result result = 1 [default = INVALID]; 144 | optional uint32 team_id = 2; 145 | } 146 | 147 | message CMsgDOTAEditTeamDetails { 148 | optional uint32 team_id = 1; 149 | optional string name = 2; 150 | optional string tag = 3; 151 | optional uint64 logo = 4; 152 | optional uint64 base_logo = 5; 153 | optional uint64 banner_logo = 6; 154 | optional uint64 sponsor_logo = 7; 155 | optional string country_code = 8; 156 | optional string url = 9; 157 | optional bool in_use_by_party = 10; 158 | } 159 | 160 | message CMsgDOTAEditTeamDetailsResponse { 161 | enum Result { 162 | SUCCESS = 0; 163 | FAILURE_INVALID_ACCOUNT_TYPE = 1; 164 | FAILURE_NOT_MEMBER = 2; 165 | FAILURE_TEAM_LOCKED = 3; 166 | FAILURE_UNSPECIFIED_ERROR = 4; 167 | } 168 | 169 | optional .CMsgDOTAEditTeamDetailsResponse.Result result = 1 [default = SUCCESS]; 170 | } 171 | 172 | message CMsgDOTATeamProfileResponse { 173 | optional uint32 eresult = 1; 174 | optional .CMsgDOTATeam team = 2; 175 | } 176 | 177 | message CMsgDOTAProTeamListRequest { 178 | } 179 | 180 | message CMsgDOTAProTeamListResponse { 181 | message TeamEntry { 182 | optional uint32 team_id = 1; 183 | optional string tag = 2; 184 | optional uint32 time_created = 3; 185 | optional uint64 logo = 4; 186 | optional string country_code = 5; 187 | optional uint32 member_count = 6; 188 | } 189 | 190 | repeated .CMsgDOTAProTeamListResponse.TeamEntry teams = 1; 191 | optional uint32 eresult = 2; 192 | } 193 | 194 | message CMsgDOTATeamInvite_InviterToGC { 195 | optional uint32 account_id = 1; 196 | optional uint32 team_id = 2; 197 | } 198 | 199 | message CMsgDOTATeamInvite_GCImmediateResponseToInviter { 200 | optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS]; 201 | optional string invitee_name = 2; 202 | optional uint32 required_badge_level = 3; 203 | } 204 | 205 | message CMsgDOTATeamInvite_GCRequestToInvitee { 206 | optional uint32 inviter_account_id = 1; 207 | optional string team_name = 2; 208 | optional string team_tag = 3; 209 | optional uint64 logo = 4; 210 | } 211 | 212 | message CMsgDOTATeamInvite_InviteeResponseToGC { 213 | optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS]; 214 | } 215 | 216 | message CMsgDOTATeamInvite_GCResponseToInviter { 217 | optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS]; 218 | optional string invitee_name = 2; 219 | } 220 | 221 | message CMsgDOTATeamInvite_GCResponseToInvitee { 222 | optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS]; 223 | optional string team_name = 2; 224 | } 225 | 226 | message CMsgDOTAKickTeamMember { 227 | optional uint32 account_id = 1; 228 | optional uint32 team_id = 2; 229 | } 230 | 231 | message CMsgDOTAKickTeamMemberResponse { 232 | enum Result { 233 | SUCCESS = 0; 234 | FAILURE_INVALID_ACCOUNT_TYPE = 1; 235 | FAILURE_KICKER_NOT_ADMIN = 2; 236 | FAILURE_KICKEE_NOT_MEMBER = 3; 237 | FAILURE_TEAM_LOCKED = 4; 238 | FAILURE_UNSPECIFIED_ERROR = 5; 239 | } 240 | 241 | optional .CMsgDOTAKickTeamMemberResponse.Result result = 1 [default = SUCCESS]; 242 | } 243 | 244 | message CMsgDOTATransferTeamAdmin { 245 | optional uint32 new_admin_account_id = 1; 246 | optional uint32 team_id = 2; 247 | } 248 | 249 | message CMsgDOTATransferTeamAdminResponse { 250 | enum Result { 251 | SUCCESS = 0; 252 | FAILURE_INVALID_ACCOUNT_TYPE = 1; 253 | FAILURE_NOT_ADMIN = 2; 254 | FAILURE_SAME_ACCOUNT = 3; 255 | FAILURE_NOT_MEMBER = 4; 256 | FAILURE_UNSPECIFIED_ERROR = 5; 257 | } 258 | 259 | optional .CMsgDOTATransferTeamAdminResponse.Result result = 1 [default = SUCCESS]; 260 | } 261 | 262 | message CMsgDOTAChangeTeamSub { 263 | optional uint32 team_id = 1; 264 | optional uint32 member_account_id = 2; 265 | optional uint32 sub_account_id = 3; 266 | } 267 | 268 | message CMsgDOTAChangeTeamSubResponse { 269 | enum Result { 270 | SUCCESS = 0; 271 | FAILURE_INVALID_ACCOUNT_TYPE = 1; 272 | FAILURE_SAME_ACCOUNT = 2; 273 | FAILURE_NOT_ADMIN = 3; 274 | FAILURE_NOT_MEMBER = 4; 275 | FAILURE_NOT_SUB = 5; 276 | FAILURE_ALREADY_SUB = 6; 277 | FAILURE_UNSPECIFIED_ERROR = 7; 278 | } 279 | 280 | optional .CMsgDOTAChangeTeamSubResponse.Result result = 1 [default = SUCCESS]; 281 | } 282 | 283 | message CMsgDOTALeaveTeam { 284 | optional uint32 team_id = 1; 285 | } 286 | 287 | message CMsgDOTALeaveTeamResponse { 288 | enum Result { 289 | SUCCESS = 0; 290 | FAILURE_NOT_MEMBER = 1; 291 | FAILURE_TEAM_LOCKED = 2; 292 | FAILURE_UNSPECIFIED_ERROR = 3; 293 | } 294 | 295 | optional .CMsgDOTALeaveTeamResponse.Result result = 1 [default = SUCCESS]; 296 | } 297 | 298 | message CMsgDOTABetaParticipation { 299 | optional uint32 access_rights = 1; 300 | } 301 | 302 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_gcmessages_client_tournament.proto: -------------------------------------------------------------------------------- 1 | import "dota_client_enums.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum ETournamentEvent { 7 | k_ETournamentEvent_None = 0; 8 | k_ETournamentEvent_TournamentCreated = 1; 9 | k_ETournamentEvent_TournamentsMerged = 2; 10 | k_ETournamentEvent_GameOutcome = 3; 11 | k_ETournamentEvent_TeamGivenBye = 4; 12 | k_ETournamentEvent_TournamentCanceledByAdmin = 5; 13 | k_ETournamentEvent_TeamAbandoned = 6; 14 | k_ETournamentEvent_ScheduledGameStarted = 7; 15 | k_ETournamentEvent_Canceled = 8; 16 | k_ETournamentEvent_TeamParticipationTimedOut_EntryFeeRefund = 9; 17 | k_ETournamentEvent_TeamParticipationTimedOut_EntryFeeForfeit = 10; 18 | k_ETournamentEvent_TeamParticipationTimedOut_GrantedVictory = 11; 19 | } 20 | 21 | message CMsgDOTATournamentInfo { 22 | message PhaseGroup { 23 | optional uint32 group_id = 1; 24 | optional string group_name = 2; 25 | } 26 | 27 | message Phase { 28 | optional uint32 phase_id = 1; 29 | optional string phase_name = 2; 30 | optional uint32 type_id = 3; 31 | optional uint32 iterations = 4; 32 | optional uint32 min_start_time = 5; 33 | optional uint32 max_start_time = 6; 34 | repeated .CMsgDOTATournamentInfo.PhaseGroup group_list = 7; 35 | } 36 | 37 | message Team { 38 | optional uint32 team_id = 1; 39 | optional string name = 2; 40 | optional string tag = 3; 41 | optional uint64 team_logo = 4; 42 | optional bool eliminated = 5; 43 | } 44 | 45 | message UpcomingMatch { 46 | optional uint32 series_id = 1; 47 | optional uint32 team1_id = 2; 48 | optional uint32 team2_id = 3; 49 | optional uint32 bo = 4; 50 | optional string stage_name = 5; 51 | optional uint32 start_time = 6; 52 | optional string winner_stage = 7; 53 | optional string loser_stage = 8; 54 | optional string team1_tag = 9; 55 | optional string team2_tag = 10; 56 | optional string team1_prev_opponent_tag = 11; 57 | optional string team2_prev_opponent_tag = 12; 58 | optional uint64 team1_logo = 13; 59 | optional uint64 team2_logo = 14; 60 | optional uint64 team1_prev_opponent_logo = 15; 61 | optional uint64 team2_prev_opponent_logo = 16; 62 | optional uint32 team1_prev_opponent_id = 17; 63 | optional uint32 team2_prev_opponent_id = 18; 64 | optional uint32 team1_prev_match_score = 19; 65 | optional uint32 team1_prev_match_opponent_score = 20; 66 | optional uint32 team2_prev_match_score = 21; 67 | optional uint32 team2_prev_match_opponent_score = 22; 68 | optional uint32 phase_type = 23; 69 | optional uint32 team1_score = 24; 70 | optional uint32 team2_score = 25; 71 | optional uint32 phase_id = 26; 72 | } 73 | 74 | message News { 75 | optional string link = 1; 76 | optional string title = 2; 77 | optional string image = 3; 78 | optional uint32 timestamp = 4; 79 | } 80 | 81 | optional uint32 league_id = 1; 82 | repeated .CMsgDOTATournamentInfo.Phase phase_list = 2; 83 | repeated .CMsgDOTATournamentInfo.Team teams_list = 3; 84 | repeated .CMsgDOTATournamentInfo.UpcomingMatch upcoming_matches_list = 4; 85 | repeated .CMsgDOTATournamentInfo.News news_list = 5; 86 | } 87 | 88 | message CMsgRequestWeekendTourneySchedule { 89 | } 90 | 91 | message CMsgWeekendTourneySchedule { 92 | message Division { 93 | optional uint32 division_code = 1; 94 | optional uint32 time_window_open = 2; 95 | optional uint32 time_window_close = 3; 96 | optional uint32 time_window_open_next = 4; 97 | optional uint32 trophy_id = 5; 98 | optional bool free_weekend = 6; 99 | } 100 | 101 | repeated .CMsgWeekendTourneySchedule.Division divisions = 1; 102 | } 103 | 104 | message CMsgWeekendTourneyOpts { 105 | optional bool participating = 1; 106 | optional uint32 division_id = 2; 107 | optional uint32 buyin = 3; 108 | optional uint32 skill_level = 4; 109 | optional uint32 match_groups = 5; 110 | optional uint32 team_id = 6; 111 | optional string pickup_team_name = 7; 112 | optional uint64 pickup_team_logo = 8; 113 | } 114 | 115 | message CMsgWeekendTourneyLeave { 116 | } 117 | 118 | message CMsgDOTATournament { 119 | message Team { 120 | optional fixed64 team_gid = 1; 121 | optional uint32 node_or_state = 2; 122 | repeated uint32 players = 3 [packed = true]; 123 | repeated uint32 player_buyin = 9 [packed = true]; 124 | repeated uint32 player_skill_level = 10 [packed = true]; 125 | optional uint32 match_group_mask = 12; 126 | optional uint32 team_id = 4; 127 | optional string team_name = 5; 128 | optional uint64 team_base_logo = 7; 129 | optional uint64 team_ui_logo = 8; 130 | optional uint32 team_date = 11; 131 | } 132 | 133 | message Game { 134 | optional uint32 node_idx = 1; 135 | optional fixed64 lobby_id = 2; 136 | optional uint64 match_id = 3; 137 | optional bool team_a_good = 4; 138 | optional .ETournamentGameState state = 5 [default = k_ETournamentGameState_Unknown]; 139 | optional uint32 start_time = 6; 140 | } 141 | 142 | message Node { 143 | optional uint32 node_id = 1; 144 | optional uint32 team_idx_a = 2; 145 | optional uint32 team_idx_b = 3; 146 | optional .ETournamentNodeState node_state = 4 [default = k_ETournamentNodeState_Unknown]; 147 | } 148 | 149 | optional uint32 tournament_id = 1; 150 | optional uint32 division_id = 2; 151 | optional uint32 schedule_time = 3; 152 | optional uint32 skill_level = 4; 153 | optional .ETournamentTemplate tournament_template = 5 [default = k_ETournamentTemplate_None]; 154 | optional .ETournamentState state = 6 [default = k_ETournamentState_Unknown]; 155 | optional uint32 state_seq_num = 10; 156 | optional uint32 season_trophy_id = 11; 157 | repeated .CMsgDOTATournament.Team teams = 7; 158 | repeated .CMsgDOTATournament.Game games = 8; 159 | repeated .CMsgDOTATournament.Node nodes = 9; 160 | } 161 | 162 | message CMsgDOTATournamentStateChange { 163 | message GameChange { 164 | optional uint64 match_id = 1; 165 | optional .ETournamentGameState new_state = 2 [default = k_ETournamentGameState_Unknown]; 166 | } 167 | 168 | message TeamChange { 169 | optional uint64 team_gid = 1; 170 | optional uint32 new_node_or_state = 2; 171 | optional uint32 old_node_or_state = 3; 172 | } 173 | 174 | optional uint32 new_tournament_id = 1; 175 | optional .ETournamentEvent event = 2 [default = k_ETournamentEvent_None]; 176 | optional .ETournamentState new_tournament_state = 3 [default = k_ETournamentState_Unknown]; 177 | repeated .CMsgDOTATournamentStateChange.GameChange game_changes = 4; 178 | repeated .CMsgDOTATournamentStateChange.TeamChange team_changes = 5; 179 | repeated uint32 merged_tournament_ids = 6 [packed = true]; 180 | optional uint32 state_seq_num = 7; 181 | } 182 | 183 | message CMsgDOTATournamentRequest { 184 | optional uint32 tournament_id = 1; 185 | optional uint64 client_tournament_gid = 2; 186 | } 187 | 188 | message CMsgDOTATournamentResponse { 189 | optional uint32 result = 1 [default = 2]; 190 | optional .CMsgDOTATournament tournament = 2; 191 | } 192 | 193 | message CMsgDOTAClearTournamentGame { 194 | optional uint32 tournament_id = 1; 195 | optional uint32 game_id = 2; 196 | } 197 | 198 | message CMsgDOTAWeekendTourneyPlayerSkillLevelStats { 199 | optional uint32 skill_level = 1; 200 | optional uint32 times_won_0 = 2; 201 | optional uint32 times_won_1 = 3; 202 | optional uint32 times_won_2 = 4; 203 | optional uint32 times_won_3 = 5; 204 | optional uint32 times_bye_and_lost = 6; 205 | optional uint32 times_bye_and_won = 7; 206 | optional uint32 times_unusual_champ = 10; 207 | optional uint32 total_games_won = 8; 208 | optional uint32 score = 9; 209 | } 210 | 211 | message CMsgDOTAWeekendTourneyPlayerStats { 212 | optional uint32 account_id = 1; 213 | optional uint32 season_trophy_id = 2; 214 | repeated .CMsgDOTAWeekendTourneyPlayerSkillLevelStats skill_levels = 3; 215 | optional uint32 current_tier = 4; 216 | } 217 | 218 | message CMsgDOTAWeekendTourneyPlayerStatsRequest { 219 | optional uint32 account_id = 1; 220 | optional uint32 season_trophy_id = 2; 221 | } 222 | 223 | message CMsgDOTAWeekendTourneyPlayerHistoryRequest { 224 | optional uint32 account_id = 1; 225 | optional uint32 season_trophy_id = 2; 226 | } 227 | 228 | message CMsgDOTAWeekendTourneyPlayerHistory { 229 | message Tournament { 230 | optional uint32 tournament_id = 1; 231 | optional uint32 start_time = 2; 232 | optional uint32 tournament_tier = 3; 233 | optional uint32 team_id = 4; 234 | optional uint32 team_date = 5; 235 | optional uint32 team_result = 6; 236 | repeated uint32 account_id = 7; 237 | optional string team_name = 8; 238 | optional uint32 season_trophy_id = 9; 239 | } 240 | 241 | optional uint32 account_id = 1; 242 | repeated .CMsgDOTAWeekendTourneyPlayerHistory.Tournament tournaments = 3; 243 | } 244 | 245 | message CMsgDOTAWeekendTourneyParticipationDetails { 246 | message Tier { 247 | optional uint32 tier = 1; 248 | optional uint32 players = 2; 249 | optional uint32 teams = 3; 250 | optional uint32 winning_teams = 4; 251 | optional uint32 players_streak_2 = 5; 252 | optional uint32 players_streak_3 = 6; 253 | optional uint32 players_streak_4 = 7; 254 | optional uint32 players_streak_5 = 8; 255 | } 256 | 257 | message Division { 258 | optional uint32 division_id = 1; 259 | optional uint32 schedule_time = 2; 260 | repeated .CMsgDOTAWeekendTourneyParticipationDetails.Tier tiers = 3; 261 | } 262 | 263 | repeated .CMsgDOTAWeekendTourneyParticipationDetails.Division divisions = 1; 264 | } 265 | 266 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_clientmessages.proto: -------------------------------------------------------------------------------- 1 | import "dota_commonmessages.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum EDotaClientMessages { 7 | DOTA_CM_MapLine = 301; 8 | DOTA_CM_AspectRatio = 302; 9 | DOTA_CM_MapPing = 303; 10 | DOTA_CM_UnitsAutoAttack = 304; 11 | DOTA_CM_SearchString = 307; 12 | DOTA_CM_Pause = 308; 13 | DOTA_CM_ShopViewMode = 309; 14 | DOTA_CM_SetUnitShareFlag = 310; 15 | DOTA_CM_SwapRequest = 311; 16 | DOTA_CM_SwapAccept = 312; 17 | DOTA_CM_WorldLine = 313; 18 | DOTA_CM_RequestGraphUpdate = 314; 19 | DOTA_CM_ItemAlert = 315; 20 | DOTA_CM_ChatWheel = 316; 21 | DOTA_CM_SendStatPopup = 317; 22 | DOTA_CM_BeginLastHitChallenge = 318; 23 | DOTA_CM_UpdateQuickBuy = 319; 24 | DOTA_CM_UpdateCoachListen = 320; 25 | DOTA_CM_CoachHUDPing = 321; 26 | DOTA_CM_RecordVote = 322; 27 | DOTA_CM_UnitsAutoAttackAfterSpell = 323; 28 | DOTA_CM_WillPurchaseAlert = 324; 29 | DOTA_CM_PlayerShowCase = 325; 30 | DOTA_CM_TeleportRequiresHalt = 326; 31 | DOTA_CM_CameraZoomAmount = 327; 32 | DOTA_CM_BroadcasterUsingCamerman = 328; 33 | DOTA_CM_BroadcasterUsingAssistedCameraOperator = 329; 34 | DOTA_CM_EnemyItemAlert = 330; 35 | DOTA_CM_FreeInventory = 331; 36 | DOTA_CM_BuyBackStateAlert = 332; 37 | DOTA_CM_QuickBuyAlert = 333; 38 | DOTA_CM_HeroStatueLike = 334; 39 | DOTA_CM_ModifierAlert = 335; 40 | DOTA_CM_TeamShowcaseEditor = 336; 41 | DOTA_CM_HPManaAlert = 337; 42 | DOTA_CM_GlyphAlert = 338; 43 | DOTA_CM_TeamShowcaseClientData = 339; 44 | DOTA_CM_PlayTeamShowcase = 340; 45 | DOTA_CM_EventCNY2015Cmd = 341; 46 | DOTA_CM_FillEmptySlotsWithBots = 342; 47 | DOTA_CM_DemoHero = 343; 48 | DOTA_CM_AbilityLearnModeToggled = 344; 49 | DOTA_CM_AbilityStartUse = 345; 50 | DOTA_CM_ChallengeSelect = 346; 51 | DOTA_CM_ChallengeReroll = 347; 52 | DOTA_CM_ClickedBuff = 348; 53 | DOTA_CM_CoinWager = 349; 54 | DOTA_CM_ExecuteOrders = 350; 55 | DOTA_CM_XPAlert = 351; 56 | DOTA_CM_EventPointsTip = 353; 57 | DOTA_CM_MatchMetadata = 354; 58 | DOTA_CM_KillMyHero = 355; 59 | DOTA_CM_QuestStatus = 356; 60 | DOTA_CM_ToggleAutoattack = 357; 61 | DOTA_CM_SpecialAbility = 358; 62 | DOTA_CM_KillcamDamageTaken = 359; 63 | DOTA_CM_SetEnemyStartingPosition = 360; 64 | DOTA_CM_SetDesiredWardPlacement = 361; 65 | DOTA_CM_RollDice = 362; 66 | DOTA_CM_FlipCoin = 363; 67 | DOTA_CM_RequestItemSuggestions = 364; 68 | DOTA_CM_MakeTeamCaptain = 365; 69 | DOTA_CM_CoinWagerToken = 366; 70 | DOTA_CM_RankWager = 367; 71 | } 72 | 73 | message CDOTAClientMsg_MapPing { 74 | optional .CDOTAMsg_LocationPing location_ping = 1; 75 | } 76 | 77 | message CDOTAClientMsg_ItemAlert { 78 | optional .CDOTAMsg_ItemAlert item_alert = 1; 79 | } 80 | 81 | message CDOTAClientMsg_EnemyItemAlert { 82 | optional uint32 item_entindex = 1; 83 | } 84 | 85 | message CDOTAClientMsg_ModifierAlert { 86 | optional int32 buff_internal_index = 1; 87 | optional uint32 target_entindex = 2; 88 | } 89 | 90 | message CDOTAClientMsg_ClickedBuff { 91 | optional int32 buff_internal_index = 1; 92 | optional uint32 target_entindex = 2; 93 | } 94 | 95 | message CDOTAClientMsg_HPManaAlert { 96 | optional uint32 target_entindex = 1; 97 | } 98 | 99 | message CDOTAClientMsg_GlyphAlert { 100 | optional bool negative = 1; 101 | } 102 | 103 | message CDOTAClientMsg_MapLine { 104 | optional .CDOTAMsg_MapLine mapline = 1; 105 | } 106 | 107 | message CDOTAClientMsg_AspectRatio { 108 | optional float ratio = 1; 109 | } 110 | 111 | message CDOTAClientMsg_UnitsAutoAttackMode { 112 | enum EMode { 113 | INVALID = -1; 114 | NEVER = 0; 115 | AFTER_SPELLCAST = 1; 116 | ALWAYS = 2; 117 | } 118 | 119 | enum EUnitType { 120 | NORMAL = 0; 121 | SUMMONED = 1; 122 | } 123 | 124 | optional .CDOTAClientMsg_UnitsAutoAttackMode.EMode mode = 1 [default = INVALID]; 125 | optional .CDOTAClientMsg_UnitsAutoAttackMode.EUnitType unit_type = 2 [default = NORMAL]; 126 | } 127 | 128 | message CDOTAClientMsg_UnitsAutoAttackAfterSpell { 129 | optional bool enabled = 1; 130 | } 131 | 132 | message CDOTAClientMsg_TeleportRequiresHalt { 133 | optional bool enabled = 1; 134 | } 135 | 136 | message CDOTAClientMsg_SearchString { 137 | optional string search = 1; 138 | } 139 | 140 | message CDOTAClientMsg_Pause { 141 | } 142 | 143 | message CDOTAClientMsg_ShopViewMode { 144 | optional uint32 mode = 1; 145 | } 146 | 147 | message CDOTAClientMsg_SetUnitShareFlag { 148 | optional uint32 playerID = 1; 149 | optional uint32 flag = 2; 150 | optional bool state = 3; 151 | } 152 | 153 | message CDOTAClientMsg_SwapRequest { 154 | optional uint32 player_id = 1; 155 | } 156 | 157 | message CDOTAClientMsg_SwapAccept { 158 | optional uint32 player_id = 1; 159 | } 160 | 161 | message CDOTAClientMsg_WorldLine { 162 | optional .CDOTAMsg_WorldLine worldline = 1; 163 | } 164 | 165 | message CDOTAClientMsg_RequestGraphUpdate { 166 | } 167 | 168 | message CDOTAClientMsg_ChatWheel { 169 | optional uint32 chat_message_id = 1; 170 | optional uint32 param_hero_id = 2; 171 | } 172 | 173 | message CDOTAClientMsg_SendStatPopup { 174 | optional .CDOTAMsg_SendStatPopup statpopup = 1; 175 | } 176 | 177 | message CDOTAClientMsg_BeginLastHitChallenge { 178 | optional uint32 chosen_lane = 1; 179 | optional bool helper_enabled = 2; 180 | } 181 | 182 | message CDOTAClientMsg_UpdateQuickBuyItem { 183 | optional int32 item_type = 1; 184 | optional bool purchasable = 2; 185 | } 186 | 187 | message CDOTAClientMsg_UpdateQuickBuy { 188 | repeated .CDOTAClientMsg_UpdateQuickBuyItem items = 1; 189 | } 190 | 191 | message CDOTAClientMsg_RecordVote { 192 | optional int32 choice_index = 1; 193 | } 194 | 195 | message CDOTAClientMsg_WillPurchaseAlert { 196 | optional int32 itemid = 1; 197 | optional uint32 gold_remaining = 2; 198 | optional int32 suggestion_player_id = 3; 199 | } 200 | 201 | message CDOTAClientMsg_BuyBackStateAlert { 202 | } 203 | 204 | message CDOTAClientMsg_QuickBuyAlert { 205 | optional int32 itemid = 1; 206 | optional int32 gold_required = 2; 207 | } 208 | 209 | message CDOTAClientMsg_PlayerShowCase { 210 | optional bool showcase = 1; 211 | } 212 | 213 | message CDOTAClientMsg_CameraZoomAmount { 214 | optional float zoom_amount = 1; 215 | } 216 | 217 | message CDOTAClientMsg_BroadcasterUsingCameraman { 218 | optional bool cameraman = 1; 219 | } 220 | 221 | message CDOTAClientMsg_BroadcasterUsingAssistedCameraOperator { 222 | optional bool enabled = 1; 223 | } 224 | 225 | message CAdditionalEquipSlotClientMsg { 226 | optional uint32 class_id = 1; 227 | optional uint32 slot_id = 2; 228 | optional uint32 def_index = 3; 229 | } 230 | 231 | message CDOTAClientMsg_FreeInventory { 232 | repeated .CAdditionalEquipSlotClientMsg equips = 1; 233 | } 234 | 235 | message CDOTAClientMsg_FillEmptySlotsWithBots { 236 | optional bool fillwithbots = 1; 237 | } 238 | 239 | message CDOTAClientMsg_HeroStatueLike { 240 | optional uint32 owner_player_id = 1; 241 | } 242 | 243 | message CDOTAClientMsg_EventCNY2015Cmd { 244 | optional bytes data = 1; 245 | } 246 | 247 | message CDOTAClientMsg_DemoHero { 248 | optional int32 hero_id = 1; 249 | optional int32 hero_id_to_spawn = 2; 250 | repeated uint32 item_defs = 3; 251 | repeated uint64 item_ids = 4; 252 | optional uint32 style_index = 5; 253 | optional bool keep_existing_demohero = 6; 254 | } 255 | 256 | message CDOTAClientMsg_ChallengeSelect { 257 | optional uint32 event_id = 1; 258 | optional uint32 slot_id = 2; 259 | optional uint32 sequence_id = 3; 260 | } 261 | 262 | message CDOTAClientMsg_ChallengeReroll { 263 | optional uint32 event_id = 1; 264 | optional uint32 slot_id = 2; 265 | optional uint32 sequence_id = 3; 266 | } 267 | 268 | message CDOTAClientMsg_CoinWager { 269 | optional uint32 wager_amount = 1; 270 | } 271 | 272 | message CDOTAClientMsg_CoinWagerToken { 273 | optional uint64 wager_token_item_id = 1; 274 | } 275 | 276 | message CDOTAClientMsg_RankWager { 277 | optional bool announce_wager = 1; 278 | } 279 | 280 | message CDOTAClientMsg_EventPointsTip { 281 | optional uint32 recipient_player_id = 1; 282 | } 283 | 284 | message CDOTAClientMsg_ExecuteOrders { 285 | repeated .CDOTAMsg_UnitOrder orders = 1; 286 | } 287 | 288 | message CDOTAClientMsg_XPAlert { 289 | optional uint32 target_entindex = 1; 290 | optional uint32 damage_taken = 2; 291 | } 292 | 293 | message CDOTAClientMsg_KillcamDamageTaken { 294 | optional uint32 target_entindex = 1; 295 | optional uint32 damage_taken = 2; 296 | optional uint32 item_type = 3; 297 | optional uint32 item_id = 4; 298 | optional string hero_name = 5; 299 | optional string damage_color = 6; 300 | } 301 | 302 | message CDOTAClientMsg_MatchMetadata { 303 | optional uint64 match_id = 1; 304 | optional bytes metadata = 2; 305 | } 306 | 307 | message CDOTAClientMsg_KillMyHero { 308 | } 309 | 310 | message CDOTAClientMsg_QuestStatus { 311 | optional uint32 quest_id = 1; 312 | optional uint32 challenge_id = 2; 313 | optional uint32 progress = 3; 314 | optional uint32 goal = 4; 315 | optional uint32 query = 5; 316 | optional float fail_gametime = 6; 317 | optional uint32 item_id = 7; 318 | } 319 | 320 | message CDOTAClientMsg_ToggleAutoattack { 321 | optional int32 mode = 1; 322 | optional bool show_message = 2; 323 | } 324 | 325 | message CDOTAClientMsg_SpecialAbility { 326 | optional uint32 ability_index = 1; 327 | optional uint32 target_entindex = 2; 328 | } 329 | 330 | message CDOTAClientMsg_SetEnemyStartingPosition { 331 | optional uint32 enemy_player_id = 1; 332 | optional uint32 enemy_starting_position = 2; 333 | } 334 | 335 | message CDOTAClientMsg_SetDesiredWardPlacement { 336 | optional uint32 ward_index = 1; 337 | optional float ward_x = 2; 338 | optional float ward_y = 3; 339 | } 340 | 341 | message CDOTAClientMsg_RollDice { 342 | optional uint32 channel_type = 1; 343 | optional uint32 roll_min = 2; 344 | optional uint32 roll_max = 3; 345 | } 346 | 347 | message CDOTAClientMsg_FlipCoin { 348 | optional uint32 channel_type = 1; 349 | } 350 | 351 | message CDOTAClientMsg_RequestItemSuggestions { 352 | } 353 | 354 | message CDOTAClientMsg_MakeTeamCaptain { 355 | optional uint32 player_id = 1; 356 | } 357 | 358 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/gcsdk_gcmessages.proto: -------------------------------------------------------------------------------- 1 | import "steammessages.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum ESourceEngine { 7 | k_ESE_Source1 = 0; 8 | k_ESE_Source2 = 1; 9 | } 10 | 11 | enum PartnerAccountType { 12 | PARTNER_NONE = 0; 13 | PARTNER_PERFECT_WORLD = 1; 14 | PARTNER_NEXON = 2; 15 | PARTNER_INVALID = 3; 16 | } 17 | 18 | enum GCConnectionStatus { 19 | GCConnectionStatus_HAVE_SESSION = 0; 20 | GCConnectionStatus_GC_GOING_DOWN = 1; 21 | GCConnectionStatus_NO_SESSION = 2; 22 | GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE = 3; 23 | GCConnectionStatus_NO_STEAM = 4; 24 | GCConnectionStatus_SUSPENDED = 5; 25 | GCConnectionStatus_STEAM_GOING_DOWN = 6; 26 | } 27 | 28 | message CMsgSHA1Digest { 29 | required fixed64 block1 = 1; 30 | required fixed64 block2 = 2; 31 | required fixed32 block3 = 3; 32 | } 33 | 34 | message CMsgSOIDOwner { 35 | optional uint32 type = 1; 36 | optional uint64 id = 2; 37 | } 38 | 39 | message CMsgSOSingleObject { 40 | optional int32 type_id = 2; 41 | optional bytes object_data = 3; 42 | optional fixed64 version = 4; 43 | optional .CMsgSOIDOwner owner_soid = 5; 44 | optional uint32 service_id = 6; 45 | } 46 | 47 | message CMsgSOMultipleObjects { 48 | message SingleObject { 49 | option (msgpool_soft_limit) = 256; 50 | option (msgpool_hard_limit) = 1024; 51 | optional int32 type_id = 1; 52 | optional bytes object_data = 2; 53 | } 54 | 55 | repeated .CMsgSOMultipleObjects.SingleObject objects_modified = 2; 56 | optional fixed64 version = 3; 57 | repeated .CMsgSOMultipleObjects.SingleObject objects_added = 4; 58 | repeated .CMsgSOMultipleObjects.SingleObject objects_removed = 5; 59 | optional .CMsgSOIDOwner owner_soid = 6; 60 | optional uint32 service_id = 7; 61 | } 62 | 63 | message CMsgSOCacheSubscribed { 64 | message SubscribedType { 65 | optional int32 type_id = 1; 66 | repeated bytes object_data = 2; 67 | } 68 | 69 | repeated .CMsgSOCacheSubscribed.SubscribedType objects = 2; 70 | optional fixed64 version = 3; 71 | optional .CMsgSOIDOwner owner_soid = 4; 72 | optional uint32 service_id = 5; 73 | repeated uint32 service_list = 6; 74 | optional fixed64 sync_version = 7; 75 | } 76 | 77 | message CMsgSOCacheSubscribedUpToDate { 78 | optional fixed64 version = 1; 79 | optional .CMsgSOIDOwner owner_soid = 2; 80 | optional uint32 service_id = 3; 81 | repeated uint32 service_list = 4; 82 | optional fixed64 sync_version = 5; 83 | } 84 | 85 | message CMsgSOCacheUnsubscribed { 86 | optional .CMsgSOIDOwner owner_soid = 2; 87 | } 88 | 89 | message CMsgSOCacheSubscriptionCheck { 90 | optional fixed64 version = 2; 91 | optional .CMsgSOIDOwner owner_soid = 3; 92 | optional uint32 service_id = 4; 93 | repeated uint32 service_list = 5; 94 | optional fixed64 sync_version = 6; 95 | } 96 | 97 | message CMsgSOCacheSubscriptionRefresh { 98 | optional .CMsgSOIDOwner owner_soid = 2; 99 | } 100 | 101 | message CMsgSOCacheVersion { 102 | optional fixed64 version = 1; 103 | } 104 | 105 | message CMsgGCMultiplexMessage { 106 | optional uint32 msgtype = 1; 107 | optional bytes payload = 2; 108 | repeated fixed64 steamids = 3; 109 | } 110 | 111 | message CGCToGCMsgMasterAck { 112 | message Process { 113 | optional uint32 dir_index = 1; 114 | repeated uint32 type_instances = 2; 115 | } 116 | 117 | optional uint32 dir_index = 1; 118 | optional string machine_name = 3; 119 | optional string process_name = 4; 120 | repeated .CGCToGCMsgMasterAck.Process directory = 6; 121 | } 122 | 123 | message CGCToGCMsgMasterAck_Response { 124 | optional int32 eresult = 1 [default = 2]; 125 | } 126 | 127 | message CMsgGCToGCUniverseStartup { 128 | optional bool is_initial_startup = 1; 129 | } 130 | 131 | message CMsgGCToGCUniverseStartupResponse { 132 | optional int32 eresult = 1; 133 | } 134 | 135 | message CGCToGCMsgMasterStartupComplete { 136 | message GCInfo { 137 | optional uint32 dir_index = 1; 138 | optional string machine_name = 2; 139 | } 140 | 141 | repeated .CGCToGCMsgMasterStartupComplete.GCInfo gc_info = 1; 142 | } 143 | 144 | message CGCToGCMsgRouted { 145 | optional uint32 msg_type = 1; 146 | optional fixed64 sender_id = 2; 147 | optional bytes net_message = 3; 148 | } 149 | 150 | message CGCToGCMsgRoutedReply { 151 | optional uint32 msg_type = 1; 152 | optional bytes net_message = 2; 153 | } 154 | 155 | message CMsgGCUpdateSubGCSessionInfo { 156 | message CMsgUpdate { 157 | optional fixed64 steamid = 1; 158 | optional fixed32 ip = 2; 159 | optional bool trusted = 3; 160 | } 161 | 162 | repeated .CMsgGCUpdateSubGCSessionInfo.CMsgUpdate updates = 1; 163 | } 164 | 165 | message CMsgGCRequestSubGCSessionInfo { 166 | optional fixed64 steamid = 1; 167 | } 168 | 169 | message CMsgGCRequestSubGCSessionInfoResponse { 170 | optional fixed32 ip = 1; 171 | optional bool trusted = 2; 172 | optional uint32 port = 3; 173 | optional bool success = 4; 174 | } 175 | 176 | message CMsgSOCacheHaveVersion { 177 | optional .CMsgSOIDOwner soid = 1; 178 | optional fixed64 version = 2; 179 | optional uint32 service_id = 3; 180 | optional uint32 cached_file_version = 4; 181 | } 182 | 183 | message CMsgClientHello { 184 | optional uint32 version = 1; 185 | repeated .CMsgSOCacheHaveVersion socache_have_versions = 2; 186 | optional uint32 client_session_need = 3; 187 | optional .PartnerAccountType client_launcher = 4 [default = PARTNER_NONE]; 188 | optional string secret_key = 5; 189 | optional uint32 client_language = 6; 190 | optional .ESourceEngine engine = 7 [default = k_ESE_Source1]; 191 | } 192 | 193 | message CMsgClientWelcome { 194 | message Location { 195 | optional float latitude = 1; 196 | optional float longitude = 2; 197 | optional string country = 3; 198 | } 199 | 200 | optional uint32 version = 1; 201 | optional bytes game_data = 2; 202 | repeated .CMsgSOCacheSubscribed outofdate_subscribed_caches = 3; 203 | repeated .CMsgSOCacheSubscriptionCheck uptodate_subscribed_caches = 4; 204 | optional .CMsgClientWelcome.Location location = 5; 205 | optional bytes save_game_key = 6; 206 | optional fixed32 item_schema_crc = 7; 207 | optional string items_game_url = 8; 208 | optional uint32 gc_socache_file_version = 9; 209 | } 210 | 211 | message CMsgConnectionStatus { 212 | optional .GCConnectionStatus status = 1 [default = GCConnectionStatus_HAVE_SESSION]; 213 | optional uint32 client_session_need = 2; 214 | optional int32 queue_position = 3; 215 | optional int32 queue_size = 4; 216 | optional int32 wait_seconds = 5; 217 | optional int32 estimated_wait_seconds_remaining = 6; 218 | } 219 | 220 | message CMsgGCToGCSOCacheSubscribe { 221 | message CMsgHaveVersions { 222 | optional uint32 service_id = 1; 223 | optional uint64 version = 2; 224 | } 225 | 226 | optional fixed64 subscriber = 1; 227 | optional fixed64 subscribe_to_id = 2; 228 | optional fixed64 sync_version = 3; 229 | repeated .CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions have_versions = 4; 230 | optional uint32 subscribe_to_type = 5; 231 | } 232 | 233 | message CMsgGCToGCSOCacheUnsubscribe { 234 | optional fixed64 subscriber = 1; 235 | optional fixed64 unsubscribe_from_id = 2; 236 | optional uint32 unsubscribe_from_type = 3; 237 | } 238 | 239 | message CMsgGCClientPing { 240 | } 241 | 242 | message CMsgGCToGCForwardAccountDetails { 243 | optional fixed64 steamid = 1; 244 | optional .CGCSystemMsg_GetAccountDetails_Response account_details = 2; 245 | optional uint32 age_seconds = 3; 246 | } 247 | 248 | message CMsgGCToGCLoadSessionSOCache { 249 | optional uint32 account_id = 1; 250 | optional .CMsgGCToGCForwardAccountDetails forward_account_details = 2; 251 | } 252 | 253 | message CMsgGCToGCLoadSessionSOCacheResponse { 254 | } 255 | 256 | message CMsgGCToGCUpdateSessionStats { 257 | optional uint32 user_sessions = 1; 258 | optional uint32 server_sessions = 2; 259 | optional bool in_logon_surge = 3; 260 | } 261 | 262 | message CWorkshop_PopulateItemDescriptions_Request { 263 | message SingleItemDescription { 264 | optional uint32 gameitemid = 1; 265 | optional string item_description = 2; 266 | } 267 | 268 | message ItemDescriptionsLanguageBlock { 269 | optional string language = 1; 270 | repeated .CWorkshop_PopulateItemDescriptions_Request.SingleItemDescription descriptions = 2; 271 | } 272 | 273 | optional uint32 appid = 1; 274 | repeated .CWorkshop_PopulateItemDescriptions_Request.ItemDescriptionsLanguageBlock languages = 2; 275 | } 276 | 277 | message CWorkshop_GetContributors_Request { 278 | optional uint32 appid = 1; 279 | optional uint32 gameitemid = 2; 280 | } 281 | 282 | message CWorkshop_GetContributors_Response { 283 | repeated fixed64 contributors = 1; 284 | } 285 | 286 | message CWorkshop_SetItemPaymentRules_Request { 287 | message WorkshopItemPaymentRule { 288 | optional uint64 workshop_file_id = 1; 289 | optional float revenue_percentage = 2; 290 | optional string rule_description = 3; 291 | } 292 | 293 | message PartnerItemPaymentRule { 294 | optional uint32 account_id = 1; 295 | optional float revenue_percentage = 2; 296 | optional string rule_description = 3; 297 | } 298 | 299 | optional uint32 appid = 1; 300 | optional uint32 gameitemid = 2; 301 | repeated .CWorkshop_SetItemPaymentRules_Request.WorkshopItemPaymentRule associated_workshop_files = 3; 302 | repeated .CWorkshop_SetItemPaymentRules_Request.PartnerItemPaymentRule partner_accounts = 4; 303 | } 304 | 305 | message CWorkshop_SetItemPaymentRules_Response { 306 | } 307 | 308 | message CBroadcast_PostGameDataFrame_Request { 309 | optional uint32 appid = 1; 310 | optional fixed64 steamid = 2; 311 | optional fixed64 broadcast_id = 3; 312 | optional bytes frame_data = 4; 313 | } 314 | 315 | message CMsgSerializedSOCache { 316 | message TypeCache { 317 | optional uint32 type = 1; 318 | repeated bytes objects = 2; 319 | optional uint32 service_id = 3; 320 | } 321 | 322 | message Cache { 323 | message Version { 324 | optional uint32 service = 1; 325 | optional uint64 version = 2; 326 | } 327 | 328 | optional uint32 type = 1; 329 | optional uint64 id = 2; 330 | repeated .CMsgSerializedSOCache.Cache.Version versions = 3; 331 | repeated .CMsgSerializedSOCache.TypeCache type_caches = 4; 332 | } 333 | 334 | optional uint32 file_version = 1; 335 | repeated .CMsgSerializedSOCache.Cache caches = 2; 336 | optional uint32 gc_socache_file_version = 3; 337 | } 338 | 339 | message CMsgGCToClientPollConvarRequest { 340 | optional string convar_name = 1; 341 | optional uint32 poll_id = 2; 342 | } 343 | 344 | message CMsgGCToClientPollConvarResponse { 345 | optional uint32 poll_id = 1; 346 | optional string convar_value = 2; 347 | } 348 | 349 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/network_connection.proto: -------------------------------------------------------------------------------- 1 | import "google/protobuf/descriptor.proto"; 2 | 3 | option cc_generic_services = false; 4 | 5 | extend .google.protobuf.EnumValueOptions { 6 | optional string network_connection_token = 50500; 7 | } 8 | 9 | enum ENetworkDisconnectionReason { 10 | NETWORK_DISCONNECT_INVALID = 0; 11 | NETWORK_DISCONNECT_SHUTDOWN = 1; 12 | NETWORK_DISCONNECT_DISCONNECT_BY_USER = 2 [(network_connection_token) = "#GameUI_Disconnect_User"]; 13 | NETWORK_DISCONNECT_DISCONNECT_BY_SERVER = 3 [(network_connection_token) = "#GameUI_Disconnect_Server"]; 14 | NETWORK_DISCONNECT_LOST = 4 [(network_connection_token) = "#GameUI_Disconnect_ConnectionLost"]; 15 | NETWORK_DISCONNECT_OVERFLOW = 5 [(network_connection_token) = "#GameUI_Disconnect_ConnectionOverflow"]; 16 | NETWORK_DISCONNECT_STEAM_BANNED = 6 [(network_connection_token) = "#GameUI_Disconnect_SteamIDBanned"]; 17 | NETWORK_DISCONNECT_STEAM_INUSE = 7 [(network_connection_token) = "#GameUI_Disconnect_SteamIDInUse"]; 18 | NETWORK_DISCONNECT_STEAM_TICKET = 8 [(network_connection_token) = "#GameUI_Disconnect_SteamTicket"]; 19 | NETWORK_DISCONNECT_STEAM_LOGON = 9 [(network_connection_token) = "#GameUI_Disconnect_SteamLogon"]; 20 | NETWORK_DISCONNECT_STEAM_AUTHCANCELLED = 10 [(network_connection_token) = "#GameUI_Disconnect_SteamLogon"]; 21 | NETWORK_DISCONNECT_STEAM_AUTHALREADYUSED = 11 [(network_connection_token) = "#GameUI_Disconnect_SteamLogon"]; 22 | NETWORK_DISCONNECT_STEAM_AUTHINVALID = 12 [(network_connection_token) = "#GameUI_Disconnect_SteamLogon"]; 23 | NETWORK_DISCONNECT_STEAM_VACBANSTATE = 13 [(network_connection_token) = "#GameUI_Disconnect_SteamVAC"]; 24 | NETWORK_DISCONNECT_STEAM_LOGGED_IN_ELSEWHERE = 14 [(network_connection_token) = "#GameUI_Disconnect_SteamInUse"]; 25 | NETWORK_DISCONNECT_STEAM_VAC_CHECK_TIMEDOUT = 15 [(network_connection_token) = "#GameUI_Disconnect_SteamTimeOut"]; 26 | NETWORK_DISCONNECT_STEAM_DROPPED = 16 [(network_connection_token) = "#GameUI_Disconnect_SteamDropped"]; 27 | NETWORK_DISCONNECT_STEAM_OWNERSHIP = 17 [(network_connection_token) = "#GameUI_Disconnect_SteamOwnership"]; 28 | NETWORK_DISCONNECT_SERVERINFO_OVERFLOW = 18 [(network_connection_token) = "#GameUI_Disconnect_ServerInfoOverflow"]; 29 | NETWORK_DISCONNECT_TICKMSG_OVERFLOW = 19 [(network_connection_token) = "#GameUI_Disconnect_TickMessage"]; 30 | NETWORK_DISCONNECT_STRINGTABLEMSG_OVERFLOW = 20 [(network_connection_token) = "#GameUI_Disconnect_StringTableMessage"]; 31 | NETWORK_DISCONNECT_DELTAENTMSG_OVERFLOW = 21 [(network_connection_token) = "#GameUI_Disconnect_DeltaEntMessage"]; 32 | NETWORK_DISCONNECT_TEMPENTMSG_OVERFLOW = 22 [(network_connection_token) = "#GameUI_Disconnect_TempEntMessage"]; 33 | NETWORK_DISCONNECT_SOUNDSMSG_OVERFLOW = 23 [(network_connection_token) = "#GameUI_Disconnect_SoundsMessage"]; 34 | NETWORK_DISCONNECT_SNAPSHOTOVERFLOW = 24 [(network_connection_token) = "#GameUI_Disconnect_SnapshotOverflow"]; 35 | NETWORK_DISCONNECT_SNAPSHOTERROR = 25 [(network_connection_token) = "#GameUI_Disconnect_SnapshotError"]; 36 | NETWORK_DISCONNECT_RELIABLEOVERFLOW = 26 [(network_connection_token) = "#GameUI_Disconnect_ReliableOverflow"]; 37 | NETWORK_DISCONNECT_BADDELTATICK = 27 [(network_connection_token) = "#GameUI_Disconnect_BadClientDeltaTick"]; 38 | NETWORK_DISCONNECT_NOMORESPLITS = 28 [(network_connection_token) = "#GameUI_Disconnect_NoMoreSplits"]; 39 | NETWORK_DISCONNECT_TIMEDOUT = 29 [(network_connection_token) = "#GameUI_Disconnect_TimedOut"]; 40 | NETWORK_DISCONNECT_DISCONNECTED = 30 [(network_connection_token) = "#GameUI_Disconnect_Disconnected"]; 41 | NETWORK_DISCONNECT_LEAVINGSPLIT = 31 [(network_connection_token) = "#GameUI_Disconnect_LeavingSplit"]; 42 | NETWORK_DISCONNECT_DIFFERENTCLASSTABLES = 32 [(network_connection_token) = "#GameUI_Disconnect_DifferentClassTables"]; 43 | NETWORK_DISCONNECT_BADRELAYPASSWORD = 33 [(network_connection_token) = "#GameUI_Disconnect_BadRelayPassword"]; 44 | NETWORK_DISCONNECT_BADSPECTATORPASSWORD = 34 [(network_connection_token) = "#GameUI_Disconnect_BadSpectatorPassword"]; 45 | NETWORK_DISCONNECT_HLTVRESTRICTED = 35 [(network_connection_token) = "#GameUI_Disconnect_HLTVRestricted"]; 46 | NETWORK_DISCONNECT_NOSPECTATORS = 36 [(network_connection_token) = "#GameUI_Disconnect_NoSpectators"]; 47 | NETWORK_DISCONNECT_HLTVUNAVAILABLE = 37 [(network_connection_token) = "#GameUI_Disconnect_HLTVUnavailable"]; 48 | NETWORK_DISCONNECT_HLTVSTOP = 38 [(network_connection_token) = "#GameUI_Disconnect_HLTVStop"]; 49 | NETWORK_DISCONNECT_KICKED = 39 [(network_connection_token) = "#GameUI_Disconnect_Kicked"]; 50 | NETWORK_DISCONNECT_BANADDED = 40 [(network_connection_token) = "#GameUI_Disconnect_BanAdded"]; 51 | NETWORK_DISCONNECT_KICKBANADDED = 41 [(network_connection_token) = "#GameUI_Disconnect_KickBanAdded"]; 52 | NETWORK_DISCONNECT_HLTVDIRECT = 42 [(network_connection_token) = "#GameUI_Disconnect_HLTVDirect"]; 53 | NETWORK_DISCONNECT_PURESERVER_CLIENTEXTRA = 43 [(network_connection_token) = "#GameUI_Disconnect_PureServer_ClientExtra"]; 54 | NETWORK_DISCONNECT_PURESERVER_MISMATCH = 44 [(network_connection_token) = "#GameUI_Disconnect_PureServer_Mismatch"]; 55 | NETWORK_DISCONNECT_USERCMD = 45 [(network_connection_token) = "#GameUI_Disconnect_UserCmd"]; 56 | NETWORK_DISCONNECT_REJECTED_BY_GAME = 46 [(network_connection_token) = "#GameUI_Disconnect_RejectedByGame"]; 57 | NETWORK_DISCONNECT_MESSAGE_PARSE_ERROR = 47 [(network_connection_token) = "#GameUI_Disconnect_MessageParseError"]; 58 | NETWORK_DISCONNECT_INVALID_MESSAGE_ERROR = 48 [(network_connection_token) = "#GameUI_Disconnect_InvalidMessageError"]; 59 | NETWORK_DISCONNECT_BAD_SERVER_PASSWORD = 49 [(network_connection_token) = "#GameUI_Disconnect_BadServerPassword"]; 60 | NETWORK_DISCONNECT_DIRECT_CONNECT_RESERVATION = 50; 61 | NETWORK_DISCONNECT_CONNECTION_FAILURE = 51 [(network_connection_token) = "#GameUI_Disconnect_ConnectionFailure"]; 62 | NETWORK_DISCONNECT_NO_PEER_GROUP_HANDLERS = 52 [(network_connection_token) = "#GameUI_Disconnect_NoPeerGroupHandlers"]; 63 | NETWORK_DISCONNECT_RECONNECTION = 53; 64 | NETWORK_DISCONNECT_LOOPSHUTDOWN = 54 [(network_connection_token) = "#GameUI_Disconnect_LoopShutdown"]; 65 | NETWORK_DISCONNECT_LOOPDEACTIVATE = 55 [(network_connection_token) = "#GameUI_Disconnect_LoopDeactivate"]; 66 | NETWORK_DISCONNECT_HOST_ENDGAME = 56 [(network_connection_token) = "#GameUI_Disconnect_Host_EndGame"]; 67 | NETWORK_DISCONNECT_LOOP_LEVELLOAD_ACTIVATE = 57 [(network_connection_token) = "#GameUI_Disconnect_LoopLevelLoadActivate"]; 68 | NETWORK_DISCONNECT_CREATE_SERVER_FAILED = 58 [(network_connection_token) = "#GameUI_Disconnect_CreateServerFailed"]; 69 | NETWORK_DISCONNECT_EXITING = 59 [(network_connection_token) = "#GameUI_Disconnect_ExitingEngine"]; 70 | NETWORK_DISCONNECT_REQUEST_HOSTSTATE_IDLE = 60 [(network_connection_token) = "#GameUI_Disconnect_Request_HSIdle"]; 71 | NETWORK_DISCONNECT_REQUEST_HOSTSTATE_HLTVRELAY = 61 [(network_connection_token) = "#GameUI_Disconnect_Request_HLTVRelay"]; 72 | NETWORK_DISCONNECT_CLIENT_CONSISTENCY_FAIL = 62 [(network_connection_token) = "#GameUI_ClientConsistencyFail"]; 73 | NETWORK_DISCONNECT_CLIENT_UNABLE_TO_CRC_MAP = 63 [(network_connection_token) = "#GameUI_ClientUnableToCRCMap"]; 74 | NETWORK_DISCONNECT_CLIENT_NO_MAP = 64 [(network_connection_token) = "#GameUI_ClientNoMap"]; 75 | NETWORK_DISCONNECT_CLIENT_DIFFERENT_MAP = 65 [(network_connection_token) = "#GameUI_ClientDifferentMap"]; 76 | NETWORK_DISCONNECT_SERVER_REQUIRES_STEAM = 66 [(network_connection_token) = "#GameUI_ServerRequireSteams"]; 77 | NETWORK_DISCONNECT_STEAM_DENY_MISC = 67 [(network_connection_token) = "#GameUI_Disconnect_SteamDeny_Misc"]; 78 | NETWORK_DISCONNECT_STEAM_DENY_BAD_ANTI_CHEAT = 68 [(network_connection_token) = "#GameUI_Disconnect_SteamDeny_BadAntiCheat"]; 79 | NETWORK_DISCONNECT_SERVER_SHUTDOWN = 69 [(network_connection_token) = "#GameUI_Disconnect_ServerShutdown"]; 80 | NETWORK_DISCONNECT_SPLITPACKET_SEND_OVERFLOW = 70 [(network_connection_token) = "#GameUI_Disconnect_Splitpacket_Send_Overflow"]; 81 | NETWORK_DISCONNECT_REPLAY_INCOMPATIBLE = 71 [(network_connection_token) = "#GameUI_Disconnect_ReplayIncompatible"]; 82 | NETWORK_DISCONNECT_CONNECT_REQUEST_TIMEDOUT = 72 [(network_connection_token) = "#GameUI_Disconnect_ConnectionTimedout"]; 83 | NETWORK_DISCONNECT_SERVER_INCOMPATIBLE = 73 [(network_connection_token) = "#GameUI_Disconnect_ServerIncompatible"]; 84 | NETWORK_DISCONNECT_REJECT_BADCHALLENGE = 128 [(network_connection_token) = "#GameUI_ServerRejectBadChallenge"]; 85 | NETWORK_DISCONNECT_REJECT_NOLOBBY = 129 [(network_connection_token) = "#GameUI_ServerNoLobby"]; 86 | NETWORK_DISCONNECT_REJECT_BACKGROUND_MAP = 130 [(network_connection_token) = "#Valve_Reject_Background_Map"]; 87 | NETWORK_DISCONNECT_REJECT_SINGLE_PLAYER = 131 [(network_connection_token) = "#Valve_Reject_Single_Player"]; 88 | NETWORK_DISCONNECT_REJECT_HIDDEN_GAME = 132 [(network_connection_token) = "#Valve_Reject_Hidden_Game"]; 89 | NETWORK_DISCONNECT_REJECT_LANRESTRICT = 133 [(network_connection_token) = "#GameUI_ServerRejectLANRestrict"]; 90 | NETWORK_DISCONNECT_REJECT_BADPASSWORD = 134 [(network_connection_token) = "#GameUI_ServerRejectBadPassword"]; 91 | NETWORK_DISCONNECT_REJECT_SERVERFULL = 135 [(network_connection_token) = "#GameUI_ServerRejectServerFull"]; 92 | NETWORK_DISCONNECT_REJECT_INVALIDRESERVATION = 136 [(network_connection_token) = "#GameUI_ServerRejectInvalidReservation"]; 93 | NETWORK_DISCONNECT_REJECT_FAILEDCHANNEL = 137 [(network_connection_token) = "#GameUI_ServerRejectFailedChannel"]; 94 | NETWORK_DISCONNECT_REJECT_CONNECT_FROM_LOBBY = 138 [(network_connection_token) = "#Valve_Reject_Connect_From_Lobby"]; 95 | NETWORK_DISCONNECT_REJECT_RESERVED_FOR_LOBBY = 139 [(network_connection_token) = "#Valve_Reject_Reserved_For_Lobby"]; 96 | NETWORK_DISCONNECT_REJECT_INVALIDKEYLENGTH = 140 [(network_connection_token) = "#GameUI_ServerReject_InvalidKeyLength"]; 97 | NETWORK_DISCONNECT_REJECT_OLDPROTOCOL = 141 [(network_connection_token) = "#GameUI_ServerRejectOldProtocol"]; 98 | NETWORK_DISCONNECT_REJECT_NEWPROTOCOL = 142 [(network_connection_token) = "#GameUI_ServerRejectNewProtocol"]; 99 | NETWORK_DISCONNECT_REJECT_INVALIDCONNECTION = 143 [(network_connection_token) = "#GameUI_ServerRejectInvalidConnection"]; 100 | NETWORK_DISCONNECT_REJECT_INVALIDCERTLEN = 144 [(network_connection_token) = "#GameUI_ServerRejectInvalidCertLen"]; 101 | NETWORK_DISCONNECT_REJECT_INVALIDSTEAMCERTLEN = 145 [(network_connection_token) = "#GameUI_ServerRejectInvalidSteamCertLen"]; 102 | NETWORK_DISCONNECT_REJECT_STEAM = 146 [(network_connection_token) = "#GameUI_ServerRejectSteam"]; 103 | NETWORK_DISCONNECT_REJECT_SERVERAUTHDISABLED = 147 [(network_connection_token) = "#GameUI_ServerAuthDisabled"]; 104 | NETWORK_DISCONNECT_REJECT_SERVERCDKEYAUTHINVALID = 148 [(network_connection_token) = "#GameUI_ServerCDKeyAuthInvalid"]; 105 | NETWORK_DISCONNECT_REJECT_BANNED = 149 [(network_connection_token) = "#GameUI_ServerRejectBanned"]; 106 | } 107 | 108 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/dota_shared_enums.proto: -------------------------------------------------------------------------------- 1 | option optimize_for = SPEED; 2 | option cc_generic_services = false; 3 | 4 | enum DOTA_GameMode { 5 | DOTA_GAMEMODE_NONE = 0; 6 | DOTA_GAMEMODE_AP = 1; 7 | DOTA_GAMEMODE_CM = 2; 8 | DOTA_GAMEMODE_RD = 3; 9 | DOTA_GAMEMODE_SD = 4; 10 | DOTA_GAMEMODE_AR = 5; 11 | DOTA_GAMEMODE_INTRO = 6; 12 | DOTA_GAMEMODE_HW = 7; 13 | DOTA_GAMEMODE_REVERSE_CM = 8; 14 | DOTA_GAMEMODE_XMAS = 9; 15 | DOTA_GAMEMODE_TUTORIAL = 10; 16 | DOTA_GAMEMODE_MO = 11; 17 | DOTA_GAMEMODE_LP = 12; 18 | DOTA_GAMEMODE_POOL1 = 13; 19 | DOTA_GAMEMODE_FH = 14; 20 | DOTA_GAMEMODE_CUSTOM = 15; 21 | DOTA_GAMEMODE_CD = 16; 22 | DOTA_GAMEMODE_BD = 17; 23 | DOTA_GAMEMODE_ABILITY_DRAFT = 18; 24 | DOTA_GAMEMODE_EVENT = 19; 25 | DOTA_GAMEMODE_ARDM = 20; 26 | DOTA_GAMEMODE_1V1MID = 21; 27 | DOTA_GAMEMODE_ALL_DRAFT = 22; 28 | } 29 | 30 | enum DOTA_GameState { 31 | DOTA_GAMERULES_STATE_INIT = 0; 32 | DOTA_GAMERULES_STATE_WAIT_FOR_PLAYERS_TO_LOAD = 1; 33 | DOTA_GAMERULES_STATE_HERO_SELECTION = 2; 34 | DOTA_GAMERULES_STATE_STRATEGY_TIME = 3; 35 | DOTA_GAMERULES_STATE_PRE_GAME = 4; 36 | DOTA_GAMERULES_STATE_GAME_IN_PROGRESS = 5; 37 | DOTA_GAMERULES_STATE_POST_GAME = 6; 38 | DOTA_GAMERULES_STATE_DISCONNECT = 7; 39 | DOTA_GAMERULES_STATE_TEAM_SHOWCASE = 8; 40 | DOTA_GAMERULES_STATE_CUSTOM_GAME_SETUP = 9; 41 | DOTA_GAMERULES_STATE_WAIT_FOR_MAP_TO_LOAD = 10; 42 | DOTA_GAMERULES_STATE_LAST = 11; 43 | } 44 | 45 | enum DOTA_GC_TEAM { 46 | DOTA_GC_TEAM_GOOD_GUYS = 0; 47 | DOTA_GC_TEAM_BAD_GUYS = 1; 48 | DOTA_GC_TEAM_BROADCASTER = 2; 49 | DOTA_GC_TEAM_SPECTATOR = 3; 50 | DOTA_GC_TEAM_PLAYER_POOL = 4; 51 | DOTA_GC_TEAM_NOTEAM = 5; 52 | } 53 | 54 | enum EEvent { 55 | EVENT_ID_NONE = 0; 56 | EVENT_ID_DIRETIDE = 1; 57 | EVENT_ID_SPRING_FESTIVAL = 2; 58 | EVENT_ID_FROSTIVUS_2013 = 3; 59 | EVENT_ID_COMPENDIUM_2014 = 4; 60 | EVENT_ID_NEXON_PC_BANG = 5; 61 | EVENT_ID_PWRD_DAC_2015 = 6; 62 | EVENT_ID_NEW_BLOOM_2015 = 7; 63 | EVENT_ID_INTERNATIONAL_2015 = 8; 64 | EVENT_ID_FALL_MAJOR_2015 = 9; 65 | EVENT_ID_ORACLE_PA = 10; 66 | EVENT_ID_NEW_BLOOM_2015_PREBEAST = 11; 67 | EVENT_ID_FROSTIVUS = 12; 68 | EVENT_ID_WINTER_MAJOR_2016 = 13; 69 | EVENT_ID_INTERNATIONAL_2016 = 14; 70 | EVENT_ID_FALL_MAJOR_2016 = 15; 71 | EVENT_ID_WINTER_MAJOR_2017 = 16; 72 | EVENT_ID_NEW_BLOOM_2017 = 17; 73 | EVENT_ID_INTERNATIONAL_2017 = 18; 74 | EVENT_ID_COUNT = 19; 75 | } 76 | 77 | enum DOTALeaverStatus_t { 78 | DOTA_LEAVER_NONE = 0; 79 | DOTA_LEAVER_DISCONNECTED = 1; 80 | DOTA_LEAVER_DISCONNECTED_TOO_LONG = 2; 81 | DOTA_LEAVER_ABANDONED = 3; 82 | DOTA_LEAVER_AFK = 4; 83 | DOTA_LEAVER_NEVER_CONNECTED = 5; 84 | DOTA_LEAVER_NEVER_CONNECTED_TOO_LONG = 6; 85 | DOTA_LEAVER_FAILED_TO_READY_UP = 7; 86 | DOTA_LEAVER_DECLINED = 8; 87 | } 88 | 89 | enum DOTAConnectionState_t { 90 | DOTA_CONNECTION_STATE_UNKNOWN = 0; 91 | DOTA_CONNECTION_STATE_NOT_YET_CONNECTED = 1; 92 | DOTA_CONNECTION_STATE_CONNECTED = 2; 93 | DOTA_CONNECTION_STATE_DISCONNECTED = 3; 94 | DOTA_CONNECTION_STATE_ABANDONED = 4; 95 | DOTA_CONNECTION_STATE_LOADING = 5; 96 | DOTA_CONNECTION_STATE_FAILED = 6; 97 | } 98 | 99 | enum Fantasy_Roles { 100 | FANTASY_ROLE_UNDEFINED = 0; 101 | FANTASY_ROLE_CORE = 1; 102 | FANTASY_ROLE_SUPPORT = 2; 103 | FANTASY_ROLE_OFFLANE = 3; 104 | } 105 | 106 | enum Fantasy_Team_Slots { 107 | FANTASY_SLOT_NONE = 0; 108 | FANTASY_SLOT_CORE = 1; 109 | FANTASY_SLOT_SUPPORT = 2; 110 | FANTASY_SLOT_ANY = 3; 111 | FANTASY_SLOT_BENCH = 4; 112 | } 113 | 114 | enum Fantasy_Selection_Mode { 115 | FANTASY_SELECTION_INVALID = 0; 116 | FANTASY_SELECTION_LOCKED = 1; 117 | FANTASY_SELECTION_SHUFFLE = 2; 118 | FANTASY_SELECTION_FREE_PICK = 3; 119 | FANTASY_SELECTION_ENDED = 4; 120 | FANTASY_SELECTION_PRE_SEASON = 5; 121 | FANTASY_SELECTION_PRE_DRAFT = 6; 122 | FANTASY_SELECTION_DRAFTING = 7; 123 | FANTASY_SELECTION_REGULAR_SEASON = 8; 124 | FANTASY_SELECTION_CARD_BASED = 9; 125 | } 126 | 127 | enum DOTAChatChannelType_t { 128 | DOTAChannelType_Regional = 0; 129 | DOTAChannelType_Custom = 1; 130 | DOTAChannelType_Party = 2; 131 | DOTAChannelType_Lobby = 3; 132 | DOTAChannelType_Team = 4; 133 | DOTAChannelType_Guild = 5; 134 | DOTAChannelType_Fantasy = 6; 135 | DOTAChannelType_Whisper = 7; 136 | DOTAChannelType_Console = 8; 137 | DOTAChannelType_Tab = 9; 138 | DOTAChannelType_Invalid = 10; 139 | DOTAChannelType_GameAll = 11; 140 | DOTAChannelType_GameAllies = 12; 141 | DOTAChannelType_GameSpectator = 13; 142 | DOTAChannelType_Cafe = 15; 143 | DOTAChannelType_CustomGame = 16; 144 | DOTAChannelType_Private = 17; 145 | DOTAChannelType_PostGame = 18; 146 | DOTAChannelType_BattleCup = 19; 147 | DOTAChannelType_HLTVSpectator = 20; 148 | DOTAChannelType_GameEvents = 21; 149 | DOTAChannelType_Trivia = 22; 150 | } 151 | 152 | enum EProfileCardSlotType { 153 | k_EProfileCardSlotType_Empty = 0; 154 | k_EProfileCardSlotType_Stat = 1; 155 | k_EProfileCardSlotType_Trophy = 2; 156 | k_EProfileCardSlotType_Item = 3; 157 | k_EProfileCardSlotType_Hero = 4; 158 | k_EProfileCardSlotType_Emoticon = 5; 159 | k_EProfileCardSlotType_Team = 6; 160 | } 161 | 162 | enum EMatchGroupServerStatus { 163 | k_EMatchGroupServerStatus_OK = 0; 164 | k_EMatchGroupServerStatus_LimitedAvailability = 1; 165 | k_EMatchGroupServerStatus_Offline = 2; 166 | } 167 | 168 | enum DOTA_CM_PICK { 169 | DOTA_CM_RANDOM = 0; 170 | DOTA_CM_GOOD_GUYS = 1; 171 | DOTA_CM_BAD_GUYS = 2; 172 | } 173 | 174 | enum DOTALowPriorityBanType { 175 | DOTA_LOW_PRIORITY_BAN_ABANDON = 0; 176 | DOTA_LOW_PRIORITY_BAN_REPORTS = 1; 177 | DOTA_LOW_PRIORITY_BAN_SECONDARY_ABANDON = 2; 178 | } 179 | 180 | enum DOTALobbyReadyState { 181 | DOTALobbyReadyState_UNDECLARED = 0; 182 | DOTALobbyReadyState_ACCEPTED = 1; 183 | DOTALobbyReadyState_DECLINED = 2; 184 | } 185 | 186 | enum DOTAGameVersion { 187 | GAME_VERSION_CURRENT = 0; 188 | GAME_VERSION_STABLE = 1; 189 | } 190 | 191 | enum DOTAJoinLobbyResult { 192 | DOTA_JOIN_RESULT_SUCCESS = 0; 193 | DOTA_JOIN_RESULT_ALREADY_IN_GAME = 1; 194 | DOTA_JOIN_RESULT_INVALID_LOBBY = 2; 195 | DOTA_JOIN_RESULT_INCORRECT_PASSWORD = 3; 196 | DOTA_JOIN_RESULT_ACCESS_DENIED = 4; 197 | DOTA_JOIN_RESULT_GENERIC_ERROR = 5; 198 | DOTA_JOIN_RESULT_INCORRECT_VERSION = 6; 199 | DOTA_JOIN_RESULT_IN_TEAM_PARTY = 7; 200 | DOTA_JOIN_RESULT_NO_LOBBY_FOUND = 8; 201 | DOTA_JOIN_RESULT_LOBBY_FULL = 9; 202 | DOTA_JOIN_RESULT_CUSTOM_GAME_INCORRECT_VERSION = 10; 203 | DOTA_JOIN_RESULT_TIMEOUT = 11; 204 | } 205 | 206 | enum SelectionPriorityType { 207 | UNDEFINED = 0; 208 | RADIANT = 1; 209 | DIRE = 2; 210 | FIRST_PICK = 3; 211 | SECOND_PICK = 4; 212 | } 213 | 214 | enum DOTAMatchVote { 215 | DOTAMatchVote_INVALID = 0; 216 | DOTAMatchVote_POSITIVE = 1; 217 | DOTAMatchVote_NEGATIVE = 2; 218 | } 219 | 220 | enum DOTA_LobbyMemberXPBonus { 221 | DOTA_LobbyMemberXPBonus_DEFAULT = 0; 222 | DOTA_LobbyMemberXPBonus_BATTLE_BOOSTER = 1; 223 | DOTA_LobbyMemberXPBonus_SHARE_BONUS = 2; 224 | DOTA_LobbyMemberXPBonus_PARTY = 3; 225 | DOTA_LobbyMemberXPBonus_RECRUITMENT = 4; 226 | DOTA_LobbyMemberXPBonus_PCBANG = 5; 227 | } 228 | 229 | enum DOTALobbyVisibility { 230 | DOTALobbyVisibility_Public = 0; 231 | DOTALobbyVisibility_Friends = 1; 232 | DOTALobbyVisibility_Unlisted = 2; 233 | } 234 | 235 | enum EDOTAPlayerMMRType { 236 | k_EDOTAPlayerMMRType_Invalid = 0; 237 | k_EDOTAPlayerMMRType_GeneralHidden = 1; 238 | k_EDOTAPlayerMMRType_SoloHidden = 2; 239 | k_EDOTAPlayerMMRType_GeneralCompetitive = 3; 240 | k_EDOTAPlayerMMRType_SoloCompetitive = 4; 241 | k_EDOTAPlayerMMRType_1v1Competitive_UNUSED = 5; 242 | k_EDOTAPlayerMMRType_GeneralSeasonalRanked = 6; 243 | k_EDOTAPlayerMMRType_SoloSeasonalRanked = 7; 244 | } 245 | 246 | enum MatchType { 247 | MATCH_TYPE_CASUAL = 0; 248 | MATCH_TYPE_COOP_BOTS = 1; 249 | MATCH_TYPE_TEAM_RANKED = 2; 250 | MATCH_TYPE_LEGACY_SOLO_QUEUE = 3; 251 | MATCH_TYPE_COMPETITIVE = 4; 252 | MATCH_TYPE_WEEKEND_TOURNEY = 5; 253 | MATCH_TYPE_CASUAL_1V1 = 6; 254 | MATCH_TYPE_EVENT = 7; 255 | MATCH_TYPE_SEASONAL_RANKED = 8; 256 | } 257 | 258 | enum DOTABotDifficulty { 259 | BOT_DIFFICULTY_PASSIVE = 0; 260 | BOT_DIFFICULTY_EASY = 1; 261 | BOT_DIFFICULTY_MEDIUM = 2; 262 | BOT_DIFFICULTY_HARD = 3; 263 | BOT_DIFFICULTY_UNFAIR = 4; 264 | BOT_DIFFICULTY_INVALID = 5; 265 | BOT_DIFFICULTY_EXTRA1 = 6; 266 | BOT_DIFFICULTY_EXTRA2 = 7; 267 | BOT_DIFFICULTY_EXTRA3 = 8; 268 | } 269 | 270 | enum DOTA_BOT_MODE { 271 | DOTA_BOT_MODE_NONE = 0; 272 | DOTA_BOT_MODE_LANING = 1; 273 | DOTA_BOT_MODE_ATTACK = 2; 274 | DOTA_BOT_MODE_ROAM = 3; 275 | DOTA_BOT_MODE_RETREAT = 4; 276 | DOTA_BOT_MODE_SECRET_SHOP = 5; 277 | DOTA_BOT_MODE_SIDE_SHOP = 6; 278 | DOTA_BOT_MODE_RUNE = 7; 279 | DOTA_BOT_MODE_PUSH_TOWER_TOP = 8; 280 | DOTA_BOT_MODE_PUSH_TOWER_MID = 9; 281 | DOTA_BOT_MODE_PUSH_TOWER_BOT = 10; 282 | DOTA_BOT_MODE_DEFEND_TOWER_TOP = 11; 283 | DOTA_BOT_MODE_DEFEND_TOWER_MID = 12; 284 | DOTA_BOT_MODE_DEFEND_TOWER_BOT = 13; 285 | DOTA_BOT_MODE_ASSEMBLE = 14; 286 | DOTA_BOT_MODE_ASSEMBLE_WITH_HUMANS = 15; 287 | DOTA_BOT_MODE_TEAM_ROAM = 16; 288 | DOTA_BOT_MODE_FARM = 17; 289 | DOTA_BOT_MODE_DEFEND_ALLY = 18; 290 | DOTA_BOT_MODE_EVASIVE_MANEUVERS = 19; 291 | DOTA_BOT_MODE_ROSHAN = 20; 292 | DOTA_BOT_MODE_ITEM = 21; 293 | DOTA_BOT_MODE_WARD = 22; 294 | DOTA_BOT_MODE_COMPANION = 23; 295 | DOTA_BOT_MODE_TUTORIAL_BOSS = 24; 296 | DOTA_BOT_MODE_MINION = 25; 297 | } 298 | 299 | enum MatchLanguages { 300 | MATCH_LANGUAGE_INVALID = 0; 301 | MATCH_LANGUAGE_ENGLISH = 1; 302 | MATCH_LANGUAGE_RUSSIAN = 2; 303 | MATCH_LANGUAGE_CHINESE = 3; 304 | MATCH_LANGUAGE_KOREAN = 4; 305 | MATCH_LANGUAGE_SPANISH = 5; 306 | MATCH_LANGUAGE_PORTUGUESE = 6; 307 | MATCH_LANGUAGE_ENGLISH2 = 7; 308 | } 309 | 310 | enum ETourneyQueueDeadlineState { 311 | k_ETourneyQueueDeadlineState_Normal = 0; 312 | k_ETourneyQueueDeadlineState_Missed = 1; 313 | k_ETourneyQueueDeadlineState_ExpiredOK = 2; 314 | k_ETourneyQueueDeadlineState_SeekingBye = 3; 315 | k_ETourneyQueueDeadlineState_EligibleForRefund = 4; 316 | k_ETourneyQueueDeadlineState_NA = -1; 317 | k_ETourneyQueueDeadlineState_ExpiringSoon = 101; 318 | } 319 | 320 | enum EMatchOutcome { 321 | k_EMatchOutcome_Unknown = 0; 322 | k_EMatchOutcome_RadVictory = 2; 323 | k_EMatchOutcome_DireVictory = 3; 324 | k_EMatchOutcome_NotScored_PoorNetworkConditions = 64; 325 | k_EMatchOutcome_NotScored_Leaver = 65; 326 | k_EMatchOutcome_NotScored_ServerCrash = 66; 327 | k_EMatchOutcome_NotScored_NeverStarted = 67; 328 | k_EMatchOutcome_NotScored_Canceled = 68; 329 | } 330 | 331 | message CDOTAClientHardwareSpecs { 332 | optional uint32 logical_processors = 1; 333 | optional fixed64 cpu_cycles_per_second = 2; 334 | optional fixed64 total_physical_memory = 3; 335 | optional bool is_64_bit_os = 4; 336 | optional uint64 upload_measurement = 5; 337 | optional bool prefer_not_host = 6; 338 | } 339 | 340 | message CDOTASaveGame { 341 | message Player { 342 | optional .DOTA_GC_TEAM team = 1 [default = DOTA_GC_TEAM_GOOD_GUYS]; 343 | optional string name = 2; 344 | optional string hero = 3; 345 | } 346 | 347 | message SaveInstance { 348 | message PlayerPositions { 349 | optional float x = 1; 350 | optional float y = 2; 351 | } 352 | 353 | optional uint32 game_time = 2; 354 | optional uint32 team1_score = 3; 355 | optional uint32 team2_score = 4; 356 | repeated .CDOTASaveGame.SaveInstance.PlayerPositions player_positions = 5; 357 | optional uint32 save_id = 6; 358 | optional uint32 save_time = 7; 359 | } 360 | 361 | optional uint64 match_id = 5; 362 | optional uint32 save_time = 2; 363 | repeated .CDOTASaveGame.Player players = 3; 364 | repeated .CDOTASaveGame.SaveInstance save_instances = 4; 365 | } 366 | 367 | -------------------------------------------------------------------------------- /Resources/Protobufs/dota/steammessages_publishedfile.steamworkssdk.proto: -------------------------------------------------------------------------------- 1 | import "steammessages_unified_base.steamworkssdk.proto"; 2 | 3 | message CPublishedFile_Subscribe_Request { 4 | optional uint64 publishedfileid = 1; 5 | optional uint32 list_type = 2; 6 | optional int32 appid = 3; 7 | optional bool notify_client = 4; 8 | } 9 | 10 | message CPublishedFile_Subscribe_Response { 11 | } 12 | 13 | message CPublishedFile_Unsubscribe_Request { 14 | optional uint64 publishedfileid = 1; 15 | optional uint32 list_type = 2; 16 | optional int32 appid = 3; 17 | optional bool notify_client = 4; 18 | } 19 | 20 | message CPublishedFile_Unsubscribe_Response { 21 | } 22 | 23 | message CPublishedFile_Publish_Request { 24 | optional uint32 appid = 1 [(description) = "App Id this file is being published FROM."]; 25 | optional uint32 consumer_appid = 2 [(description) = "App Id this file is being published TO."]; 26 | optional string cloudfilename = 3 [(description) = "Name of the file to publish in the user's cloud."]; 27 | optional string preview_cloudfilename = 4 [(description) = "Name of the file to use as the published file's preview."]; 28 | optional string title = 5 [(description) = "Text title for the published file."]; 29 | optional string file_description = 6 [(description) = "Text description for the published file."]; 30 | optional uint32 file_type = 7 [(description) = "(EWorkshopFileType) Type of Workshop file to publish."]; 31 | optional string consumer_shortcut_name = 8 [(description) = "Shortcut name for the published file."]; 32 | optional string youtube_username = 9 [(description) = "(Optional) User's YouTube account username."]; 33 | optional string youtube_videoid = 10 [(description) = "(Optional) Video Id of a YouTube video for this published file."]; 34 | optional uint32 visibility = 11 [(description) = "(ERemoteStoragePublishedFileVisibility) Visibility of the published file (private, friends, public, etc.)"]; 35 | optional string redirect_uri = 12 [(description) = "(Optional) If supplied, the resulting published file's Id is appended to the URI."]; 36 | repeated string tags = 13 [(description) = "Array of text tags to apply to the published file."]; 37 | optional string collection_type = 14 [(description) = "(Optional) Type of collection the published file represents."]; 38 | optional string game_type = 15 [(description) = "(Optional) Type of game the published file represents."]; 39 | optional string url = 16 [(description) = "(Optional) If this represents a game, this is the URL to that game's page."]; 40 | } 41 | 42 | message CPublishedFile_Publish_Response { 43 | optional uint64 publishedfileid = 1; 44 | optional string redirect_uri = 2; 45 | } 46 | 47 | message CPublishedFile_GetDetails_Request { 48 | repeated fixed64 publishedfileids = 1 [(description) = "Set of published file Ids to retrieve details for."]; 49 | optional bool includetags = 2 [(description) = "If true, return tag information in the returned details."]; 50 | optional bool includeadditionalpreviews = 3 [(description) = "If true, return preview information in the returned details."]; 51 | optional bool includechildren = 4 [(description) = "If true, return children in the returned details."]; 52 | optional bool includekvtags = 5 [(description) = "If true, return key value tags in the returned details."]; 53 | optional bool includevotes = 6 [(description) = "If true, return vote data in the returned details."]; 54 | optional bool short_description = 8 [(description) = "If true, return a short description instead of the full description."]; 55 | } 56 | 57 | message PublishedFileDetails { 58 | message Tag { 59 | optional string tag = 1; 60 | optional bool adminonly = 2; 61 | } 62 | 63 | message Preview { 64 | optional uint64 previewid = 1; 65 | optional uint32 sortorder = 2; 66 | optional string url = 3; 67 | optional uint32 size = 4; 68 | optional string filename = 5; 69 | optional string youtubevideoid = 6; 70 | } 71 | 72 | message Child { 73 | optional uint64 publishedfileid = 1; 74 | optional uint32 sortorder = 2; 75 | optional uint32 file_type = 3; 76 | } 77 | 78 | message KVTag { 79 | optional string key = 1; 80 | optional string value = 2; 81 | } 82 | 83 | message VoteData { 84 | optional float score = 1; 85 | optional uint32 votes_up = 2; 86 | optional uint32 votes_down = 3; 87 | } 88 | 89 | optional uint32 result = 1; 90 | optional uint64 publishedfileid = 2; 91 | optional fixed64 creator = 3; 92 | optional uint32 creator_appid = 4; 93 | optional uint32 consumer_appid = 5; 94 | optional uint32 consumer_shortcutid = 6; 95 | optional string filename = 7; 96 | optional uint64 file_size = 8; 97 | optional uint64 preview_file_size = 9; 98 | optional string file_url = 10; 99 | optional string preview_url = 11; 100 | optional string youtubevideoid = 12; 101 | optional string url = 13; 102 | optional fixed64 hcontent_file = 14; 103 | optional fixed64 hcontent_preview = 15; 104 | optional string title = 16; 105 | optional string file_description = 17; 106 | optional string short_description = 18; 107 | optional uint32 time_created = 19; 108 | optional uint32 time_updated = 20; 109 | optional uint32 visibility = 21; 110 | optional uint32 flags = 22; 111 | optional bool workshop_file = 23; 112 | optional bool workshop_accepted = 24; 113 | optional bool show_subscribe_all = 25; 114 | optional int32 num_comments_developer = 26; 115 | optional int32 num_comments_public = 27; 116 | optional bool banned = 28; 117 | optional string ban_reason = 29; 118 | optional fixed64 banner = 30; 119 | optional bool can_be_deleted = 31; 120 | optional bool incompatible = 32; 121 | optional string app_name = 33; 122 | optional uint32 file_type = 34; 123 | optional bool can_subscribe = 35; 124 | optional uint32 subscriptions = 36; 125 | optional uint32 favorited = 37; 126 | optional uint32 followers = 38; 127 | optional uint32 lifetime_subscriptions = 39; 128 | optional uint32 lifetime_favorited = 40; 129 | optional uint32 lifetime_followers = 41; 130 | optional uint32 views = 42; 131 | optional uint32 image_width = 43; 132 | optional uint32 image_height = 44; 133 | optional string image_url = 45; 134 | optional bool spoiler_tag = 46; 135 | optional uint32 shortcutid = 47; 136 | optional string shortcutname = 48; 137 | optional uint32 num_children = 49; 138 | optional uint32 num_reports = 50; 139 | repeated .PublishedFileDetails.Preview previews = 51; 140 | repeated .PublishedFileDetails.Tag tags = 52; 141 | repeated .PublishedFileDetails.Child children = 53; 142 | repeated .PublishedFileDetails.KVTag kvtags = 54; 143 | optional .PublishedFileDetails.VoteData vote_data = 55; 144 | optional uint32 time_subscribed = 56 [(description) = "Only valid in PublishedFile.GetUserFiles and not normal PublishedFile.GetDetail calls"]; 145 | } 146 | 147 | message CPublishedFile_GetDetails_Response { 148 | repeated .PublishedFileDetails publishedfiledetails = 1; 149 | } 150 | 151 | message CPublishedFile_GetUserFiles_Request { 152 | optional uint32 appid = 1 [(description) = "App Id to retrieve published files from."]; 153 | optional uint32 page = 3 [default = 1, (description) = "(Optional) Starting page for results."]; 154 | optional uint32 numperpage = 4 [default = 1, (description) = "(Optional) The number of results, per page to return."]; 155 | optional string sortmethod = 6 [default = "lastupdated", (description) = "(Optional) Sorting method to use on returned values."]; 156 | optional bool totalonly = 7 [(description) = "(Optional) If true, only return the total number of files that satisfy this query."]; 157 | optional uint32 privacy = 9 [(description) = "(optional) Filter by privacy settings."]; 158 | optional bool ids_only = 10 [(description) = "(Optional) If true, only return the published file ids of files that satisfy this query."]; 159 | repeated string requiredtags = 11 [(description) = "(Optional) Tags that must be present on a published file to satisfy the query."]; 160 | repeated string excludedtags = 12 [(description) = "(Optional) Tags that must NOT be present on a published file to satisfy the query."]; 161 | } 162 | 163 | message CPublishedFile_GetUserFiles_Response { 164 | message App { 165 | optional uint32 appid = 1; 166 | optional string name = 2; 167 | optional uint32 shortcutid = 3; 168 | optional bool private = 4; 169 | } 170 | 171 | optional uint32 total = 1; 172 | optional uint32 startindex = 2; 173 | repeated .PublishedFileDetails publishedfiledetails = 3; 174 | repeated .CPublishedFile_GetUserFiles_Response.App apps = 4; 175 | } 176 | 177 | message CPublishedFile_Update_Request { 178 | optional uint32 appid = 1 [(description) = "App Id this published file belongs to."]; 179 | optional fixed64 publishedfileid = 2 [(description) = "Published file id of the file we'd like update."]; 180 | optional string title = 3 [(description) = "(Optional) Title of the published file."]; 181 | optional string file_description = 4 [(description) = "(Optional) Description of the published file."]; 182 | optional uint32 visibility = 5 [(description) = "(Optional) Visibility of the published file."]; 183 | repeated string tags = 6 [(description) = "(Optional) Set of tags for the published file."]; 184 | optional string filename = 7 [(description) = "(Optional) Filename for the published file."]; 185 | optional string preview_filename = 8 [(description) = "(Optional) Preview filename for the published file."]; 186 | } 187 | 188 | message CPublishedFile_Update_Response { 189 | } 190 | 191 | message CPublishedFile_RefreshVotingQueue_Request { 192 | optional uint32 appid = 1; 193 | optional uint32 matching_file_type = 2 [(description) = "EPublishedFileInfoMatchingFileType"]; 194 | repeated string tags = 3 [(description) = "Include files that have all the tags or any of the tags if match_all_tags is set to false."]; 195 | optional bool match_all_tags = 4 [default = true, (description) = "If true, then files must have all the tags specified. If false, then must have at least one of the tags specified."]; 196 | repeated string excluded_tags = 5 [(description) = "Exclude any files that have any of these tags."]; 197 | optional uint32 desired_queue_size = 6 [(description) = "Desired number of items in the voting queue. May be clamped by the server"]; 198 | } 199 | 200 | message CPublishedFile_RefreshVotingQueue_Response { 201 | } 202 | 203 | service PublishedFile { 204 | option (service_description) = "A service to access published file data"; 205 | rpc Subscribe (.CPublishedFile_Subscribe_Request) returns (.CPublishedFile_Subscribe_Response) { 206 | option (method_description) = "Subscribes the user to the published file"; 207 | } 208 | rpc Unsubscribe (.CPublishedFile_Unsubscribe_Request) returns (.CPublishedFile_Unsubscribe_Response) { 209 | option (method_description) = "Unsubscribes the user from the published file"; 210 | } 211 | rpc Publish (.CPublishedFile_Publish_Request) returns (.CPublishedFile_Publish_Response) { 212 | option (method_description) = "Publishes a clouded user file to the Workshop."; 213 | } 214 | rpc GetDetails (.CPublishedFile_GetDetails_Request) returns (.CPublishedFile_GetDetails_Response) { 215 | option (method_description) = "Retrieves information about a set of published files."; 216 | } 217 | rpc GetUserFiles (.CPublishedFile_GetUserFiles_Request) returns (.CPublishedFile_GetUserFiles_Response) { 218 | option (method_description) = "Retrieves files published by a user."; 219 | } 220 | rpc Update (.CPublishedFile_Update_Request) returns (.CPublishedFile_Update_Response) { 221 | option (method_description) = "Updates information about a published file."; 222 | } 223 | rpc RefreshVotingQueue (.CPublishedFile_RefreshVotingQueue_Request) returns (.CPublishedFile_RefreshVotingQueue_Response) { 224 | option (method_description) = "Refresh the voting queue for the user"; 225 | } 226 | } 227 | --------------------------------------------------------------------------------