You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1025 lines
30 KiB
Protocol Buffer
1025 lines
30 KiB
Protocol Buffer
8 years ago
|
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;
|
||
|
}
|
||
|
|