package dota; import "steammessages.proto"; import "dota_shared_enums.proto"; import "dota_gcmessages_common.proto"; import "econ_gcmessages.proto"; import "network_connection.proto"; import "dota_gcmessages_common_match_management.proto"; option optimize_for = SPEED; option cc_generic_services = false; enum EPoorNetworkConditionsType { k_EPoorNetworkConditions_None = 0; k_EPoorNetworkConditions_Unknown = 1; k_EPoorNetworkConditions_MassDisconnect = 2; k_EPoorNetworkConditions_ExcessBadQosIntervals = 3; } enum EAbilityAbuseType { k_EAbilityAbuseType_None = 0; k_EAbilityAbuseType_Io_Relocate = 1; k_EAbilityAbuseType_Chen_Test_Of_Faith = 2; k_EAbilityAbuseType_Bane_Nightmare = 3; k_EAbilityAbuseType_Bloodseeker_Bloodrage = 4; k_EAbilityAbuseType_Outworld_Astral_Imprisonment = 5; k_EAbilityAbuseType_Shadow_Demon_Disruption = 6; } enum EIntentionalFeedingType { k_EIntentionalFeedingType_None = 0; k_EIntentionalFeedingType_ExcessiveDeaths = 1; k_EIntentionalFeedingType_MultipleCourierPurchases = 2; k_EIntentionalFeedingType_MultipleCourierDeaths = 4; k_EIntentionalFeedingType_LowActivity = 8; k_EIntentionalFeedingType_LowDamage = 16; k_EIntentionalFeedingType_HighUnspentGold = 32; k_EIntentionalFeedingType_SoldTooMuchItemValue = 64; k_EIntentionalFeedingType_TooManyDroppedItems = 128; k_EIntentionalFeedingType_ExcessiveTowerDamage = 256; } enum ESuspiciousActivity { k_ESuspiciousActivity_VAC_MultipleInstances = 1; k_ESuspiciousActivity_IntentionalFeeding = 100; k_ESuspiciousActivity_SuspectedBotFarming = 101; } enum ESuspiciousBuildType { k_ESuspiciousBuildType_None = 0; k_ESuspiciousBuildType_NoGoldSpent = 1; k_ESuspiciousBuildType_NoItems = 2; k_ESuspiciousBuildType_NoSignificantItems = 3; k_ESuspiciousBuildType_TooManyBoots = 4; k_ESuspiciousBuildType_Bot1 = 101; k_ESuspiciousBuildType_Bot2 = 102; k_ESuspiciousBuildType_Bot3 = 103; k_ESuspiciousBuildType_Bot4 = 104; k_ESuspiciousBuildType_Bot5 = 105; } message CMsgPoorNetworkConditions { message Player { optional uint32 account_id = 1; optional ENetworkDisconnectionReason disconnect_reason = 2 [default = NETWORK_DISCONNECT_INVALID]; optional uint32 num_bad_intervals = 3; optional uint32 peak_loss_pct = 4; } optional EPoorNetworkConditionsType detection_type = 1 [default = k_EPoorNetworkConditions_None]; repeated CMsgPoorNetworkConditions.Player players = 2; } message CMsgGameserverCrash { optional uint64 match_id = 1; optional fixed64 lobby_id = 2; optional DOTA_GameState game_state = 3 [default = DOTA_GAMERULES_STATE_INIT]; optional fixed32 sentinel_save_time = 4; optional fixed64 custom_game_id = 11; optional uint32 tournament_id = 12; optional fixed64 server_steam_id = 5; optional fixed32 server_public_ip_addr = 6; optional uint32 server_port = 7; optional uint32 server_cluster = 8; optional uint32 pid = 9; optional uint32 engine = 10; } message CMsgConnectedPlayers { message Player { optional fixed64 steam_id = 1; optional uint32 hero_id = 2; optional CMsgLeaverState leaver_state = 3; optional ENetworkDisconnectionReason disconnect_reason = 4 [default = NETWORK_DISCONNECT_INVALID]; } enum SendReason { INVALID = 0; HEARTBEAT = 1; GAME_STATE = 2; FIRST_BLOOD = 3; PLAYER_CONNECTED = 4; PLAYER_HERO = 5; PLAYER_DISCONNECTED_CONSEQUENCES = 6; PLAYER_DISCONNECTED_NOCONSEQUENCES = 7; GAMESTATE_TIMEOUT = 10; MASS_DISCONNECT = 11; KILLS = 13; BUILDING_STATE = 14; } repeated CMsgConnectedPlayers.Player connected_players = 1; repeated CMsgConnectedPlayers.Player disconnected_players = 7; optional DOTA_GameState game_state = 2 [default = DOTA_GAMERULES_STATE_INIT]; optional bool first_blood_happened = 6; optional bool legacy_mass_disconnect = 9; optional CMsgPoorNetworkConditions poor_network_conditions = 10; optional CMsgConnectedPlayers.SendReason send_reason = 8 [default = INVALID]; optional uint32 radiant_kills = 11; optional uint32 dire_kills = 12; optional int32 radiant_lead = 14; optional uint32 building_state = 15; } message CMsgGameServerInfo { enum ServerType { UNSPECIFIED = 0; GAME = 1; PROXY = 2; } enum CustomGames { BOTH = 0; NONE = 1; ONLY = 2; } optional fixed32 server_public_ip_addr = 1; optional fixed32 server_private_ip_addr = 2; optional uint32 server_port = 3; optional uint32 server_tv_port = 4; optional uint32 assigned_server_tv_port = 22; optional uint32 server_steamdatagram_port = 21; optional string server_key = 5; optional bool server_hibernation = 6; optional CMsgGameServerInfo.ServerType server_type = 7 [default = UNSPECIFIED]; optional uint32 server_region = 8; optional float server_loadavg = 9; optional float server_tv_broadcast_time = 10; optional float server_game_time = 11; optional fixed64 server_relay_connected_steam_id = 12; optional uint32 relay_slots_max = 13; optional int32 relays_connected = 14; optional int32 relay_clients_connected = 15; optional fixed64 relayed_game_server_steam_id = 16; optional uint32 parent_relay_count = 17; optional fixed64 tv_secret_code = 18; optional uint32 server_version = 19; optional uint32 server_cluster = 20; optional CMsgGameServerInfo.CustomGames allow_custom_games = 23 [default = BOTH]; } message CMsgLeaverDetected { optional fixed64 steam_id = 1; optional DOTALeaverStatus_t leaver_status = 2 [default = DOTA_LEAVER_NONE]; optional CMsgLeaverState leaver_state = 4; optional uint32 server_cluster = 5; optional ENetworkDisconnectionReason disconnect_reason = 6 [default = NETWORK_DISCONNECT_INVALID]; optional CMsgPoorNetworkConditions poor_network_conditions = 7; } message CMsgLeaverDetectedResponse { optional uint32 result = 1; } message CMsgDOTAFantasyFinalPlayerStats { repeated CMsgDOTAFantasyPlayerStats stats = 2; } message CMsgDOTAFantasyLivePlayerStats { repeated CMsgDOTAFantasyPlayerStats stats = 2; } message CMsgDOTAFantasyMatch { optional uint64 match_id = 1; optional uint32 league_id = 2; optional uint32 series_id = 3; optional uint32 start_time = 4; optional uint32 series_type = 5; optional uint32 team_1 = 6; optional uint32 team_2 = 7; } message CMsgServerToGCRealtimeStats { optional CMsgDOTARealtimeGameStatsTerse delayed = 1; optional CMsgDOTARealtimeGameStats current = 2; } message CMsgGCToServerRealtimeStatsStartStop { optional bool delayed = 1; optional bool current = 2; } message CMsgGameMatchSignOut { message CTeam { message CPlayer { message CCustomGameData { optional uint32 dota_team = 1; optional bool winner = 2; } optional fixed64 steam_id = 1; optional uint32 hero_id = 3; repeated uint32 items = 4; optional uint32 gold = 5; optional uint32 kills = 6; optional uint32 deaths = 7; optional uint32 assists = 8; optional uint32 leaver_status = 9; optional uint32 last_hits = 10; optional uint32 denies = 11; optional uint32 gold_per_min = 12; optional uint32 xp_per_minute = 13; optional uint32 gold_spent = 14; optional uint32 level = 15; optional uint32 hero_damage = 16; optional uint32 tower_damage = 17; optional uint32 hero_healing = 18; optional uint32 time_last_seen = 19; optional uint32 support_ability_value = 20; optional uint64 party_id = 21; optional float scaled_kills = 24; optional float scaled_deaths = 25; optional float scaled_assists = 26; optional uint32 claimed_farm_gold = 27; optional uint32 support_gold = 28; optional uint32 claimed_denies = 29; optional uint32 claimed_misses = 30; optional uint32 misses = 31; repeated CMatchPlayerAbilityUpgrade ability_upgrades = 32; repeated CMatchAdditionalUnitInventory additional_units_inventory = 33; optional uint32 net_worth = 34; optional CMsgGameMatchSignOut.CTeam.CPlayer.CCustomGameData custom_game_data = 35; optional uint32 match_player_flags = 36; } repeated CMsgGameMatchSignOut.CTeam.CPlayer players = 1; } message CAdditionalSignoutMsg { optional uint32 id = 1; optional bytes contents = 2; } message CSocialFeedMatchEvent { optional uint32 account_id = 1; optional uint32 timestamp = 2; optional uint32 event_type = 3; optional int32 game_time = 4; optional uint32 replay_time = 5; } message CCustomGameData { optional uint32 publish_timestamp = 1; } optional uint64 match_id = 1 [(key_field) = true]; optional uint32 duration = 2; optional bool good_guys_win = 3; optional fixed32 date = 4; repeated uint32 num_players = 5; repeated CMsgGameMatchSignOut.CTeam teams = 6; repeated uint32 tower_status = 8; repeated uint32 barracks_status = 9; optional uint32 cluster = 10; optional string server_addr = 11; optional uint32 first_blood_time = 12; optional float game_balance = 13; optional uint32 event_score = 14; repeated CMatchHeroSelectEvent picks_bans = 15; repeated CMsgDOTAFantasyPlayerStats fantasy_stats = 41; repeated CMsgEconPlayerStrangeCountAdjustment player_strange_count_adjustments = 17; optional bool automatic_surrender = 18; optional uint32 server_version = 19; optional bool legacy_mass_disconnect = 21; optional CMsgPoorNetworkConditions poor_network_conditions = 35; repeated CMsgGameMatchSignOut.CAdditionalSignoutMsg additional_msgs = 20; repeated CMsgGameMatchSignOut.CSocialFeedMatchEvent social_feed_events = 36; optional sint32 average_networth_delta = 22; optional sint32 networth_delta_min10 = 23; optional sint32 networth_delta_min20 = 24; optional sint32 maximum_losing_networth_lead = 25; optional sint32 average_experience_delta = 26; optional sint32 experience_delta_min10 = 27; optional sint32 experience_delta_min20 = 28; optional sint32 bonus_gold_winner_min10 = 29; optional sint32 bonus_gold_winner_min20 = 30; optional uint32 bonus_gold_winner_total = 31; optional sint32 bonus_gold_loser_min10 = 32; optional sint32 bonus_gold_loser_min20 = 33; optional uint32 bonus_gold_loser_total = 34; optional CMsgGameMatchSignOut.CCustomGameData custom_game_data = 37; optional uint32 match_flags = 38; repeated uint32 team_scores = 39; optional uint32 pre_game_duration = 40; } message CMsgSignOutDraftInfo { optional uint32 radiant_captain_account_id = 1; optional uint32 dire_captain_account_id = 2; repeated CMatchHeroSelectEvent picks_bans = 3; } message CMsgSignOutBotInfo { message CMsgBotSlotDifficulty { optional uint32 slot = 1; optional DOTABotDifficulty bot_difficulty = 2 [default = BOT_DIFFICULTY_PASSIVE]; } optional bool allow_cheats = 1; optional DOTABotDifficulty bot_difficulty = 2 [default = BOT_DIFFICULTY_PASSIVE]; optional bool created_lobby = 3; repeated CMsgSignOutBotInfo.CMsgBotSlotDifficulty bot_slot_difficulties = 4; } message CMsgSignOutPlayerStats { optional int32 account_id = 1; optional uint64 match_id = 2; optional uint32 rank = 3; optional uint32 hero_id = 4; optional uint32 rampages = 5; optional uint32 triple_kills = 6; optional uint32 first_blood_claimed = 7; optional uint32 first_blood_given = 8; optional uint32 couriers_killed = 9; optional uint32 aegises_snatched = 10; optional uint32 cheeses_eaten = 11; optional uint32 creeps_stacked = 12; optional float fight_score = 13; optional float farm_score = 14; optional float support_score = 15; optional float push_score = 16; optional uint32 kills = 17; optional uint32 deaths = 18; optional uint32 assists = 19; optional uint32 last_hits = 20; optional uint32 denies = 21; optional float gpm = 22; optional float xppm = 23; } message CMsgSignOutCommunicationSummary { message PlayerCommunication { optional uint32 account_id = 1; optional uint32 pings = 2; optional uint32 max_pings_per_interval = 3; optional uint32 teammate_pings = 4; optional uint32 max_teammate_pings_per_interval = 5; optional uint32 team_chat_messages = 6; optional uint32 all_chat_messages = 7; optional uint32 chat_wheel_messages = 8; optional uint32 pauses = 9; optional uint32 unpauses = 10; optional uint32 lines_drawn = 11; optional uint32 voice_chat_seconds = 12; optional uint32 chat_mutes = 13; optional uint32 voice_mutes = 14; } repeated CMsgSignOutCommunicationSummary.PlayerCommunication players = 1; } message CMsgGameMatchSignoutResponse { message CAdditionalSignoutMsg { optional uint32 id = 1; optional bytes contents = 2; } message PlayerMetadata { optional uint32 hero_id = 1; optional uint32 avg_kills_x16 = 2; optional uint32 avg_deaths_x16 = 3; optional uint32 avg_assists_x16 = 4; optional uint32 avg_gpm_x16 = 5; optional uint32 avg_xpm_x16 = 6; optional uint32 best_kills_x16 = 7; optional uint32 best_assists_x16 = 8; optional uint32 best_gpm_x16 = 9; optional uint32 best_xpm_x16 = 10; optional uint32 win_streak = 11; optional uint32 best_win_streak = 12; } optional uint64 match_id = 1; optional fixed32 replay_salt = 2; repeated CLobbyTimedRewardDetails timed_reward_details = 3; repeated CDOTALobbyMember xp_reward_details = 4; optional uint32 leagueid = 5; repeated CMsgGameMatchSignoutResponse.CAdditionalSignoutMsg additional_msgs = 6; optional fixed32 metadata_private_key = 7; optional CMsgDOTAMatch match_details = 8; repeated CMsgGameMatchSignoutResponse.PlayerMetadata players_metadata = 9; } message CMsgTimedRewardContainer { repeated CLobbyTimedRewardDetails timed_reward_details = 1; } message CMsgGameMatchSignOutPermissionRequest { optional uint32 server_version = 1; optional uint32 local_attempt = 2; optional uint32 total_attempt = 3; optional uint32 seconds_waited = 4; } message CMsgGameMatchSignOutPermissionResponse { optional bool permission_granted = 1 [default = false]; optional bool abandon_signout = 2 [default = false]; optional uint32 retry_delay_seconds = 3 [default = 0]; } message CMsgDOTALiveScoreboardUpdate { message Team { message Player { message HeroAbility { optional uint32 ability_id = 1; optional uint32 ability_level = 2; } enum DOTAUltimateState { k_EDOTAUltimateStateNotLearned = 0; k_EDOTAUltimateStateCooldown = 1; k_EDOTAUltimateStateNeedsMana = 2; k_EDOTAUltimateStateReady = 3; } optional uint32 player_slot = 1; optional string player_name = 2; optional string hero_name = 3; optional uint32 hero_id = 4; optional uint32 kills = 5; optional uint32 deaths = 6; optional uint32 assists = 7; optional uint32 last_hits = 8; optional uint32 denies = 9; optional uint32 gold = 10; optional uint32 level = 11; optional float gold_per_min = 12; optional float xp_per_min = 13; optional CMsgDOTALiveScoreboardUpdate.Team.Player.DOTAUltimateState ultimate_state = 14 [default = k_EDOTAUltimateStateNotLearned]; optional float ultimate_cooldown = 15; optional uint32 item0 = 16; optional uint32 item1 = 17; optional uint32 item2 = 18; optional uint32 item3 = 19; optional uint32 item4 = 20; optional uint32 item5 = 21; optional uint32 respawn_timer = 22; optional uint32 account_id = 23; optional float position_x = 24; optional float position_y = 25; optional uint32 net_worth = 26; repeated CMsgDOTALiveScoreboardUpdate.Team.Player.HeroAbility abilities = 27; } repeated CMsgDOTALiveScoreboardUpdate.Team.Player players = 1; optional uint32 score = 2; optional uint32 tower_state = 3; optional uint32 barracks_state = 4; repeated uint32 hero_picks = 5; repeated uint32 hero_bans = 6; } optional uint32 tournament_id = 1; optional uint32 tournament_game_id = 2; optional float duration = 3; optional int32 hltv_delay = 4; optional CMsgDOTALiveScoreboardUpdate.Team team_good = 5; optional CMsgDOTALiveScoreboardUpdate.Team team_bad = 6; optional uint32 roshan_respawn_timer = 7; optional uint32 league_id = 8; optional uint64 match_id = 9; } message CMsgDOTARequestPlayerResources { optional fixed64 steam_id = 1; optional uint32 player_id = 2; } message CMsgDOTARequestPlayerResourcesResponse { optional fixed64 steam_id = 1; optional uint32 rank = 2; optional uint32 player_id = 3; optional bool prevent_text_chat = 4; optional bool prevent_voice_chat = 5; optional bool low_priority = 6; } message CMsgDOTARequestBatchPlayerResources { repeated uint32 account_ids = 1 [packed = true]; repeated uint32 rank_types = 4 [packed = true]; } message CMsgDOTARequestBatchPlayerResourcesResponse { message Result { optional uint32 account_id = 1; optional bool prevent_text_chat = 2; optional bool prevent_voice_chat = 3; optional uint32 rank = 4; optional bool rank_calibrated = 5; optional bool low_priority = 6; } repeated CMsgDOTARequestBatchPlayerResourcesResponse.Result results = 6; } message CMsgDOTAPlayerFailedToConnect { repeated fixed64 failed_loaders = 1; repeated fixed64 abandoned_loaders = 2; } message CMsgGCToRelayConnect { optional uint32 source_tv_public_addr = 1; optional uint32 source_tv_private_addr = 2; optional uint32 source_tv_port = 3; optional uint64 game_server_steam_id = 4; optional uint32 parent_count = 5; optional fixed64 tv_unique_secret_code = 6; optional fixed64 source_tv_steamid = 7; } message CMsgGCGCToLANServerRelayConnect { optional fixed64 relay_steamid = 1; } message CMsgGCToRelayConnectResponse { } message CMsgGCBanStatusRequest { optional uint32 account_id = 1; } message CMsgGCBanStatusResponse { optional uint32 result = 1; optional bool low_priority = 2; optional bool text_chat_banned = 3; optional bool voice_chat_banned = 4; } message CMsgTournamentItemEvent { optional fixed32 killer_account_id = 1; optional fixed32 victim_account_id = 2; optional DOTA_TournamentEvents event_type = 3 [default = TE_FIRST_BLOOD]; optional int32 tv_delay = 4; optional int32 dota_time = 5; optional float replay_time = 6; optional string loot_list = 7; optional uint32 event_team = 8; optional uint32 multi_kill_count = 9; optional uint32 winner_score = 10; optional uint32 loser_score = 11; repeated CProtoItemHeroStatue hero_statues = 12; } message CMsgTournamentItemEventResponse { optional DOTA_TournamentEvents event_type = 1 [default = TE_FIRST_BLOOD]; optional uint32 viewers_granted = 6; } message CMsgTeamFanfare { optional uint64 match_id = 1; } message CMsgResponseTeamFanfare { optional uint32 fanfare_goodguys = 1; optional uint32 fanfare_badguys = 2; } message CMsgGameServerUploadSaveGame { optional uint32 game_time = 1; optional bytes save_game_data = 2; optional uint64 lobby_id = 3; repeated uint64 player_steam_ids = 4; } message CMsgGameServerSaveGameResult { enum Result { SaveSuccessful = 0; SessionNotFound = 1; DatabaseError = 2; TooBig = 3; } optional CMsgGameServerSaveGameResult.Result result = 1 [default = SaveSuccessful]; } message CMsgGameServerGetLoadGame { optional uint32 save_id = 1; } message CMsgGameServerGetLoadGameResult { optional bytes save_game_data = 1; } message CMsgDOTAGenerateDiretidePrizeList { optional uint32 prize_list = 1; optional uint32 highest_roshan_level = 2; } message CMsgDOTAGenerateDiretidePrizeListResponse { repeated uint32 item_defs = 1; repeated fixed64 steam_ids = 2; optional uint32 prize_list = 3; } message CMsgDOTARewardDiretidePrizes { optional uint32 team = 1; optional uint32 prize_list = 2; } message CMsgDOTADiretidePrizesRewardedResponse { optional uint32 prize_list = 1; } message CMsgDOTAAwardEventPoints { message AwardPoints { optional uint32 account_id = 1; optional int32 points = 2; optional int32 premium_points = 3; optional uint32 trade_ban_time = 5; } repeated CMsgDOTAAwardEventPoints.AwardPoints award_points = 1; optional uint64 match_id = 2; optional uint32 event_id = 4; optional uint32 timestamp = 5; optional uint32 audit_action = 6; } message CMsgServerToGCSignoutAwardAdditionalDrops { message AdditionalDrops { optional string loot_list = 1; repeated uint32 player_account_ids = 2; optional bool no_trade = 3; optional bool randomize_reward = 4; } repeated CMsgServerToGCSignoutAwardAdditionalDrops.AdditionalDrops drops = 1; optional uint64 match_id = 2; } message CMsgDOTAFrostivusTimeElapsed { message User { optional uint32 account_id = 1; optional uint32 time_elapsed_s = 2; } optional uint32 seconds = 1; repeated CMsgDOTAFrostivusTimeElapsed.User users = 2; optional uint64 match_id = 3; } message CMsgGCToServerPingRequest { optional fixed64 request_id = 1; optional uint64 request_time = 2; } message CMsgGCToServerPingResponse { optional fixed64 request_id = 1; optional uint64 request_time = 2; optional uint32 cluster = 3; } message CMsgGCToServerConsoleCommand { optional string console_command = 1; } message CMsgServerGetEventPoints { optional uint32 event_id = 1; repeated uint32 account_id = 2; } message CMsgServerGetEventPointsResponse { message Points { optional uint32 account_id = 1; optional uint32 points_total = 2; optional bool owned = 4; } optional uint32 event_id = 1; repeated CMsgServerGetEventPointsResponse.Points points = 2; } message CMsgServerGrantSurveyPermission { message Survey { optional uint32 account_id = 1; optional uint32 question_id = 2; optional uint32 expire_time = 3; optional uint64 survey_key = 4; optional uint64 extra_data = 5; optional uint64 extra_data_32 = 6; } repeated CMsgServerGrantSurveyPermission.Survey surveys = 1; } message CMsgServerGrantSurveyPermissionResponse { optional uint32 result = 1; } message CMsgServerToGCMatchConnectionStats { message Player { optional uint32 account_id = 1; optional fixed32 ip = 2; optional uint32 avg_ping_ms = 3; optional float packet_loss = 5; optional float ping_deviation = 6; optional uint32 full_resends = 7; } optional uint64 match_id = 1; optional uint32 region_id = 2; optional uint32 league_id = 3; repeated CMsgServerToGCMatchConnectionStats.Player players = 4; optional uint32 cluster_id = 5; } message CMsgServerGCUpdateSpectatorCount { optional uint32 spectator_count = 1; } message CSerializedCombatLog { message Dictionary { message DictString { required uint32 id = 1; required string value = 2; } repeated CSerializedCombatLog.Dictionary.DictString strings = 1; } optional uint32 version = 1; optional CSerializedCombatLog.Dictionary dictionary = 2; repeated CMsgDOTACombatLogEntry entries = 3; } message CMsgServerToGCGetAdditionalEquips { repeated uint32 account_ids = 1; } message CMsgServerToGCGetAdditionalEquipsResponse { message CUserEquips { optional uint32 account_id = 1; repeated CAdditionalEquipSlot equips = 2; } repeated CMsgServerToGCGetAdditionalEquipsResponse.CUserEquips equips = 1; } message CMsgServerToGCGetProfileCard { repeated uint32 account_ids = 1; } message CMsgServerToGCGetProfileCardResponse { repeated CMsgDOTAProfileCard cards = 1; } message CMsgServerToGCVictoryPredictions { message Record { optional uint32 account_id = 1; optional uint64 item_id = 2; repeated uint64 item_ids = 5; } repeated CMsgServerToGCVictoryPredictions.Record records = 1; } message CMsgSuspiciousActivity { optional uint32 account_id = 1; optional ESuspiciousActivity activity = 2 [default = k_ESuspiciousActivity_VAC_MultipleInstances]; optional sint32 intdata1 = 3; optional sint32 intdata2 = 4; optional uint32 time = 5; } message CMsgServerToGCRequestStatus { } message CMsgServerToGCRequestStatus_Response { optional uint32 response = 1; } message CMsgSignOutAssassinMiniGameInfo { repeated fixed64 winning_players = 1; repeated fixed64 losing_players = 2; repeated fixed64 arcana_owners = 3; optional bool assassin_won = 4; optional uint32 target_hero_id = 5; optional bool contract_completed = 6; optional float contract_complete_time = 7; optional bool pa_is_radiant = 8; } message CMsgServerToGCGetIngameEventData { optional EEvent event = 1 [default = EVENT_ID_NONE]; } message CMsgGCToServerIngameEventDataOraclePA { repeated uint32 target_hero_ids = 1; } message CMsgServerToGCKillSummaries { message KillSummary { optional uint32 killer_hero_id = 1; optional uint32 victim_hero_id = 2; optional uint32 kill_count = 3; } optional uint32 ingameevent_id = 1; repeated CMsgServerToGCKillSummaries.KillSummary summaries = 2; } message CMsgGCToServerPredictionResult { message Prediction { enum EResult { k_eResult_ItemGranted = 1; k_eResult_Destroyed = 2; } optional uint32 item_def = 1; optional uint32 num_correct = 2; optional uint32 num_fails = 3; optional CMsgGCToServerPredictionResult.Prediction.EResult result = 4 [default = k_eResult_ItemGranted]; repeated uint32 granted_item_defs = 6; } optional uint32 account_id = 1; optional uint64 match_id = 2; optional bool correct = 3; repeated CMsgGCToServerPredictionResult.Prediction predictions = 4; } message CMsgServerToGCLockCharmTrading { optional uint32 account_id = 1; optional uint64 item_id = 2; } message CMsgSignOutUpdatePlayerChallenge { message Challenge { optional uint32 event_id = 1; optional uint32 sequence_id = 3; optional uint32 progress = 4; optional uint32 challenge_rank = 5; } optional uint32 account_id = 1; repeated CMsgSignOutUpdatePlayerChallenge.Challenge completed = 2; repeated CMsgSignOutUpdatePlayerChallenge.Challenge rerolled = 3; optional uint64 match_id = 4; optional uint32 hero_id = 5; } message CMsgServerToGCRerollPlayerChallenge { optional uint32 account_id = 1; optional CMsgClientToGCRerollPlayerChallenge reroll_msg = 2; } message CMsgServerToGCHoldEventPoints { message HoldRequest { optional uint32 account_id = 1; optional uint32 points_held = 2; optional uint32 premium_held = 3; } repeated CMsgServerToGCHoldEventPoints.HoldRequest holds = 1; optional uint32 event_id = 2; optional uint64 hold_key = 3; optional uint32 hold_until = 4; } message CMsgSignOutReleaseEventPointHolds { repeated uint32 account_ids = 1; optional uint32 event_id = 2; optional uint64 hold_key = 3; } message CMsgGCToServerUpdateBroadcastCheers { optional uint32 time_stamp = 1; optional uint32 team_1_cheers = 2; optional uint32 team_2_cheers = 3; } message CMsgSignOutWagerStats { message Player { optional uint32 account_id = 1; optional uint32 winnings = 2; optional uint32 max_wager = 3; optional uint32 wager = 4; } repeated CMsgSignOutWagerStats.Player players = 1; optional uint32 event_id = 2; } message CMsgSignOutXPCoins { message Player { optional uint32 account_id = 1; optional uint32 xp_gained = 2; optional uint32 coins_spent = 3; } repeated CMsgSignOutXPCoins.Player players = 1; optional uint32 event_id = 2; optional uint64 match_id = 3; optional uint32 timestamp = 4; } message CMsgSignOutCommunityGoalProgress { message EventGoalIncrement { optional uint32 event_goal_id = 1; optional uint32 increment_amount = 2; } optional uint32 event_id = 1; repeated CMsgSignOutCommunityGoalProgress.EventGoalIncrement event_increments = 2; } message CMsgServerToGCPostMatchTip { optional uint32 event_id = 1; optional uint64 match_id = 2; optional uint32 tipper_account_id = 3; optional uint32 recipient_account_id = 4; optional uint32 tip_amount = 5; } message CMsgServerToGCPostMatchTipResponse { enum Result { SUCCESS = 0; FAILURE = 1; } optional uint64 match_id = 1; optional uint32 tipper_account_id = 2; optional uint32 recipient_account_id = 3; optional CMsgServerToGCPostMatchTipResponse.Result result = 4 [default = SUCCESS]; } message CMsgServerToGCStartCompendiumInGamePredictions { optional uint32 league_id = 1; optional uint64 match_id = 2; optional float hltv_delay = 3; repeated uint32 prediction_ids = 4; } message CMsgServerToGCStartCompendiumInGamePredictionsResponse { optional bool result = 1; } message CMsgServerToGCCloseCompendiumInGamePredictionVoting { optional uint64 match_id = 1; } message CMsgServerToGCCloseCompendiumInGamePredictionVotingResponse { optional bool result = 1; } message CMsgServerToGCEndCompendiumInGamePredictions { optional uint64 match_id = 1; } message CMsgServerToGCEndCompendiumInGamePredictionsResponse { optional bool result = 1; } message CMsgServerToGCCompendiumInGamePredictionResults { message PredictionResult { optional uint32 prediction_id = 1; optional uint32 prediction_value = 2; optional bool prediction_value_is_mask = 3; } optional uint64 match_id = 1; repeated CMsgServerToGCCompendiumInGamePredictionResults.PredictionResult results = 2; } message CMsgServerToGCCompendiumInGamePredictionResultsResponse { optional bool result = 1; }