import "steammessages.proto"; option optimize_for = SPEED; option cc_generic_services = false; enum EGCDCGCommonMessages { k_EMsgAnyToGCReportAsserts = 7000; k_EMsgAnyToGCReportAssertsResponse = 7001; } enum EDCGMatchMode { k_EDCGMatchMode_Unranked = 2; k_EDCGMatchMode_Gauntlet = 3; k_EDCGMatchMode_PrivateLobby = 6; k_EDCGMatchMode_Puzzle = 7; k_EDCGMatchMode_AI = 8; k_EDCGMatchMode_Tournament = 9; } enum EDCGLobbyTeam { k_EDCGLobbyTeam_Team0 = 0; k_EDCGLobbyTeam_Team1 = 1; k_EDCGLobbyTeam_Spectator = 16; } enum EDCGLobbyTimer { k_eDCGLobbyTimer_Unspecified = 0; k_eDCGLobbyTimer_Disabled = 1; k_eDCGLobbyTimer_Default = 2; k_eDCGLobbyTimer_Tournament = 3; k_eDCGLobbyTimer_TimeAttack = 4; k_eDCGLobbyTimer_ShotClockOnly = 5; } enum ELobbyServerState { k_eLobbyServerState_Assign = 0; k_eLobbyServerState_InGame = 1; k_eLobbyServerState_PostMatch = 2; k_eLobbyServerState_SignedOut = 3; k_eLobbyServerState_Abandoned = 4; } enum EGCLobbyData { k_ELobbyData_PostMatchSurvey = 1; } enum DCG_COMBATLOG_TYPES { DCG_COMBATLOG_INVALID = -1; DCG_COMBATLOG_DAMAGE = 0; DCG_COMBATLOG_HEAL = 1; DCG_COMBATLOG_DRAW = 2; DCG_COMBATLOG_PASS = 3; DCG_COMBATLOG_COMBAT = 4; DCG_COMBATLOG_PLAY_CREEP = 5; DCG_COMBATLOG_PLAY_IMPROVEMENT = 6; DCG_COMBATLOG_PLAY_SPELL = 7; DCG_COMBATLOG_PLAY_EQUIPMENT = 8; DCG_COMBATLOG_PLAY_ABILITY = 9; DCG_COMBATLOG_GAIN_GOLD = 10; DCG_COMBATLOG_BUY_ITEM = 11; DCG_COMBATLOG_DISCARD = 12; DCG_COMBATLOG_ADD_MODIFIER = 13; DCG_COMBATLOG_REMOVE_MODIFIER = 14; DCG_COMBATLOG_KILL = 15; DCG_COMBATLOG_CARD_MOVE = 16; DCG_COMBATLOG_CREEP_SPAWN = 17; DCG_COMBATLOG_DEATH = 18; DCG_COMBATLOG_COMBAT_OVER = 19; DCG_COMBATLOG_BEGGINING_OF_SPELLCASTING = 20; DCG_COMBATLOG_BEGGINING_OF_SPELLCASTING_END = 21; DCG_COMBATLOG_UNIT_ENTERING_COMBAT = 22; DCG_COMBATLOG_UNIT_LEAVING_COMBAT = 23; DCG_COMBATLOG_TRIGGER_TRIGGERED = 24; } message CExtraMsgBlock { optional uint32 msg_type = 1; optional bytes contents = 2; optional uint64 msg_key = 3; optional bool is_compressed = 4; } message CSODCGLobby { message GauntletInfo { optional uint32 wins = 1; optional uint32 losses = 2; } message Member { optional uint32 account_id = 1; optional string persona_name = 2; optional .EDCGLobbyTeam team = 3 [default = k_EDCGLobbyTeam_Team0]; optional bool has_left = 4; optional bool is_anonymous = 5; optional .CSODCGLobby.GauntletInfo gauntlet_info = 6; } repeated .CSODCGLobby.Member members = 1; repeated .CExtraMsgBlock extra_messages = 2; optional fixed64 server_steam_id = 3; optional uint64 lobby_id = 5; optional uint64 match_id = 6; optional uint32 gauntlet_id = 7; optional .ELobbyServerState server_state = 8 [default = k_eLobbyServerState_Assign]; optional fixed32 replay_salt = 9; optional .EDCGMatchMode match_mode = 10 [default = k_EDCGMatchMode_Unranked]; optional uint32 udp_connect_ip = 11; optional uint32 udp_connect_port = 12; optional uint64 tourney_id = 13; optional uint32 tourney_phase_id = 14; optional uint32 tourney_series_id = 15; } message CLobbyData_PostMatchSurvey { message PlayerSurvey { optional uint32 account_id = 1; optional uint32 question_id = 2; } repeated .CLobbyData_PostMatchSurvey.PlayerSurvey surveys = 1; } message CSOGameAccountClient { enum EFlags { k_eDeveloper = 1; k_eFreePlayer = 2; } optional uint32 account_id = 1 [(key_field) = true]; optional uint32 flags = 3; optional uint32 initial_grant_ack_def = 5; optional uint32 recycling_progress = 6; optional uint32 progress_level = 7; optional uint32 progress_xp = 8; optional uint32 constructed_mmr_level = 9; optional uint32 last_win_bounus_time = 10; optional uint32 match_win_streak = 11; optional uint32 bonus_period_wins = 12; optional uint32 player_badge = 13; optional uint32 draft_mmr_level = 14; } message CSOGauntlet { optional uint32 account_id = 1 [(key_field) = true]; optional uint32 gauntlet_id = 2 [(key_field) = true]; optional uint64 active_lobby_id = 3; optional uint32 abandoned_time = 4; optional bytes deck_bytes = 5; optional uint64 gauntlet_instance = 9; optional uint32 entry_type = 10; optional uint64 limited_instance = 11; optional uint32 wins = 12; optional uint32 losses = 13; optional uint64 wins_mask = 14; optional bool select_random_deck = 15; } message CSOPhantomItem { optional uint32 account_id = 1; optional uint64 limited_pool = 2; optional uint32 def_index = 3; optional uint64 phantom_id = 4; } message CSOCardAchievement { optional uint32 account_id = 1; optional uint32 achievement_id = 2; optional uint32 progress = 3; } message CSOPlayerLimitedProgress { optional uint32 account_id = 1; optional uint64 limited_instance_id = 2; optional uint64 limited_pool_id = 3; optional uint32 limited_format = 4; optional uint32 progress = 5; optional uint32 flags = 6; } message CSOTourneyMembership { enum EStatus { k_eConfigure = 1; k_eInvites = 2; k_eSeeding = 3; k_eLimited = 4; k_eEditPhase = 5; k_ePlaying = 6; k_eWaiting = 7; k_eClosed = 8; k_eInvites_Registered = 9; k_eLimited_Registered = 10; } optional uint32 account_id = 1; optional uint64 tourney_id = 2; optional uint32 player_status = 3; optional .CSOTourneyMembership.EStatus tourney_status = 4 [default = k_eConfigure]; optional uint32 joined_time = 5; optional uint32 open_tourney = 6; } message CSOTourneyInvite { optional uint32 account_id = 1; optional uint64 tourney_id = 2; optional bool is_full = 3; optional uint32 invited_by = 4; optional uint32 rights_flags = 5; } message CMsgStartFindingMatchInfo { optional uint32 gauntlet_id = 1; optional string server_search_key = 2; optional uint32 client_version = 3; optional .EDCGMatchMode match_mode = 4 [default = k_EDCGMatchMode_Unranked]; optional bytes deck_code = 5; optional bool is_anonymous = 7; optional bytes collection_code = 8; } message CMsgDCGCombatLogEntry { optional .DCG_COMBATLOG_TYPES type = 1 [default = DCG_COMBATLOG_INVALID]; optional uint32 target_card_id = 2; optional uint32 target_object_id = 3; optional uint32 target_owner = 4; optional uint32 source_card_id = 5; optional uint32 source_object_id = 6; optional uint32 source_owner = 7; optional uint32 value = 8; optional int32 target_attack = 9; optional int32 target_armor = 10; optional int32 target_health = 11; optional int32 source_attack = 12; optional int32 source_armor = 13; optional int32 source_health = 14; optional uint32 turnstamp = 15; optional uint32 source_lane = 16; optional uint32 target_lane = 17; optional uint32 source_parent_card_id = 18; optional uint32 source_parent_object_id = 19; optional uint32 modifier_type = 20; optional bool piercing = 21; optional string effect_name = 22; optional uint32 target_combat_position = 23; } message CMsgDeckValidator { message Deck { optional bytes deck_bytes = 1; optional string deck_name = 2; optional uint32 deck_id = 3; } message CardLimit { optional uint32 card_id = 1; optional uint32 card_count = 2; } enum ERarity { eRarity_Common = 1; eRarity_Uncommon = 2; eRarity_Rare = 3; } enum EColor { eColor_Red = 0; eColor_Blue = 1; eColor_Green = 2; eColor_Black = 3; } optional uint32 version = 1; optional bool must_own_cards = 2; repeated uint32 set_ids = 4; optional uint32 main_min = 5; optional uint32 main_max = 6; optional uint32 items_min = 7; optional uint32 items_max = 8; optional uint32 main_max_instances = 9; optional uint32 items_max_instances = 10; optional uint32 hero_max_instances = 11; repeated .CMsgDeckValidator.CardLimit card_limits = 12; repeated .CMsgDeckValidator.CardLimit required_cards = 13; optional bool include_active_sets = 14; repeated .CMsgDeckValidator.ERarity blocked_rarities = 15; optional uint32 min_deck_colors = 16; optional uint32 max_deck_colors = 17; repeated .CMsgDeckValidator.EColor blocked_colors = 18; optional bool random_decks = 19; repeated .CMsgDeckValidator.Deck deck_choices = 20; } message CMsgAnyToGCReportAsserts { message TrackedAssert { optional string filename = 1; optional uint32 line_number = 2; optional string sample_msg = 3; optional string sample_stack = 4; optional uint32 times_fired = 5; optional string function_name = 6; optional string condition = 7; } optional uint32 version = 1; repeated .CMsgAnyToGCReportAsserts.TrackedAssert asserts = 2; } message CMsgAnyToGCReportAssertsResponse { optional bool success = 1; } message CMsgGauntletConfig { message RewardTier { message Grant { optional uint32 grant_id = 1; optional uint32 quantity = 2; } repeated .CMsgGauntletConfig.RewardTier.Grant trophy_grant = 1; repeated .CMsgGauntletConfig.RewardTier.Grant item_grant = 2; optional uint32 min_wins = 3; repeated string loot_list_rolls = 4; } message EntryType { message ItemCost { optional uint32 def_index = 1; optional uint32 quantity = 2; } optional uint32 entry_id = 1; repeated .CMsgGauntletConfig.EntryType.ItemCost item_costs = 2; optional uint32 limited_format_overide = 3; } message GauntletPointsLeaderboard { optional uint32 expiration_time = 1; } optional uint32 gauntlet_id = 1; optional uint32 activate_time = 2; optional uint32 max_wins = 3; optional uint32 max_losses = 4; optional uint32 max_games = 5; repeated .CMsgGauntletConfig.RewardTier rewards = 7; optional .CMsgDeckValidator validator = 8; optional bool register_deck = 10; optional bool auto_populate_deck = 12; optional bool can_modify_deck = 14; optional bool is_active = 15; optional bool is_featured = 16; repeated .CMsgGauntletConfig.EntryType entry_types = 17; optional uint32 limited_format = 18; optional uint32 expiration_time = 19; optional uint32 close_join_time = 20; optional uint32 close_mm_time = 21; optional uint32 max_wins_trophy_id = 22; optional uint32 cooldown_time = 23; optional uint32 max_wins_per_deck_trophy_id = 24; optional uint32 max_wins_random_mode_trophy_id = 25; optional uint32 is_ai_gauntlet = 26; repeated .CMsgDeckValidator ai_validators = 27; repeated .CMsgGauntletConfig.GauntletPointsLeaderboard gauntlet_points_leaderboards = 29; optional string timer = 30; } message CMsgLimitedFormat { message LimitedStage { optional .CMsgLimitedFormat.EGrantType grant_type = 1 [default = kGrant_Unknown]; optional uint32 grant_count = 2; optional uint32 repeat_count = 3; optional string display_msg = 4; } enum EGrantType { kGrant_Unknown = 0; kGrant_Hero = 1; kGrant_Card = 2; kGrant_Item = 3; kGrant_Pack = 4; } optional uint32 limited_format_id = 1; optional uint32 grant_stages = 2; repeated .CMsgLimitedFormat.LimitedStage grant_stage_info = 3; optional bool create_real_copies = 4; } message CSODCGPrivateLobby { message Member { optional uint32 account_id = 1; optional string persona_name = 2; optional .EDCGLobbyTeam team = 3 [default = k_EDCGLobbyTeam_Team0]; optional bool is_ready = 4; optional bytes deck_bytes = 5; optional bool has_deck = 7; optional uint32 client_version = 8; optional .CMsgRegionPingTimesClient ping_times = 9; } message Invite { optional uint32 account_id = 1; optional string persona_name = 2; optional uint32 invited_by = 3; } message SharedDeck { optional uint32 shared_by_account_id = 1; optional bytes deck_bytes = 2; optional string deck_name = 3; } message Match { optional uint64 match_id = 1; optional uint32 winning_account_id = 2; } optional uint64 private_lobby_id = 1; repeated .CSODCGPrivateLobby.Member members = 2; repeated .CSODCGPrivateLobby.Invite invites = 3; repeated .CExtraMsgBlock extra_messages = 4; optional bool in_match_making = 5; optional string server_search_key = 6; optional bool are_decks_visible = 7; repeated .CSODCGPrivateLobby.Match match_list = 8; optional .EDCGLobbyTimer timer_mode = 9 [default = k_eDCGLobbyTimer_Unspecified]; optional fixed64 match_lobby_id = 10; repeated .CSODCGPrivateLobby.SharedDeck shared_decks = 11; optional .CMsgDeckValidator deck_validator = 12; optional uint32 min_client_version = 15; optional uint32 max_client_version = 16; optional uint64 steam_chat_group_id = 17; optional fixed64 lobby_salt = 18; optional uint32 validator_id = 19; } message CSODCGTourneyInvite { optional uint32 account_id = 1 [(key_field) = true]; optional uint64 tourney_id = 2 [(key_field) = true]; optional bool is_full = 3; } message CSODCGTourneyNextMatch { optional uint32 account_id = 1 [(key_field) = true]; optional uint64 tourney_id = 2 [(key_field) = true]; optional uint32 phase_id = 3 [(key_field) = true]; optional uint32 series_id = 4 [(key_field) = true]; } message CDCGTourney { message Match { optional uint64 match_id = 1; } message Series { optional uint32 series_id = 1; optional uint32 account_1 = 2; optional uint32 wins_1 = 3; optional uint32 account_2 = 4; optional uint32 wins_2 = 5; optional uint32 ties = 6; optional uint32 status = 7; repeated .CDCGTourney.Match matches = 8; optional fixed64 lobby_id = 9; } message Phase { optional uint32 phase_id = 1; optional .CDCGTourney.EFormat format = 2 [default = k_eFormat_Invalid]; optional .CDCGTourney.EPhaseStage stage = 3 [default = k_ePhaseStage_Pending]; repeated .CDCGTourney.Series series = 4; optional uint32 limited_format = 5; optional uint64 limited_instance_id = 6; optional uint64 limited_pool_id = 7; optional uint32 auto_advance_time = 9; } message PlayerDeck { optional uint32 deck_index = 1; optional bytes deck_bytes = 2; optional uint32 phase_id = 3; optional uint32 shared_by = 4; } message Member { optional uint32 account_id = 1; optional uint32 rights_flags = 2; repeated .CDCGTourney.PlayerDeck public_registered_decks = 3; optional uint32 initial_seed = 4; optional uint32 initial_group = 5; } message Invite { optional uint32 account_id = 1; optional uint32 invited_by = 2; optional uint32 invite_time = 3; optional uint32 rights_flags = 4; } message ConfigVals { optional uint32 val_id = 1; optional uint32 phase_id = 2; optional uint32 value = 3; } message SharedDeck { optional uint32 shared_by = 1; optional bytes deck_bytes = 2; optional uint32 shared_slot = 3; } message EntryItem { optional uint32 def_index = 1; optional uint32 quantity = 2; optional bool per_member = 3; } message PaidEntryItem { optional uint32 def_index = 1; optional uint32 target_account_id = 2; optional uint32 owner_account_id = 3; } message Validator { optional uint32 phase_id = 1; optional .CMsgDeckValidator deck_validator = 2; } enum EStage { k_eStage_Configure = 10; k_eStage_Invites = 20; k_eStage_Seeding = 30; k_eStage_PlayPhases = 40; k_eStage_Closed = 50; } enum EPhaseStage { k_ePhaseStage_Pending = 10; k_ePhaseStage_Limited = 20; k_ePhaseStage_Edit = 30; k_ePhaseStage_Playing = 40; k_ePhaseStage_Complete = 50; } enum EFormat { k_eFormat_Invalid = 0; k_eFormat_Bracket_SingleElim = 1; k_eFormat_Swiss = 2; k_eFormat_FreeForAll = 3; } optional uint64 tourney_id = 1; optional .CDCGTourney.EStage stage = 2 [default = k_eStage_Configure]; repeated .CDCGTourney.Validator validators = 3; optional uint32 stage_time = 4; optional uint32 stats_salt = 5; optional string tourney_msg = 6; optional string tourney_status = 7; repeated .CDCGTourney.Phase phases = 8; repeated .CDCGTourney.ConfigVals config_vals = 9; repeated .CDCGTourney.Invite invites = 10; repeated .CDCGTourney.Member members = 11; optional string tourney_name = 12; repeated .CDCGTourney.SharedDeck shared_decks = 13; optional uint32 created_by = 14; optional uint32 auto_close_time = 15; optional uint64 steam_chat_room_id = 16; repeated .CDCGTourney.PaidEntryItem paid_entry_items = 17; repeated .CDCGTourney.EntryItem entry_items = 18; optional uint32 created_time = 19; } message CMsgRegionPingTimesClient { repeated fixed32 data_center_codes = 1 [packed = true]; repeated uint32 ping_times = 2 [packed = true]; } message CMsgMarketPrices { optional uint32 time_stamp = 1; optional uint32 currency_id = 2; repeated uint32 def_indices = 3 [packed = true]; repeated uint64 purchase_price = 4 [packed = true]; repeated uint64 sell_price = 5 [packed = true]; optional bool request_up_to_date = 6; optional uint32 valid_through = 7; } message CMsgMatchData { message PlayerInfo { optional uint32 account_id = 1; optional .EDCGLobbyTeam team = 2 [default = k_EDCGLobbyTeam_Team0]; optional uint32 player_slot = 3; repeated uint32 hero_lineup = 4; repeated uint32 tower_health = 5; optional uint32 ancient_health = 6; optional bool conceded = 8; optional uint32 game_clock = 9; repeated uint32 hero_ids = 10; optional uint32 mmr = 11; optional uint32 mmr_uncertainty = 12; optional bytes deck_bytes = 13; } enum EEndReason { k_EEndReason_TeamWin = 0; k_EEndReason_Tie = 1; k_EEndReason_AllAbandoned = 2; k_EEndReason_NetworkIssues = 3; k_EEndReason_MatchLength = 4; k_EEndReason_PlayerNeverConnected = 5; } optional uint32 match_duration_s = 4; optional uint32 game_turns = 5; optional .CMsgMatchData.EEndReason end_reason = 6 [default = k_EEndReason_TeamWin]; optional .EDCGLobbyTeam winning_team = 7 [default = k_EDCGLobbyTeam_Team0]; repeated .CMsgMatchData.PlayerInfo players = 8; }