package dota; import "steammessages.proto"; import "gcsdk_gcmessages.proto"; import "dota_shared_enums.proto"; option optimize_for = SPEED; option cc_generic_services = false; enum ESpecialPingValue { k_ESpecialPingValue_NoData = 16382; k_ESpecialPingValue_Failed = 16383; } enum EDOTAGCSessionNeed { k_EDOTAGCSessionNeed_Unknown = 0; k_EDOTAGCSessionNeed_UserNoSessionNeeded = 100; k_EDOTAGCSessionNeed_UserInOnlineGame = 101; k_EDOTAGCSessionNeed_UserInLocalGame = 102; k_EDOTAGCSessionNeed_UserInUIWasConnected = 103; k_EDOTAGCSessionNeed_UserInUINeverConnected = 104; k_EDOTAGCSessionNeed_UserTutorials = 105; k_EDOTAGCSessionNeed_UserInUIWasConnectedIdle = 106; k_EDOTAGCSessionNeed_UserInUINeverConnectedIdle = 107; k_EDOTAGCSessionNeed_GameServerOnline = 200; k_EDOTAGCSessionNeed_GameServerLocal = 201; k_EDOTAGCSessionNeed_GameServerIdle = 202; k_EDOTAGCSessionNeed_GameServerRelay = 203; k_EDOTAGCSessionNeed_GameServerLocalUpload = 204; } enum DOTA_TournamentEvents { TE_FIRST_BLOOD = 0; TE_GAME_END = 1; TE_MULTI_KILL = 2; TE_HERO_DENY = 3; TE_AEGIS_DENY = 4; TE_AEGIS_STOLEN = 5; TE_GODLIKE = 6; TE_COURIER_KILL = 7; TE_ECHOSLAM = 8; TE_RAPIER = 9; TE_EARLY_ROSHAN = 10; TE_BLACK_HOLE = 11; } enum DOTA_COMBATLOG_TYPES { DOTA_COMBATLOG_INVALID = -1; DOTA_COMBATLOG_DAMAGE = 0; DOTA_COMBATLOG_HEAL = 1; DOTA_COMBATLOG_MODIFIER_ADD = 2; DOTA_COMBATLOG_MODIFIER_REMOVE = 3; DOTA_COMBATLOG_DEATH = 4; DOTA_COMBATLOG_ABILITY = 5; DOTA_COMBATLOG_ITEM = 6; DOTA_COMBATLOG_LOCATION = 7; DOTA_COMBATLOG_GOLD = 8; DOTA_COMBATLOG_GAME_STATE = 9; DOTA_COMBATLOG_XP = 10; DOTA_COMBATLOG_PURCHASE = 11; DOTA_COMBATLOG_BUYBACK = 12; DOTA_COMBATLOG_ABILITY_TRIGGER = 13; DOTA_COMBATLOG_PLAYERSTATS = 14; DOTA_COMBATLOG_MULTIKILL = 15; DOTA_COMBATLOG_KILLSTREAK = 16; DOTA_COMBATLOG_TEAM_BUILDING_KILL = 17; DOTA_COMBATLOG_FIRST_BLOOD = 18; DOTA_COMBATLOG_MODIFIER_REFRESH = 19; DOTA_COMBATLOG_NEUTRAL_CAMP_STACK = 20; DOTA_COMBATLOG_PICKUP_RUNE = 21; DOTA_COMBATLOG_REVEALED_INVISIBLE = 22; DOTA_COMBATLOG_HERO_SAVED = 23; DOTA_COMBATLOG_MANA_RESTORED = 24; DOTA_COMBATLOG_HERO_LEVELUP = 25; DOTA_COMBATLOG_BOTTLE_HEAL_ALLY = 26; DOTA_COMBATLOG_ENDGAME_STATS = 27; DOTA_COMBATLOG_INTERRUPT_CHANNEL = 28; DOTA_COMBATLOG_ALLIED_GOLD = 29; DOTA_COMBATLOG_AEGIS_TAKEN = 30; DOTA_COMBATLOG_MANA_DAMAGE = 31; DOTA_COMBATLOG_PHYSICAL_DAMAGE_PREVENTED = 32; DOTA_COMBATLOG_UNIT_SUMMONED = 33; DOTA_COMBATLOG_ATTACK_EVADE = 34; DOTA_COMBATLOG_TREE_CUT = 35; } message CSODOTAGameAccountClient { optional uint32 account_id = 1 [(key_field) = true]; optional uint32 wins = 3; optional uint32 losses = 4; optional uint32 xp = 12; optional uint32 level = 13; optional uint32 initial_skill = 14; optional uint32 leaver_count = 15; optional uint32 secondary_leaver_count = 58; optional uint32 low_priority_until_date = 18; optional uint32 prevent_text_chat_until_date = 20; optional uint32 prevent_voice_until_date = 21; optional uint32 last_abandoned_game_date = 22; optional uint32 last_secondary_abandoned_game_date = 59; optional uint32 leaver_penalty_count = 23; optional uint32 completed_game_streak = 24; optional uint32 teaching = 28; optional uint32 leadership = 29; optional uint32 friendly = 30; optional uint32 forgiving = 31; optional uint32 account_disabled_until_date = 38; optional uint32 account_disabled_count = 39; optional uint32 showcase_hero_id = 40; optional uint32 match_disabled_until_date = 41; optional uint32 match_disabled_count = 42; optional PartnerAccountType partner_account_type = 44 [default = PARTNER_NONE]; optional uint32 partner_account_state = 45; optional uint32 shutdownlawterminatetimestamp = 47; optional uint32 low_priority_games_remaining = 48; optional uint32 competitive_rank = 49; optional uint32 calibration_games_remaining = 51; optional uint32 solo_competitive_rank = 52; optional uint32 solo_calibration_games_remaining = 54; optional uint32 competitive_1v1_rank = 63; optional uint32 competitive_1v1_calibration_games_remaining = 64; optional uint32 general_seasonal_ranked_rank = 75; optional uint32 general_seasonal_ranked_calibration_games_remaining = 76; optional uint32 general_seasonal_ranked_games_played = 80; optional uint32 general_seasonal_ranked_rank_peak = 81; optional uint32 solo_seasonal_ranked_rank = 77; optional uint32 solo_seasonal_ranked_calibration_games_remaining = 78; optional uint32 solo_seasonal_ranked_games_played = 79; optional uint32 solo_seasonal_ranked_rank_peak = 82; optional uint32 recruitment_level = 55; optional bool has_new_notifications = 56; optional bool is_league_admin = 57; optional uint32 casual_games_played = 60; optional uint32 solo_competitive_games_played = 61; optional uint32 party_competitive_games_played = 62; optional uint32 casual_1v1_games_played = 65; optional uint32 competitive_team_games_played = 66; optional uint32 curr_all_hero_challenge_id = 67; optional uint32 play_time_points = 68; optional uint32 account_flags = 69; optional uint32 play_time_level = 70; optional uint32 player_behavior_seq_num_last_report = 71; optional uint32 player_behavior_score_last_report = 72; optional bool player_behavior_report_old_data = 73; optional uint32 tourney_skill_level = 74; } message CMsgLobbyEventPoints { message AccountPoints { optional uint32 account_id = 1; optional uint32 normal_points = 2; optional uint32 premium_points = 3; optional bool owned = 4; optional uint32 favorite_team = 5; optional uint32 favorite_team_level = 6; optional uint32 points_held = 7; optional uint32 premium_points_held = 8; optional uint32 favorite_team_foil_level = 9; optional uint32 wager_tokens_remaining = 10; optional uint32 wager_tokens_max = 11; optional uint64 active_effects_mask = 12; } optional uint32 event_id = 1; repeated CMsgLobbyEventPoints.AccountPoints account_points = 2; } message CMsgBattleCupVictory { optional uint32 account_id = 1; optional uint32 win_date = 2; optional uint32 valid_until = 3; optional uint32 skill_level = 4; optional uint32 tournament_id = 5; optional uint32 division_id = 6; optional uint32 team_id = 7; optional uint32 streak = 8; } message CMsgLobbyBattleCupVictoryList { repeated CMsgBattleCupVictory winners = 1; } message CMsgDOTABroadcastNotification { optional string message = 1; } message CProtoItemHeroStatue { optional uint32 hero_id = 1; optional uint32 status_effect_index = 2; optional string sequence_name = 3; optional float cycle = 4; repeated uint32 wearable = 5; optional string inscription = 6; repeated uint32 style = 7; optional bool tournament_drop = 8; } message CProtoItemTeamShowcase { optional uint32 hero_id = 1; optional uint32 status_effect_index = 2; optional string sequence_name = 3; optional float cycle = 4; repeated uint32 wearable = 5; optional string inscription = 6; repeated uint32 style = 7; } message CMatchPlayerAbilityUpgrade { optional uint32 ability = 1; optional uint32 time = 2; } message CMatchAdditionalUnitInventory { optional string unit_name = 1; repeated uint32 items = 2; } message CMatchHeroSelectEvent { optional bool is_pick = 1; optional uint32 team = 2; optional uint32 hero_id = 3; } message CMsgDOTAProcessFantasyScheduledEvent { optional uint32 event = 1; optional uint32 timestamp = 2; optional uint32 fantasy_league_id = 3; optional uint32 season = 4; optional uint32 reference_data = 5; } message CMsgDOTAHasItemQuery { optional uint32 account_id = 1; optional uint64 item_id = 2; } message CMsgDOTAHasItemResponse { optional bool has_item = 1; } message CMsgDOTAHasItemDefsQuery { optional uint32 account_id = 1; repeated uint32 itemdef_ids = 2; } message CMsgDOTAHasItemDefsResponse { optional bool has_items = 1; } message CMsgGCGetPlayerCardItemInfo { optional uint32 account_id = 1; repeated uint64 player_card_item_ids = 2; } message CMsgGCGetPlayerCardItemInfoResponse { message PlayerCardInfo { optional uint64 player_card_item_id = 1; optional uint32 account_id = 2; optional uint64 packed_bonuses = 3; } repeated CMsgGCGetPlayerCardItemInfoResponse.PlayerCardInfo player_card_infos = 1; } message CMsgGCToGCFantasySetMatchLeague { optional uint64 match_id = 1; optional uint32 league_id = 2; } message CSODOTAMapLocationState { optional uint32 account_id = 1 [(key_field) = true]; optional int32 location_id = 2 [(key_field) = true]; optional bool completed = 3; } message CMsgLeagueAdminList { repeated uint32 account_ids = 1; } message CCompendiumTimestampedData { optional uint32 game_time = 1; optional uint32 gpm = 2; optional uint32 xpm = 3; optional uint32 kills = 4; optional uint32 deaths = 5; repeated uint32 item_purchases = 6; } message CCompendiumGameTimeline { repeated CCompendiumTimestampedData data = 1; repeated string tags = 2; } message CCompendiumGameList { repeated CCompendiumGameTimeline games = 1; } message CAdditionalEquipSlot { optional uint32 class_id = 1; optional uint32 slot_id = 2; optional uint32 def_index = 3; } message CMsgDOTACombatLogEntry { optional DOTA_COMBATLOG_TYPES type = 1 [default = DOTA_COMBATLOG_INVALID]; optional uint32 target_name = 2; optional uint32 target_source_name = 3; optional uint32 attacker_name = 4; optional uint32 damage_source_name = 5; optional uint32 inflictor_name = 6; optional bool is_attacker_illusion = 7; optional bool is_attacker_hero = 8; optional bool is_target_illusion = 9; optional bool is_target_hero = 10; optional bool is_visible_radiant = 11; optional bool is_visible_dire = 12; optional uint32 value = 13; optional int32 health = 14; optional float timestamp = 15; optional float stun_duration = 16; optional float slow_duration = 17; optional bool is_ability_toggle_on = 18; optional bool is_ability_toggle_off = 19; optional uint32 ability_level = 20; optional float location_x = 21; optional float location_y = 22; optional uint32 gold_reason = 23; optional float timestamp_raw = 24; optional float modifier_duration = 25; optional uint32 xp_reason = 26; optional uint32 last_hits = 27; optional uint32 attacker_team = 28; optional uint32 target_team = 29; optional uint32 obs_wards_placed = 30; optional uint32 assist_player0 = 31; optional uint32 assist_player1 = 32; optional uint32 assist_player2 = 33; optional uint32 assist_player3 = 34; optional uint32 stack_count = 35; optional bool hidden_modifier = 36; optional bool is_target_building = 37; optional uint32 neutral_camp_type = 38; optional uint32 rune_type = 39; repeated uint32 assist_players = 40; optional bool is_heal_save = 41; optional bool is_ultimate_ability = 42; optional uint32 attacker_hero_level = 43; optional uint32 target_hero_level = 44; optional uint32 xpm = 45; optional uint32 gpm = 46; optional uint32 event_location = 47; optional bool target_is_self = 48; optional uint32 damage_type = 49; optional bool invisibility_modifier = 50; optional uint32 damage_category = 51; optional uint32 networth = 52; optional uint32 building_type = 53; optional float modifier_elapsed_duration = 54; optional bool silence_modifier = 55; optional bool heal_from_lifesteal = 56; optional bool modifier_purged = 57; optional bool spell_evaded = 58; } message CMsgDOTAProfileCard { message Slot { message Trophy { optional uint32 trophy_id = 1; optional uint32 trophy_score = 2; } message Stat { optional CMsgDOTAProfileCard.EStatID stat_id = 1 [default = k_eStat_SoloRank]; optional uint32 stat_score = 2; } message Item { optional bytes serialized_item = 1; optional uint64 item_id = 2; } message Hero { optional uint32 hero_id = 1; optional uint32 hero_wins = 2; optional uint32 hero_losses = 3; } message Emoticon { optional uint32 emoticon_id = 1; } optional uint32 slot_id = 1; optional CMsgDOTAProfileCard.Slot.Trophy trophy = 2; optional CMsgDOTAProfileCard.Slot.Stat stat = 3; optional CMsgDOTAProfileCard.Slot.Item item = 4; optional CMsgDOTAProfileCard.Slot.Hero hero = 5; optional CMsgDOTAProfileCard.Slot.Emoticon emoticon = 6; } enum EStatID { k_eStat_SoloRank = 1; k_eStat_PartyRank = 2; k_eStat_Wins = 3; k_eStat_Commends = 4; k_eStat_GamesPlayed = 5; k_eStat_FirstMatchDate = 6; } optional uint32 account_id = 1; optional uint32 background_def_index = 2; repeated CMsgDOTAProfileCard.Slot slots = 3; optional uint32 badge_points = 4; optional uint32 event_points = 5; optional uint32 event_id = 6; optional CMsgBattleCupVictory recent_battle_cup_victory = 7; } message CSODOTAPlayerChallenge { enum EFlags { eFlag_InstantRerollUncompleted = 1; eFlag_QuestChallenge = 2; } optional uint32 account_id = 1 [(key_field) = true]; optional uint32 event_id = 2 [(key_field) = true]; optional uint32 slot_id = 3 [(key_field) = true]; optional uint32 challenge_type = 4; optional uint32 int_param_0 = 5; optional uint32 int_param_1 = 6; optional uint32 created_time = 7; optional uint32 completed = 8; optional uint32 sequence_id = 9; optional uint32 challenge_tier = 10; optional uint32 flags = 11; optional uint32 attempts = 12; optional uint32 complete_limit = 13; optional uint32 quest_rank = 14; } message CMsgClientToGCRerollPlayerChallenge { optional uint32 event_id = 1; optional uint32 sequence_id = 3; } message CMsgGCRerollPlayerChallengeResponse { enum EResult { eResult_Success = 0; eResult_Dropped = 1; eResult_NotFound = 2; eResult_CantReroll = 3; eResult_ServerError = 4; } optional CMsgGCRerollPlayerChallengeResponse.EResult result = 1 [default = eResult_Success]; } message CMsgGCTopCustomGamesList { repeated uint64 top_custom_games = 1; optional uint64 game_of_the_day = 2; } message CMsgDOTARealtimeGameStats { message TeamDetails { optional uint32 team_number = 1; optional uint32 team_id = 2; optional string team_name = 3; optional fixed64 team_logo = 4; optional uint32 score = 5; repeated CMsgDOTARealtimeGameStats.PlayerDetails players = 6; optional bool only_team = 7; optional uint32 cheers = 8; } message ItemDetails { optional uint32 id = 1; optional string name = 2; optional int32 time = 3; optional bool sold = 4; optional uint32 stackcount = 5; } message AbilityDetails { optional uint32 id = 1; optional string name = 2; optional uint32 level = 3; optional float cooldown = 4; optional float cooldown_max = 5; } message HeroToHeroStats { optional uint32 victimid = 1; optional uint32 kills = 2; optional uint32 assists = 3; } message AbilityList { repeated uint32 id = 1; } message PlayerDetails { optional uint32 accountid = 1; optional uint32 playerid = 2; optional string name = 3; optional uint32 team = 4; optional uint32 heroid = 5; optional uint32 healthpoints = 6; optional uint32 maxhealthpoints = 7; optional float healthregenrate = 8; optional uint32 manapoints = 9; optional uint32 maxmanapoints = 10; optional float manaregenrate = 11; optional uint32 base_strength = 12; optional uint32 base_agility = 13; optional uint32 base_intelligence = 14; optional int32 base_armor = 15; optional uint32 base_movespeed = 16; optional uint32 base_damage = 17; optional uint32 strength = 18; optional uint32 agility = 19; optional uint32 intelligence = 20; optional int32 armor = 21; optional uint32 movespeed = 22; optional uint32 damage = 23; optional uint32 hero_damage = 24; optional uint32 tower_damage = 25; repeated CMsgDOTARealtimeGameStats.AbilityDetails abilities = 26; optional uint32 level = 27; optional uint32 kill_count = 28; optional uint32 death_count = 29; optional uint32 assists_count = 30; optional uint32 denies_count = 31; optional uint32 lh_count = 32; optional uint32 hero_healing = 33; optional uint32 gold_per_min = 34; optional uint32 xp_per_min = 35; optional uint32 net_gold = 36; optional uint32 gold = 37; optional float x = 38; optional float y = 39; optional int32 respawn_time = 40; optional uint32 ultimate_cooldown = 41; optional bool has_buyback = 42; repeated CMsgDOTARealtimeGameStats.ItemDetails items = 43; repeated CMsgDOTARealtimeGameStats.ItemDetails stashitems = 44; repeated CMsgDOTARealtimeGameStats.ItemDetails itemshoppinglist = 45; repeated CMsgDOTARealtimeGameStats.AbilityList levelpoints = 46; repeated CMsgDOTARealtimeGameStats.HeroToHeroStats hero_to_hero_stats = 47; optional bool has_ultimate = 48; optional bool has_ultimate_mana = 49; } message BuildingDetails { optional uint32 team = 2; optional float heading = 3; optional uint32 lane = 4; optional uint32 tier = 5; optional uint32 type = 6; optional float x = 7; optional float y = 8; optional bool destroyed = 9; } message KillDetails { optional uint32 player_id = 1; optional int32 death_time = 2; optional uint32 killer_player_id = 3; } message BroadcasterDetails { optional uint32 player_id = 1; optional uint32 selected_hero = 2; optional uint32 selected_graph = 3; } message PickBanDetails { optional uint32 hero = 1; optional uint32 team = 2; } message MatchDetails { optional fixed64 server_steam_id = 1; optional uint64 matchid = 2; optional uint32 timestamp = 3; optional float time_of_day = 4; optional bool is_nightstalker_night = 5; optional int32 game_time = 6; optional uint32 teamid_radiant = 8; optional uint32 teamid_dire = 9; repeated CMsgDOTARealtimeGameStats.PickBanDetails picks = 10; repeated CMsgDOTARealtimeGameStats.PickBanDetails bans = 11; repeated CMsgDOTARealtimeGameStats.KillDetails kills = 12; repeated CMsgDOTARealtimeGameStats.BroadcasterDetails broadcasters = 13; optional uint32 game_mode = 14; optional uint32 league_id = 15; optional bool single_team = 16; optional uint32 cheers_peak = 17; } message GraphData { message LocationStats { repeated int32 stats = 1; } message TeamLocationStats { repeated CMsgDOTARealtimeGameStats.GraphData.LocationStats loc_stats = 1; } enum eStat { CreepGoldEarned = 0; KillGoldEarned = 1; DeathAndBuybackGoldLost = 2; XPEarned = 3; } enum eLocation { BotLane = 0; MidLane = 1; TopLane = 2; Jungle = 3; Ancients = 4; Other = 5; } repeated int32 graph_gold = 1; repeated int32 graph_xp = 2; repeated int32 graph_kill = 3; repeated int32 graph_tower = 4; repeated int32 graph_rax = 5; repeated CMsgDOTARealtimeGameStats.GraphData.TeamLocationStats team_loc_stats = 6; } optional CMsgDOTARealtimeGameStats.MatchDetails match = 1; repeated CMsgDOTARealtimeGameStats.TeamDetails teams = 2; repeated CMsgDOTARealtimeGameStats.BuildingDetails buildings = 3; optional CMsgDOTARealtimeGameStats.GraphData graph_data = 4; optional bool delta_frame = 5; } message CMsgDOTARealtimeGameStatsTerse { message TeamDetails { optional uint32 team_number = 1; optional uint32 team_id = 2; optional string team_name = 3; optional fixed64 team_logo = 4; optional uint32 score = 5; repeated CMsgDOTARealtimeGameStatsTerse.PlayerDetails players = 6; } message PlayerDetails { optional uint32 accountid = 1; optional uint32 playerid = 2; optional string name = 3; optional uint32 team = 4; optional uint32 heroid = 5; optional uint32 level = 6; optional uint32 kill_count = 7; optional uint32 death_count = 8; optional uint32 assists_count = 9; optional uint32 denies_count = 10; optional uint32 lh_count = 11; optional uint32 gold = 12; optional float x = 13; optional float y = 14; } message BuildingDetails { optional uint32 team = 1; optional float heading = 2; optional uint32 type = 3; optional uint32 lane = 4; optional uint32 tier = 5; optional float x = 6; optional float y = 7; optional bool destroyed = 8; } message MatchDetails { optional fixed64 server_steam_id = 1; optional uint64 matchid = 2; optional uint32 timestamp = 3; optional int32 game_time = 4; repeated uint32 steam_broadcaster_account_ids = 6; optional uint32 game_mode = 7; optional uint32 league_id = 8; } message GraphData { repeated int32 graph_gold = 1; } optional CMsgDOTARealtimeGameStatsTerse.MatchDetails match = 1; repeated CMsgDOTARealtimeGameStatsTerse.TeamDetails teams = 2; repeated CMsgDOTARealtimeGameStatsTerse.BuildingDetails buildings = 3; optional CMsgDOTARealtimeGameStatsTerse.GraphData graph_data = 4; optional bool delta_frame = 5; } message CMsgGCToClientMatchGroupsVersion { optional uint32 matchgroups_version = 1; } message CMsgDOTASDOHeroStatsHistory { optional uint64 match_id = 1; optional uint32 game_mode = 2; optional uint32 lobby_type = 3; optional uint32 start_time = 4; optional bool won = 5; optional uint32 gpm = 6; optional uint32 xpm = 7; optional uint32 kills = 8; optional uint32 deaths = 9; optional uint32 assists = 10; } message CMsgDOTASeasonRewards { message Reward { optional string name = 1; optional uint32 itemdef = 2; optional uint32 importance = 3; optional uint32 base_level = 4; optional uint32 repeat_level = 5; optional CMsgDOTASeasonRewards.ERewardType reward_type = 6 [default = EconItem]; optional string image = 7; optional uint32 action_id = 8; optional uint32 effect_index = 9; } enum ERewardType { EconItem = 0; MysteryWheel = 1; AbilityEffect = 2; Other = 3; } repeated CMsgDOTASeasonRewards.Reward rewards = 1; } message CMsgDOTASeasonAchievements { message Achievement { optional string name = 1; optional string description = 2; optional string image = 3; optional uint32 action_id = 4; optional uint32 max_grants = 5; optional uint32 normal_points = 6; optional uint32 tracking_achievement = 7; optional uint32 achievement_goal = 8; optional uint32 achievement_level = 9; } repeated CMsgDOTASeasonAchievements.Achievement achievements = 1; } message CMsgDOTASeasonPredictions { message Choice { optional uint32 value = 1; optional string name = 2; optional uint32 min_raw_value = 3; optional uint32 max_raw_value = 4; } message Answers { repeated uint32 answer_id = 1; } message QueryKeyValues { optional string name = 1; optional string value = 2; } message Prediction { optional CMsgDOTASeasonPredictions.ePredictionType type = 1 [default = Generic]; optional string question = 2; repeated CMsgDOTASeasonPredictions.Choice choices = 3; optional uint32 selection_id = 4; optional uint32 start_date = 5; optional uint32 lock_date = 6; optional uint32 reward = 7; optional CMsgDOTASeasonPredictions.eAnswerType answer_type = 8 [default = SingleInt]; optional uint32 answer_id = 9; repeated CMsgDOTASeasonPredictions.Answers answers = 10; optional string query_name = 11; repeated uint32 query_bind_params = 12; optional uint32 lock_on_selection_id = 13; optional uint32 lock_on_selection_value = 14; optional bool lock_on_selection_set = 15; } message InGamePrediction { optional uint32 id = 1; optional string name = 2; optional CMsgDOTASeasonPredictions.ePredictionType type = 3 [default = Generic]; optional CMsgDOTASeasonPredictions.eRandomSelectionGroup_t group = 4 [default = EarlyGame]; optional string question = 5; repeated CMsgDOTASeasonPredictions.Choice choices = 6; repeated string required_heroes = 7; optional string query_name = 8; repeated CMsgDOTASeasonPredictions.QueryKeyValues query_values = 9; optional CMsgDOTASeasonPredictions.eResolutionType_t answer_resolution_type = 10 [default = InvalidQuery]; optional uint32 points_to_grant = 11; optional uint32 reward_action = 12; optional uint32 debug_force_selection = 13; optional CMsgDOTASeasonPredictions.eRawValueType_t raw_value_type = 14 [default = Number]; } enum ePredictionType { Generic = 0; Hero = 1; Team = 2; Player = 3; Special = 4; YesNo = 5; } enum eAnswerType { SingleInt = 0; SingleFloat = 1; MultipleInt = 2; MultipleFloat = 3; AnswerTeam = 4; SingleTime = 5; MultipleTime = 6; NoAnswer = 7; } enum eResolutionType_t { InvalidQuery = 0; FirstToPassQuery = 1; LastToPassQuery = 2; LastRemainingQuery = 3; MaxToPassQuery = 4; MinToPassQuery = 5; SumQuery = 6; MaxTeamSumToPassQuery = 7; MinTeamSumToPassQuery = 8; } enum eRandomSelectionGroup_t { EarlyGame = 0; MidGame = 1; LateGame = 2; Count = 3; } enum eRawValueType_t { Number = 0; Time = 1; } repeated CMsgDOTASeasonPredictions.Prediction predictions = 1; repeated CMsgDOTASeasonPredictions.InGamePrediction in_game_predictions = 2; optional uint32 in_game_prediction_count_per_game = 3; optional uint32 in_game_prediction_voting_period_minutes = 4; } message CMsgDOTAMatch { message Player { message CustomGameData { optional uint32 dota_team = 1; optional bool winner = 2; } optional uint32 account_id = 1; optional uint32 player_slot = 2; optional uint32 hero_id = 3; optional uint32 item_0 = 4; optional uint32 item_1 = 5; optional uint32 item_2 = 6; optional uint32 item_3 = 7; optional uint32 item_4 = 8; optional uint32 item_5 = 9; optional float expected_team_contribution = 10; optional float scaled_metric = 11; optional uint32 previous_rank = 12; optional uint32 rank_change = 13; optional bool solo_rank = 49; optional bool seasonal_rank = 53; optional uint32 kills = 14; optional uint32 deaths = 15; optional uint32 assists = 16; optional uint32 leaver_status = 17; optional uint32 gold = 18; optional uint32 last_hits = 19; optional uint32 denies = 20; optional uint32 gold_per_min = 21; optional uint32 XP_per_min = 22; optional uint32 gold_spent = 23; optional uint32 hero_damage = 24; optional uint32 tower_damage = 25; optional uint32 hero_healing = 26; optional uint32 level = 27; optional uint32 time_last_seen = 28; optional string player_name = 29; optional uint32 support_ability_value = 30; optional bool feeding_detected = 32; optional uint32 search_rank = 34; optional uint32 search_rank_uncertainty = 35; optional int32 rank_uncertainty_change = 36; optional uint32 hero_play_count = 37; optional fixed64 party_id = 38; optional float scaled_kills = 39; optional float scaled_deaths = 40; optional float scaled_assists = 41; optional uint32 claimed_farm_gold = 42; optional uint32 support_gold = 43; optional uint32 claimed_denies = 44; optional uint32 claimed_misses = 45; optional uint32 misses = 46; repeated CMatchPlayerAbilityUpgrade ability_upgrades = 47; repeated CMatchAdditionalUnitInventory additional_units_inventory = 48; optional CMsgDOTAMatch.Player.CustomGameData custom_game_data = 50; optional bool active_battle_pass = 51; optional uint32 net_worth = 52; } message BroadcasterInfo { optional uint32 account_id = 1; optional string name = 2; } message BroadcasterChannel { optional string country_code = 1; optional string description = 2; repeated CMsgDOTAMatch.BroadcasterInfo broadcaster_infos = 3; optional string language_code = 4; } message CustomGameData { optional uint64 custom_game_id = 1; optional string map_name = 2; } enum ReplayState { REPLAY_AVAILABLE = 0; REPLAY_NOT_RECORDED = 1; REPLAY_EXPIRED = 2; } optional uint32 duration = 3; optional fixed32 startTime = 4; repeated CMsgDOTAMatch.Player players = 5; optional uint64 match_id = 6; repeated uint32 tower_status = 8; repeated uint32 barracks_status = 9; optional uint32 cluster = 10; optional uint32 first_blood_time = 12; optional fixed32 replay_salt = 13; optional fixed32 server_ip = 14; optional uint32 server_port = 15; optional uint32 lobby_type = 16; optional uint32 human_players = 17; optional uint32 average_skill = 18; optional float game_balance = 19; optional uint32 radiant_team_id = 20; optional uint32 dire_team_id = 21; optional uint32 leagueid = 22; optional string radiant_team_name = 23; optional string dire_team_name = 24; optional uint64 radiant_team_logo = 25; optional uint64 dire_team_logo = 26; optional uint32 radiant_team_complete = 27; optional uint32 dire_team_complete = 28; optional uint32 positive_votes = 29; optional uint32 negative_votes = 30; optional DOTA_GameMode game_mode = 31 [default = DOTA_GAMEMODE_NONE]; repeated CMatchHeroSelectEvent picks_bans = 32; optional uint64 match_seq_num = 33; optional CMsgDOTAMatch.ReplayState replay_state = 34 [default = REPLAY_AVAILABLE]; optional uint32 radiant_guild_id = 35; optional uint32 dire_guild_id = 36; optional string radiant_team_tag = 37; optional string dire_team_tag = 38; optional uint32 series_id = 39; optional uint32 series_type = 40; repeated CMsgDOTAMatch.BroadcasterChannel broadcaster_channels = 43; optional uint32 engine = 44; optional CMsgDOTAMatch.CustomGameData custom_game_data = 45; optional uint32 match_flags = 46; optional fixed32 private_metadata_key = 47; optional uint32 radiant_team_score = 48; optional uint32 dire_team_score = 49; optional EMatchOutcome match_outcome = 50 [default = k_EMatchOutcome_Unknown]; optional uint32 tournament_id = 51; optional uint32 tournament_round = 52; optional uint32 pre_game_duration = 53; } message CMsgPlayerCard { message StatModifier { optional uint32 stat = 1; optional uint32 value = 2; } optional uint32 account_id = 1; repeated CMsgPlayerCard.StatModifier stat_modifier = 2; } message CMsgDOTAFantasyPlayerStats { optional uint32 player_account_id = 1; optional uint64 match_id = 2; optional bool match_completed = 3; optional uint32 team_id = 4; optional uint32 league_id = 5; optional uint32 delay = 6; optional uint32 series_id = 7; optional uint32 series_type = 8; optional uint32 kills = 10; optional uint32 deaths = 11; optional uint32 cs = 12; optional float gpm = 13; optional uint32 tower_kills = 14; optional uint32 roshan_kills = 15; optional float teamfight_participation = 16; optional uint32 wards_placed = 17; optional uint32 camps_stacked = 18; optional uint32 runes_grabbed = 19; optional uint32 first_blood = 20; optional float stuns = 21; } message CMsgDOTAFantasyPlayerMatchStats { repeated CMsgDOTAFantasyPlayerStats matches = 1; }