├── .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 [](https://travis-ci.org/paralin/Dota2)
2 | ---
3 |
4 | [](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 |
--------------------------------------------------------------------------------