syntax = "proto2";
option go_package="./demo";
import "networkbasetypes.proto";
import "dota_shared_enums.proto";
import "dota_commonmessages.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum EDotaUserMessages {
	DOTA_UM_AddUnitToSelection = 464;
	DOTA_UM_AIDebugLine = 465;
	DOTA_UM_ChatEvent = 466;
	DOTA_UM_CombatHeroPositions = 467;
	DOTA_UM_CombatLogData = 468;
	DOTA_UM_CombatLogBulkData = 470;
	DOTA_UM_CreateLinearProjectile = 471;
	DOTA_UM_DestroyLinearProjectile = 472;
	DOTA_UM_DodgeTrackingProjectiles = 473;
	DOTA_UM_GlobalLightColor = 474;
	DOTA_UM_GlobalLightDirection = 475;
	DOTA_UM_InvalidCommand = 476;
	DOTA_UM_LocationPing = 477;
	DOTA_UM_MapLine = 478;
	DOTA_UM_MiniKillCamInfo = 479;
	DOTA_UM_MinimapDebugPoint = 480;
	DOTA_UM_MinimapEvent = 481;
	DOTA_UM_NevermoreRequiem = 482;
	DOTA_UM_OverheadEvent = 483;
	DOTA_UM_SetNextAutobuyItem = 484;
	DOTA_UM_SharedCooldown = 485;
	DOTA_UM_SpectatorPlayerClick = 486;
	DOTA_UM_TutorialTipInfo = 487;
	DOTA_UM_UnitEvent = 488;
	DOTA_UM_ParticleManager = 489;
	DOTA_UM_BotChat = 490;
	DOTA_UM_HudError = 491;
	DOTA_UM_ItemPurchased = 492;
	DOTA_UM_Ping = 493;
	DOTA_UM_ItemFound = 494;
	DOTA_UM_CharacterSpeakConcept = 495;
	DOTA_UM_SwapVerify = 496;
	DOTA_UM_WorldLine = 497;
	DOTA_UM_TournamentDrop = 498;
	DOTA_UM_ItemAlert = 499;
	DOTA_UM_HalloweenDrops = 500;
	DOTA_UM_ChatWheel = 501;
	DOTA_UM_ReceivedXmasGift = 502;
	DOTA_UM_UpdateSharedContent = 503;
	DOTA_UM_TutorialRequestExp = 504;
	DOTA_UM_TutorialPingMinimap = 505;
	DOTA_UM_GamerulesStateChanged = 506;
	DOTA_UM_ShowSurvey = 507;
	DOTA_UM_TutorialFade = 508;
	DOTA_UM_AddQuestLogEntry = 509;
	DOTA_UM_SendStatPopup = 510;
	DOTA_UM_TutorialFinish = 511;
	DOTA_UM_SendRoshanPopup = 512;
	DOTA_UM_SendGenericToolTip = 513;
	DOTA_UM_SendFinalGold = 514;
	DOTA_UM_CustomMsg = 515;
	DOTA_UM_CoachHUDPing = 516;
	DOTA_UM_ClientLoadGridNav = 517;
	DOTA_UM_TE_Projectile = 518;
	DOTA_UM_TE_ProjectileLoc = 519;
	DOTA_UM_TE_DotaBloodImpact = 520;
	DOTA_UM_TE_UnitAnimation = 521;
	DOTA_UM_TE_UnitAnimationEnd = 522;
	DOTA_UM_AbilityPing = 523;
	DOTA_UM_ShowGenericPopup = 524;
	DOTA_UM_VoteStart = 525;
	DOTA_UM_VoteUpdate = 526;
	DOTA_UM_VoteEnd = 527;
	DOTA_UM_BoosterState = 528;
	DOTA_UM_WillPurchaseAlert = 529;
	DOTA_UM_TutorialMinimapPosition = 530;
	DOTA_UM_PlayerMMR = 531;
	DOTA_UM_AbilitySteal = 532;
	DOTA_UM_CourierKilledAlert = 533;
	DOTA_UM_EnemyItemAlert = 534;
	DOTA_UM_StatsMatchDetails = 535;
	DOTA_UM_MiniTaunt = 536;
	DOTA_UM_BuyBackStateAlert = 537;
	DOTA_UM_SpeechBubble = 538;
	DOTA_UM_CustomHeaderMessage = 539;
	DOTA_UM_QuickBuyAlert = 540;
	DOTA_UM_StatsHeroDetails = 541;
	DOTA_UM_PredictionResult = 542;
	DOTA_UM_ModifierAlert = 543;
	DOTA_UM_HPManaAlert = 544;
	DOTA_UM_GlyphAlert = 545;
	DOTA_UM_BeastChat = 546;
	DOTA_UM_SpectatorPlayerUnitOrders = 547;
	DOTA_UM_CustomHudElement_Create = 548;
	DOTA_UM_CustomHudElement_Modify = 549;
	DOTA_UM_CustomHudElement_Destroy = 550;
	DOTA_UM_CompendiumState = 551;
	DOTA_UM_ProjectionAbility = 552;
	DOTA_UM_ProjectionEvent = 553;
	DOTA_UM_CombatLogDataHLTV = 554;
	DOTA_UM_XPAlert = 555;
	DOTA_UM_UpdateQuestProgress = 556;
	DOTA_UM_MatchMetadata = 557;
	DOTA_UM_MatchDetails = 558;
	DOTA_UM_QuestStatus = 559;
	DOTA_UM_SuggestHeroPick = 560;
	DOTA_UM_SuggestHeroRole = 561;
	DOTA_UM_KillcamDamageTaken = 562;
	DOTA_UM_SelectPenaltyGold = 563;
	DOTA_UM_RollDiceResult = 564;
	DOTA_UM_FlipCoinResult = 565;
	DOTA_UM_RequestItemSuggestions = 566;
	DOTA_UM_TeamCaptainChanged = 567;
	DOTA_UM_SendRoshanSpectatorPhase = 568;
	DOTA_UM_ChatWheelCooldown = 569;
	DOTA_UM_DismissAllStatPopups = 570;
	DOTA_UM_TE_DestroyProjectile = 571;
	DOTA_UM_HeroRelicProgress = 572;
	DOTA_UM_AbilityDraftRequestAbility = 573;
	DOTA_UM_ItemSold = 574;
	DOTA_UM_DamageReport = 575;
	DOTA_UM_SalutePlayer = 576;
	DOTA_UM_TipAlert = 577;
	DOTA_UM_ReplaceQueryUnit = 578;
	DOTA_UM_EmptyTeleportAlert = 579;
	DOTA_UM_MarsArenaOfBloodAttack = 580;
	DOTA_UM_ESArcanaCombo = 581;
	DOTA_UM_ESArcanaComboSummary = 582;
	DOTA_UM_HighFiveLeftHanging = 583;
	DOTA_UM_HighFiveCompleted = 584;
	DOTA_UM_ShovelUnearth = 585;
	DOTA_EM_InvokerSpellCast = 586;
	DOTA_UM_RadarAlert = 587;
	DOTA_UM_AllStarEvent = 588;
	DOTA_UM_TalentTreeAlert = 589;
	DOTA_UM_QueuedOrderRemoved = 590;
	DOTA_UM_DebugChallenge = 591;
	DOTA_UM_OMArcanaCombo = 592;
	DOTA_UM_FoundNeutralItem = 593;
	DOTA_UM_OutpostCaptured = 594;
	DOTA_UM_OutpostGrantedXP = 595;
	DOTA_UM_MoveCameraToUnit = 596;
	DOTA_UM_PauseMinigameData = 597;
	DOTA_UM_VersusScene_PlayerBehavior = 598;
	DOTA_UM_QoP_ArcanaSummary = 600;
	DOTA_UM_HotPotato_Created = 601;
	DOTA_UM_HotPotato_Exploded = 602;
	DOTA_UM_WK_Arcana_Progress = 603;
	DOTA_UM_GuildChallenge_Progress = 604;
	DOTA_UM_WRArcanaProgress = 605;
	DOTA_UM_WRArcanaSummary = 606;
	DOTA_UM_EmptyItemSlotAlert = 607;
	DOTA_UM_AghsStatusAlert = 608;
	DOTA_UM_PingConfirmation = 609;
	DOTA_UM_MutedPlayers = 610;
	DOTA_UM_ContextualTip = 611;
	DOTA_UM_ChatMessage = 612;
}

enum DOTA_CHAT_MESSAGE {
	CHAT_MESSAGE_INVALID = -1;
	CHAT_MESSAGE_HERO_KILL = 0;
	CHAT_MESSAGE_HERO_DENY = 1;
	CHAT_MESSAGE_BARRACKS_KILL = 2;
	CHAT_MESSAGE_TOWER_KILL = 3;
	CHAT_MESSAGE_TOWER_DENY = 4;
	CHAT_MESSAGE_FIRSTBLOOD = 5;
	CHAT_MESSAGE_STREAK_KILL = 6;
	CHAT_MESSAGE_BUYBACK = 7;
	CHAT_MESSAGE_AEGIS = 8;
	CHAT_MESSAGE_ROSHAN_KILL = 9;
	CHAT_MESSAGE_COURIER_LOST = 10;
	CHAT_MESSAGE_COURIER_RESPAWNED = 11;
	CHAT_MESSAGE_GLYPH_USED = 12;
	CHAT_MESSAGE_ITEM_PURCHASE = 13;
	CHAT_MESSAGE_CONNECT = 14;
	CHAT_MESSAGE_DISCONNECT = 15;
	CHAT_MESSAGE_DISCONNECT_WAIT_FOR_RECONNECT = 16;
	CHAT_MESSAGE_DISCONNECT_TIME_REMAINING = 17;
	CHAT_MESSAGE_DISCONNECT_TIME_REMAINING_PLURAL = 18;
	CHAT_MESSAGE_RECONNECT = 19;
	CHAT_MESSAGE_PLAYER_LEFT = 20;
	CHAT_MESSAGE_SAFE_TO_LEAVE = 21;
	CHAT_MESSAGE_RUNE_PICKUP = 22;
	CHAT_MESSAGE_RUNE_BOTTLE = 23;
	CHAT_MESSAGE_RUNE_DENY = 114;
	CHAT_MESSAGE_INTHEBAG = 24;
	CHAT_MESSAGE_SECRETSHOP = 25;
	CHAT_MESSAGE_ITEM_AUTOPURCHASED = 26;
	CHAT_MESSAGE_ITEMS_COMBINED = 27;
	CHAT_MESSAGE_SUPER_CREEPS = 28;
	CHAT_MESSAGE_CANT_USE_ACTION_ITEM = 29;
	CHAT_MESSAGE_CANTPAUSE = 31;
	CHAT_MESSAGE_NOPAUSESLEFT = 32;
	CHAT_MESSAGE_CANTPAUSEYET = 33;
	CHAT_MESSAGE_PAUSED = 34;
	CHAT_MESSAGE_UNPAUSE_COUNTDOWN = 35;
	CHAT_MESSAGE_UNPAUSED = 36;
	CHAT_MESSAGE_AUTO_UNPAUSED = 37;
	CHAT_MESSAGE_YOUPAUSED = 38;
	CHAT_MESSAGE_CANTUNPAUSETEAM = 39;
	CHAT_MESSAGE_VOICE_TEXT_BANNED = 41;
	CHAT_MESSAGE_SPECTATORS_WATCHING_THIS_GAME = 42;
	CHAT_MESSAGE_REPORT_REMINDER = 43;
	CHAT_MESSAGE_ECON_ITEM = 44;
	CHAT_MESSAGE_TAUNT = 45;
	CHAT_MESSAGE_RANDOM = 46;
	CHAT_MESSAGE_RD_TURN = 47;
	CHAT_MESSAGE_DROP_RATE_BONUS = 49;
	CHAT_MESSAGE_NO_BATTLE_POINTS = 50;
	CHAT_MESSAGE_DENIED_AEGIS = 51;
	CHAT_MESSAGE_INFORMATIONAL = 52;
	CHAT_MESSAGE_AEGIS_STOLEN = 53;
	CHAT_MESSAGE_ROSHAN_CANDY = 54;
	CHAT_MESSAGE_ITEM_GIFTED = 55;
	CHAT_MESSAGE_HERO_KILL_WITH_GREEVIL = 56;
	CHAT_MESSAGE_HOLDOUT_TOWER_DESTROYED = 57;
	CHAT_MESSAGE_HOLDOUT_WALL_DESTROYED = 58;
	CHAT_MESSAGE_HOLDOUT_WALL_FINISHED = 59;
	CHAT_MESSAGE_PLAYER_LEFT_LIMITED_HERO = 62;
	CHAT_MESSAGE_ABANDON_LIMITED_HERO_EXPLANATION = 63;
	CHAT_MESSAGE_DISCONNECT_LIMITED_HERO = 64;
	CHAT_MESSAGE_LOW_PRIORITY_COMPLETED_EXPLANATION = 65;
	CHAT_MESSAGE_RECRUITMENT_DROP_RATE_BONUS = 66;
	CHAT_MESSAGE_FROSTIVUS_SHINING_BOOSTER_ACTIVE = 67;
	CHAT_MESSAGE_PLAYER_LEFT_AFK = 73;
	CHAT_MESSAGE_PLAYER_LEFT_DISCONNECTED_TOO_LONG = 74;
	CHAT_MESSAGE_PLAYER_ABANDONED = 75;
	CHAT_MESSAGE_PLAYER_ABANDONED_AFK = 76;
	CHAT_MESSAGE_PLAYER_ABANDONED_DISCONNECTED_TOO_LONG = 77;
	CHAT_MESSAGE_WILL_NOT_BE_SCORED = 78;
	CHAT_MESSAGE_WILL_NOT_BE_SCORED_RANKED = 79;
	CHAT_MESSAGE_WILL_NOT_BE_SCORED_NETWORK = 80;
	CHAT_MESSAGE_WILL_NOT_BE_SCORED_NETWORK_RANKED = 81;
	CHAT_MESSAGE_CAN_QUIT_WITHOUT_ABANDON = 82;
	CHAT_MESSAGE_RANKED_GAME_STILL_SCORED_LEAVERS_GET_LOSS = 83;
	CHAT_MESSAGE_ABANDON_RANKED_BEFORE_FIRST_BLOOD_PARTY = 84;
	CHAT_MESSAGE_COMPENDIUM_LEVEL = 85;
	CHAT_MESSAGE_VICTORY_PREDICTION_STREAK = 86;
	CHAT_MESSAGE_ASSASSIN_ANNOUNCE = 87;
	CHAT_MESSAGE_ASSASSIN_SUCCESS = 88;
	CHAT_MESSAGE_ASSASSIN_DENIED = 89;
	CHAT_MESSAGE_VICTORY_PREDICTION_SINGLE_USER_CONFIRM = 90;
	CHAT_MESSAGE_EFFIGY_KILL = 91;
	CHAT_MESSAGE_VOICE_TEXT_BANNED_OVERFLOW = 92;
	CHAT_MESSAGE_YEAR_BEAST_KILLED = 93;
	CHAT_MESSAGE_PAUSE_COUNTDOWN = 94;
	CHAT_MESSAGE_COINS_WAGERED = 95;
	CHAT_MESSAGE_HERO_NOMINATED_BAN = 96;
	CHAT_MESSAGE_HERO_BANNED = 97;
	CHAT_MESSAGE_HERO_BAN_COUNT = 98;
	CHAT_MESSAGE_RIVER_PAINTED = 99;
	CHAT_MESSAGE_SCAN_USED = 100;
	CHAT_MESSAGE_SHRINE_KILLED = 101;
	CHAT_MESSAGE_WAGER_TOKEN_SPENT = 102;
	CHAT_MESSAGE_RANK_WAGER = 103;
	CHAT_MESSAGE_NEW_PLAYER_REMINDER = 104;
	CHAT_MESSAGE_OBSERVER_WARD_KILLED = 105;
	CHAT_MESSAGE_SENTRY_WARD_KILLED = 106;
	CHAT_MESSAGE_ITEM_PLACED_IN_NEUTRAL_STASH = 107;
	CHAT_MESSAGE_HERO_CHOICE_INVALID = 108;
	CHAT_MESSAGE_BOUNTY = 109;
	CHAT_MESSAGE_ABILITY_DRAFT_START = 110;
	CHAT_MESSAGE_HERO_FOUND_CANDY = 111;
	CHAT_MESSAGE_ABILITY_DRAFT_RANDOMED = 112;
	CHAT_MESSAGE_PRIVATE_COACH_CONNECTED = 113;
	CHAT_MESSAGE_CANT_PAUSE_TOO_EARLY = 115;
}

enum DOTA_NO_BATTLE_POINTS_REASONS {
	NO_BATTLE_POINTS_WRONG_LOBBY_TYPE = 1;
	NO_BATTLE_POINTS_PRACTICE_BOTS = 2;
	NO_BATTLE_POINTS_CHEATS_ENABLED = 3;
	NO_BATTLE_POINTS_LOW_PRIORITY = 4;
}

enum DOTA_CHAT_INFORMATIONAL {
	INFO_COOP_BATTLE_POINTS_RULES = 1;
	INFO_FROSTIVUS_ABANDON_REMINDER = 2;
	INFO_RANKED_REMINDER = 3;
	INFO_COOP_LOW_PRIORITY_PASSIVE_REMINDER = 4;
	INFO_CUSTOM_GAME_PENALTY_REMINDER = 5;
}

enum DOTA_ABILITY_PING_TYPE {
	ABILITY_PING_READY = 1;
	ABILITY_PING_MANA = 2;
	ABILITY_PING_COOLDOWN = 3;
	ABILITY_PING_ENEMY = 4;
	ABILITY_PING_UNLEARNED = 5;
	ABILITY_PING_INBACKPACK = 6;
	ABILITY_PING_INSTASH = 7;
	ABILITY_PING_ONCOURIER = 8;
	ABILITY_PING_ALLY = 9;
	ABILITY_PING_LEARN_READY = 10;
	ABILITY_PING_WILL_LEARN = 11;
	ABILITY_PING_FUTURE_LEARN = 12;
	ABILITY_PING_NEUTRAL_OFFER = 13;
	ABILITY_PING_NEUTRAL_REQUEST = 14;
	ABILITY_PING_NEUTRAL_EQUIP = 15;
}

enum DOTA_REPLAY_STATE_EVENT {
	DOTA_REPLAY_STATE_EVENT_GAME_START = 1;
	DOTA_REPLAY_STATE_EVENT_STARTING_HORN = 2;
	DOTA_REPLAY_STATE_EVENT_FIRST_BLOOD = 3;
	DOTA_REPLAY_STATE_EVENT_SHOWCASE = 4;
	DOTA_REPLAY_STATE_EVENT_POST_GAME = 5;
	DOTA_REPLAY_STATE_EVENT_WAIT_FOR_MAP = 6;
}

enum EDotaEntityMessages {
	DOTA_UNIT_SPEECH = 0;
	DOTA_UNIT_SPEECH_MUTE = 1;
	DOTA_UNIT_ADD_GESTURE = 2;
	DOTA_UNIT_REMOVE_GESTURE = 3;
	DOTA_UNIT_REMOVE_ALL_GESTURES = 4;
	DOTA_UNIT_FADE_GESTURE = 6;
	DOTA_UNIT_SPEECH_CLIENTSIDE_RULES = 7;
}

enum DOTA_OVERHEAD_ALERT {
	OVERHEAD_ALERT_GOLD = 0;
	OVERHEAD_ALERT_DENY = 1;
	OVERHEAD_ALERT_CRITICAL = 2;
	OVERHEAD_ALERT_XP = 3;
	OVERHEAD_ALERT_BONUS_SPELL_DAMAGE = 4;
	OVERHEAD_ALERT_MISS = 5;
	OVERHEAD_ALERT_DAMAGE = 6;
	OVERHEAD_ALERT_EVADE = 7;
	OVERHEAD_ALERT_BLOCK = 8;
	OVERHEAD_ALERT_BONUS_POISON_DAMAGE = 9;
	OVERHEAD_ALERT_HEAL = 10;
	OVERHEAD_ALERT_MANA_ADD = 11;
	OVERHEAD_ALERT_MANA_LOSS = 12;
	OVERHEAD_ALERT_LAST_HIT_EARLY = 13;
	OVERHEAD_ALERT_LAST_HIT_CLOSE = 14;
	OVERHEAD_ALERT_LAST_HIT_MISS = 15;
	OVERHEAD_ALERT_MAGICAL_BLOCK = 16;
	OVERHEAD_ALERT_INCOMING_DAMAGE = 17;
	OVERHEAD_ALERT_OUTGOING_DAMAGE = 18;
	OVERHEAD_ALERT_DISABLE_RESIST = 19;
	OVERHEAD_ALERT_DEATH = 20;
	OVERHEAD_ALERT_BLOCKED = 21;
	OVERHEAD_ALERT_ITEM_RECEIVED = 22;
	OVERHEAD_ALERT_SHARD = 23;
	OVERHEAD_ALERT_DEADLY_BLOW = 24;
}

enum DOTA_ROSHAN_PHASE {
	k_SRSP_ROSHAN_ALIVE = 0;
	k_SRSP_ROSHAN_BASE_TIMER = 1;
	k_SRSP_ROSHAN_VISIBLE_TIMER = 2;
}

enum DOTA_POSITION_CATEGORY {
	DOTA_POSITION_NONE = 0;
	DOTA_POSITION_BOTTOM_LANE = 1;
	DOTA_POSITION_MID_LANE = 2;
	DOTA_POSITION_TOP_LANE = 3;
	DOTA_POSITION_RADIANT_JUNGLE = 4;
	DOTA_POSITION_DIRE_JUNGLE = 5;
	DOTA_POSITION_RADIANT_ANCIENTS = 6;
	DOTA_POSITION_DIRE_ANCIENTS = 7;
	DOTA_POSITION_RADIANT_SECRET_SHOP = 8;
	DOTA_POSITION_DIRE_SECRET_SHOP = 9;
	DOTA_POSITION_RIVER = 10;
	DOTA_POSITION_ROSHAN_PIT = 11;
	DOTA_POSITION_RADIANT_BASE = 12;
	DOTA_POSITION_DIRE_BASE = 13;
	DOTA_POSITION_FOUNTAIN = 14;
	DOTA_POSITION_OTHER = 15;
}

enum DOTA_ABILITY_TARGET_TYPE {
	DOTA_ABILITY_TARGET_NONE = 0;
	DOTA_ABILITY_TARGET_SELF = 1;
	DOTA_ABILITY_TARGET_ALLY_HERO = 2;
	DOTA_ABILITY_TARGET_ALLY_CREEP = 3;
	DOTA_ABILITY_TARGET_ENEMY_HERO = 4;
	DOTA_ABILITY_TARGET_ENEMY_CREEP = 5;
}

enum EHeroStatType {
	k_EHeroStatType_None = 0;
	k_EHeroStatType_AxeTotalDamage = 2000;
	k_EHeroStatType_BattleHungerDamage = 2001;
	k_EHeroStatType_CounterHelixDamage = 2002;
	k_EHeroStatType_CullingBladeDamage = 2003;
	k_EHeroStatType_BerserkersCallCastCount = 2004;
	k_EHeroStatType_BerserkersCallHeroesHitAverage = 2005;
	k_EHeroStatType_BerserkersCallOtherUnitsHit = 2006;
	k_EHeroStatType_BerserkersCallHeroAttacksTaken = 2007;
	k_EHeroStatType_BerserkersCallOtherAttacksTaken = 2008;
	k_EHeroStatType_BattleHungerCastCount = 2009;
	k_EHeroStatType_BattleHungerPotentialDuration = 2010;
	k_EHeroStatType_BattleHungerAverageDuration = 2011;
	k_EHeroStatType_CounterHelixProcCount = 2012;
	k_EHeroStatType_CounterHelixHeroProcCount = 2013;
	k_EHeroStatType_CounterHelixHeroesHitAverage = 2014;
	k_EHeroStatType_CounterHelixOtherUnitsHitCount = 2015;
	k_EHeroStatType_CullingBladeCastCount = 2016;
	k_EHeroStatType_CullingBladeKillCount = 2017;
	k_EHeroStatType_CullingBladeAverageHealthCulled = 2018;
	k_EHeroStatType_CullingBladeAverageDamageAvailable = 2019;
	k_EHeroStatType_CullingBladeHeroBuffAverage = 2020;
}

enum EPlayerVoiceListenState {
	kPVLS_None = 0;
	kPVLS_DeniedChatBanned = 1;
	kPVLS_DeniedPartner = 2;
	kPVLS_DeniedHLTVTalkerNotSpectator = 3;
	kPVLS_DeniedHLTVNoTalkerPlayerID = 4;
	kPVLS_DeniedHLTVTalkerNotBroadcaster = 5;
	kPVLS_DeniedTeamSpectator = 6;
	kPVLS_DeniedStudent = 8;
	kPVLS_DeniedPrivateCoach = 9;
	kPVLS_Denied = 64;
	kPVLS_AllowHLTVTalkerIsBroadcaster = 65;
	kPVLS_AllowCoBroadcaster = 66;
	kPVLS_AllowAllChat = 67;
	kPVLS_AllowStudentToCoach = 68;
	kPVLS_AllowFellowStudent = 69;
	kPVLS_AllowTalkerIsCoach = 70;
	kPVLS_AllowCoachHearTeam = 71;
	kPVLS_AllowSameTeam = 72;
	kPVLS_AllowShowcase = 73;
	kPVLS_AllowPrivateCoach = 74;
}

enum EProjectionEvent {
	ePE_FirstBlood = 0;
	ePE_Killstreak_godlike = 1;
}

message CDOTAUserMsg_AIDebugLine {
	optional string message = 1;
}

message CDOTAUserMsg_Ping {
	optional uint32 ping = 2;
	optional uint32 loss = 3;
}

message CDOTAUserMsg_SwapVerify {
	optional int32 player_id = 1;
}

message CDOTAUserMsg_ChatEvent {
	required .DOTA_CHAT_MESSAGE type = 1 [default = CHAT_MESSAGE_INVALID];
	optional uint32 value = 2;
	optional sint32 playerid_1 = 3 [default = -1];
	optional sint32 playerid_2 = 4 [default = -1];
	optional sint32 playerid_3 = 5 [default = -1];
	optional sint32 playerid_4 = 6 [default = -1];
	optional sint32 playerid_5 = 7 [default = -1];
	optional sint32 playerid_6 = 8 [default = -1];
	optional uint32 value2 = 9;
	optional uint32 value3 = 10;
}

message CDOTAUserMsg_BotChat {
	optional int32 player_id = 1;
	optional string message = 3;
	optional string target = 4;
	optional bool team_only = 5;
}

message CDOTAUserMsg_CombatHeroPositions {
	optional uint32 index = 1;
	optional int32 time = 2;
	optional .CMsgVector2D world_pos = 3;
	optional int32 health = 4;
}

message CDOTAUserMsg_CombatLogBulkData {
	repeated .CMsgDOTACombatLogEntry combat_entries = 1;
	optional float timestamp = 2;
	optional float duration = 3;
	optional int32 player_id = 4;
}

message CDOTAUserMsg_ProjectileParticleCPData {
	optional int32 control_point = 1;
	optional .CMsgVector vector = 2;
}

message CDOTAUserMsg_MiniKillCamInfo {
	message Attacker {
		message Ability {
			optional uint32 ability_id = 1;
			optional int32 damage = 2;
		}

		optional uint32 attacker = 1;
		optional int32 total_damage = 2;
		repeated .CDOTAUserMsg_MiniKillCamInfo.Attacker.Ability abilities = 3;
		optional string attacker_name = 4;
	}

	repeated .CDOTAUserMsg_MiniKillCamInfo.Attacker attackers = 1;
}

message CDOTAUserMsg_GlobalLightColor {
	optional uint32 color = 1;
	optional float duration = 2;
}

message CDOTAUserMsg_GlobalLightDirection {
	optional .CMsgVector direction = 1;
	optional float duration = 2;
}

message CDOTAUserMsg_LocationPing {
	optional int32 player_id = 1;
	optional .CDOTAMsg_LocationPing location_ping = 2;
}

message CDOTAUserMsg_PingConfirmation {
	optional int32 player_id_of_original_pinger = 1;
	optional uint32 entity_index = 2;
	optional uint32 icon_type = 3;
	optional .CMsgVector location = 4;
}

message CDOTAUserMsg_ItemAlert {
	optional int32 player_id = 1;
	optional .CDOTAMsg_ItemAlert item_alert = 2;
}

message CDOTAUserMsg_EnemyItemAlert {
	optional int32 player_id = 1;
	optional int32 target_player_id = 2;
	optional int32 item_ability_id = 3;
	optional int32 rune_type = 4 [default = -1];
	optional int32 entity_id = 5;
	optional int32 item_level = 6 [default = -1];
	optional int32 primary_charges = 7 [default = -1];
	optional int32 secondary_charges = 8 [default = -1];
}

message CDOTAUserMsg_ModifierAlert {
	optional int32 player_id = 1;
	optional string class_name = 2;
	optional uint32 stack_count = 3;
	optional bool is_debuff = 4;
	optional int32 target_entindex = 5;
	optional float seconds_remaining = 6;
}

message CDOTAUserMsg_HPManaAlert {
	optional int32 player_id = 1;
	optional int32 target_entindex = 2;
	optional bool show_raw_values = 3;
}

message CDOTAUserMsg_GlyphAlert {
	optional int32 player_id = 1;
	optional bool negative = 2;
}

message CDOTAUserMsg_RadarAlert {
	optional int32 player_id = 1;
	optional bool negative = 2;
}

message CDOTAUserMsg_WillPurchaseAlert {
	optional int32 item_ability_id = 1;
	optional int32 player_id = 2;
	optional uint32 gold_remaining = 3;
	optional int32 suggestion_player_id = 4;
}

message CDOTAUserMsg_EmptyTeleportAlert {
	optional int32 source_player_id = 1;
	optional int32 target_player_id = 2;
	optional int32 cooldown_seconds = 3;
}

message CDOTAUserMsg_MarsArenaOfBloodAttack {
	optional uint32 source_ehandle = 1;
	optional uint32 target_ehandle = 2;
	optional int32 warrior_index = 3;
}

message CDOTAEntityMsg_InvokerSpellCast {
	optional .CEntityMsg entity_msg = 1;
	optional int32 cast_activity = 2;
}

message CDOTAUserMsg_BuyBackStateAlert {
	optional int32 player_id = 1;
}

message CDOTAUserMsg_QuickBuyAlert {
	optional int32 player_id = 1;
	optional int32 item_ability_id = 2;
	optional int32 gold_cost = 3;
	optional int32 item_cooldown_seconds = 4;
	optional bool show_buyback = 5;
}

message CDOTAUserMsg_CourierKilledAlert {
	message LostItem {
		optional int32 item_ability_id = 1;
		optional uint32 quantity = 2;
	}

	optional uint32 team = 1;
	optional uint32 gold_value = 2;
	optional uint32 entity_handle = 3;
	optional int32 timestamp = 4;
	repeated .CDOTAUserMsg_CourierKilledAlert.LostItem lost_items = 5;
	optional int32 killer_player_id = 6;
	optional int32 owning_player_id = 7;
}

message CDOTAUserMsg_MinimapEvent {
	optional int32 event_type = 1;
	optional uint32 entity_handle = 2;
	optional int32 x = 3;
	optional int32 y = 4;
	optional int32 duration = 5;
	optional uint32 target_entity_handle = 6;
}

message CDOTAUserMsg_MapLine {
	optional int32 player_id = 1;
	optional .CDOTAMsg_MapLine mapline = 2;
}

message CDOTAUserMsg_MinimapDebugPoint {
	optional .CMsgVector location = 1;
	optional uint32 color = 2;
	optional int32 size = 3;
	optional float duration = 4;
	optional int32 index = 5;
}

message CDOTAUserMsg_CreateLinearProjectile {
	optional .CMsgVector origin = 1;
	optional .CMsgVector2D velocity = 2;
	optional int32 entindex = 4;
	optional uint64 particle_index = 5;
	optional int32 handle = 6;
	optional .CMsgVector2D acceleration = 7;
	optional float max_speed = 8;
	optional float fow_radius = 9;
	optional bool sticky_fow_reveal = 10;
	optional float distance = 11;
	optional fixed32 colorgemcolor = 12;
	repeated .CDOTAUserMsg_ProjectileParticleCPData particle_cp_data = 13;
}

message CDOTAUserMsg_DestroyLinearProjectile {
	optional int32 handle = 1;
}

message CDOTAUserMsg_DodgeTrackingProjectiles {
	required int32 entindex = 1;
	optional bool attacks_only = 2;
}

message CDOTAUserMsg_SpectatorPlayerClick {
	required int32 entindex = 1;
	optional int32 order_type = 2;
	optional int32 target_index = 3;
}

message CDOTAUserMsg_SpectatorPlayerUnitOrders {
	optional int32 entindex = 1;
	optional int32 order_type = 2;
	repeated int32 units = 3;
	optional int32 target_index = 4;
	optional int32 ability_id = 5;
	optional .CMsgVector position = 6;
	optional bool queue = 7;
	optional int32 sequence_number = 8;
	optional uint32 flags = 9;
}

message CDOTAUserMsg_NevermoreRequiem {
	optional uint32 entity_handle = 1;
	optional int32 lines = 2;
	optional .CMsgVector origin = 3;
	optional bool reverse = 4;
}

message CDOTAUserMsg_InvalidCommand {
	optional string message = 1;
	optional int32 sequence_number = 2;
}

message CDOTAUserMsg_HudError {
	optional int32 order_id = 1;
	optional int32 sequence_number = 2;
}

message CDOTAUserMsg_SharedCooldown {
	optional int32 entindex = 1;
	optional string name = 2;
	optional float cooldown = 3;
	optional int32 name_index = 4;
}

message CDOTAUserMsg_SetNextAutobuyItem {
	optional string name = 1;
}

message CDOTAUserMsg_HalloweenDrops {
	repeated uint32 item_defs = 1;
	repeated int32 player_ids = 2;
	optional uint32 prize_list = 3;
}

message CDOTAUserMsg_PredictionResult {
	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 .CDOTAUserMsg_PredictionResult.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 .CDOTAUserMsg_PredictionResult.Prediction predictions = 4;
}

message CDOTAResponseQuerySerialized {
	message Fact {
		enum ValueType {
			NUMERIC = 1;
			STRING = 2;
			STRINGTABLE_INDEX = 3;
			INT_NUMERIC = 4;
		}

		required int32 key = 1;
		required .CDOTAResponseQuerySerialized.Fact.ValueType valtype = 2 [default = NUMERIC];
		optional float val_numeric = 3;
		optional string val_string = 4;
		optional int32 val_stringtable_index = 5;
		optional sint32 val_int_numeric = 6;
	}

	repeated .CDOTAResponseQuerySerialized.Fact facts = 1;
}

message CDOTASpeechMatchOnClient {
	optional int32 speech_concept = 1;
	optional int32 recipient_type = 2;
	optional .CDOTAResponseQuerySerialized responsequery = 3;
	optional sfixed32 randomseed = 4 [default = 0];
}

message CDOTAUserMsg_UnitEvent {
	message Interval {
		optional float start = 1;
		optional float range = 2;
	}

	message Speech {
		optional int32 speech_concept = 1;
		optional string response = 2;
		optional int32 recipient_type = 3;
		optional int32 level = 4;
		optional bool muteable = 5 [default = false];
		optional .CDOTAUserMsg_UnitEvent.Interval predelay = 6;
		optional uint32 flags = 7;
	}

	message SpeechMute {
		optional float delay = 1 [default = 0.5];
	}

	message AddGesture {
		optional int32 activity = 1;
		optional int32 slot = 2;
		optional float fade_in = 3 [default = 0];
		optional float fade_out = 4 [default = 0.1];
		optional float playback_rate = 5 [default = 1];
		optional int32 sequence_variant = 6;
	}

	message RemoveGesture {
		optional int32 activity = 1;
	}

	message BloodImpact {
		optional int32 scale = 1;
		optional int32 x_normal = 2;
		optional int32 y_normal = 3;
	}

	message FadeGesture {
		optional int32 activity = 1;
	}

	required .EDotaEntityMessages msg_type = 1 [default = DOTA_UNIT_SPEECH];
	required int32 entity_index = 2;
	optional .CDOTAUserMsg_UnitEvent.Speech speech = 3;
	optional .CDOTAUserMsg_UnitEvent.SpeechMute speech_mute = 4;
	optional .CDOTAUserMsg_UnitEvent.AddGesture add_gesture = 5;
	optional .CDOTAUserMsg_UnitEvent.RemoveGesture remove_gesture = 6;
	optional .CDOTAUserMsg_UnitEvent.BloodImpact blood_impact = 7;
	optional .CDOTAUserMsg_UnitEvent.FadeGesture fade_gesture = 8;
	optional .CDOTASpeechMatchOnClient speech_match_on_client = 9;
}

message CDOTAUserMsg_ItemPurchased {
	optional int32 item_ability_id = 1;
}

message CDOTAUserMsg_ItemSold {
	optional int32 item_ability_id = 1;
}

message CDOTAUserMsg_ItemFound {
	optional int32 player = 1;
	optional int32 quality = 2;
	optional int32 rarity = 3;
	optional int32 method = 4;
	optional uint32 itemdef = 5;
}

message CDOTAUserMsg_OverheadEvent {
	required .DOTA_OVERHEAD_ALERT message_type = 1 [default = OVERHEAD_ALERT_GOLD];
	optional int32 value = 2;
	optional int32 target_player_entindex = 3;
	optional int32 target_entindex = 4;
	optional int32 source_player_entindex = 5;
}

message CDOTAUserMsg_TutorialTipInfo {
	optional string name = 1;
	optional int32 progress = 2;
}

message CDOTAUserMsg_TutorialFinish {
	optional string heading = 1;
	optional string emblem = 2;
	optional string body = 3;
	optional bool success = 4;
}

message CDOTAUserMsg_TutorialMinimapPosition {
}

message CDOTAUserMsg_SendGenericToolTip {
	optional string title = 1;
	optional string text = 2;
	optional int32 entindex = 3;
	optional bool close = 4;
}

message CDOTAUserMsg_WorldLine {
	optional int32 player_id = 1;
	optional .CDOTAMsg_WorldLine worldline = 2;
}

message CDOTAUserMsg_ChatWheel {
	optional uint32 chat_message_id = 1;
	optional int32 player_id = 2;
	optional uint32 account_id = 3;
	optional uint32 param_hero_id = 4;
	optional uint32 emoticon_id = 5;
}

message CDOTAUserMsg_ReceivedXmasGift {
	optional int32 player_id = 1;
	optional string item_name = 2;
	optional int32 inventory_slot = 3;
}

message CDOTAUserMsg_ShowSurvey {
	optional int32 survey_id = 1;
	optional uint64 match_id = 2;
	optional string response_style = 3;
	optional uint32 teammate_hero_id = 4;
	optional string teammate_name = 5;
	optional uint32 teammate_account_id = 6;
}

message CDOTAUserMsg_UpdateSharedContent {
	optional int32 slot_type = 1;
}

message CDOTAUserMsg_TutorialRequestExp {
}

message CDOTAUserMsg_TutorialFade {
	optional int32 tgt_alpha = 1;
}

message CDOTAUserMsg_TutorialPingMinimap {
	optional int32 player_id = 1;
	optional float pos_x = 2;
	optional float pos_y = 3;
	optional float pos_z = 4;
	optional int32 entity_index = 5;
}

message CDOTAUserMsg_GamerulesStateChanged {
	optional uint32 state = 1;
}

message CDOTAUserMsg_AddQuestLogEntry {
	optional string npc_name = 1;
	optional string npc_dialog = 2;
}

message CDOTAUserMsg_SendStatPopup {
	optional int32 player_id = 1;
	optional .CDOTAMsg_SendStatPopup statpopup = 2;
}

message CDOTAUserMsg_DismissAllStatPopups {
	optional .CDOTAMsg_DismissAllStatPopups dismissallmsg = 1;
}

message CDOTAUserMsg_SendRoshanSpectatorPhase {
	optional .DOTA_ROSHAN_PHASE phase = 1 [default = k_SRSP_ROSHAN_ALIVE];
	optional int32 phase_start_time = 2;
	optional int32 phase_length = 3;
}

message CDOTAUserMsg_SendRoshanPopup {
	optional bool reclaimed = 1;
	optional int32 gametime = 2;
}

message CDOTAUserMsg_SendFinalGold {
	repeated uint32 reliable_gold = 1;
	repeated uint32 unreliable_gold = 2;
}

message CDOTAUserMsg_CustomMsg {
	optional string message = 1;
	optional int32 player_id = 2;
	optional int32 value = 3;
}

message CDOTAUserMsg_CoachHUDPing {
	optional int32 player_id = 1;
	optional .CDOTAMsg_CoachHUDPing hud_ping = 2;
}

message CDOTAUserMsg_ClientLoadGridNav {
}

message CDOTAUserMsg_TE_Projectile {
	optional uint32 source = 1;
	optional uint32 target = 2;
	optional int32 move_speed = 3;
	optional int32 source_attachment = 4;
	optional int64 particle_system_handle = 5;
	optional bool dodgeable = 6;
	optional bool is_attack = 7;
	optional float expire_time = 9;
	optional float maximpacttime = 10;
	optional fixed32 colorgemcolor = 11;
	optional int32 launch_tick = 12;
	optional int32 handle = 13;
	optional .CMsgVector target_loc = 14;
	repeated .CDOTAUserMsg_ProjectileParticleCPData particle_cp_data = 15;
}

message CDOTAUserMsg_TE_ProjectileLoc {
	optional .CMsgVector source_loc = 1;
	optional uint32 target = 2;
	optional int32 move_speed = 3;
	optional int64 particle_system_handle = 4;
	optional bool dodgeable = 5;
	optional bool is_attack = 6;
	optional float expire_time = 9;
	optional .CMsgVector target_loc = 10;
	optional fixed32 colorgemcolor = 11;
	optional int32 launch_tick = 12;
	optional int32 handle = 13;
	optional uint32 source = 14;
	optional int32 source_attachment = 15;
	repeated .CDOTAUserMsg_ProjectileParticleCPData particle_cp_data = 16;
}

message CDOTAUserMsg_TE_DestroyProjectile {
	optional int32 handle = 1;
}

message CDOTAUserMsg_TE_DotaBloodImpact {
	optional uint32 entity = 1;
	optional float scale = 2;
	optional float xnormal = 3;
	optional float ynormal = 4;
}

message CDOTAUserMsg_AbilityPing {
	optional int32 player_id = 1;
	optional uint32 ability_id = 2;
	optional .DOTA_ABILITY_PING_TYPE type = 3 [default = ABILITY_PING_READY];
	optional uint32 cooldown_seconds = 4;
	optional uint32 level = 5;
	optional bool passive = 6;
	optional uint32 mana_needed = 7;
	optional uint32 entity_id = 8;
	optional int32 primary_charges = 9;
	optional int32 secondary_charges = 10;
	optional bool ctrl_held = 12;
	optional float reclaim_time = 13;
}

message CDOTAUserMsg_TE_UnitAnimation {
	optional uint32 entity = 1;
	optional int32 sequence_variant = 2;
	optional float playbackrate = 3;
	optional float castpoint = 4;
	optional int32 type = 5;
	optional int32 activity = 6;
	optional float lag_compensation_time = 7;
}

message CDOTAUserMsg_TE_UnitAnimationEnd {
	optional uint32 entity = 1;
	optional bool snap = 2;
}

message CDOTAUserMsg_ShowGenericPopup {
	required string header = 1;
	required string body = 2;
	optional string param1 = 3;
	optional string param2 = 4;
	optional bool tint_screen = 5;
	optional bool show_no_other_dialogs = 6;
}

message CDOTAUserMsg_VoteStart {
	optional string title = 1;
	optional float duration = 2;
	optional int32 choice_count = 3;
	repeated string choices = 4;
}

message CDOTAUserMsg_VoteUpdate {
	repeated int32 choice_counts = 1;
}

message CDOTAUserMsg_VoteEnd {
	optional int32 selected_choice = 1;
}

message CDOTAUserMsg_BoosterStatePlayer {
	optional int32 player_id = 1;
	optional float bonus = 2;
	optional float event_bonus = 3;
	optional uint32 bonus_item_id = 4;
	optional uint32 event_bonus_item_id = 5;
}

message CDOTAUserMsg_BoosterState {
	repeated .CDOTAUserMsg_BoosterStatePlayer boosted_players = 1;
}

message CDOTAUserMsg_PlayerMMR {
	repeated sint32 mmr = 1 [packed = true];
}

message CDOTAUserMsg_AbilitySteal {
	optional int32 player_id = 1;
	optional uint32 ability_id = 2;
	optional uint32 ability_level = 3;
}

message CDOTAUserMsg_StatsHeroLookup {
	optional int32 player_id = 1;
	optional int32 hero_id = 2;
	optional string hero_name = 3;
	optional string persona = 4;
}

message CDOTAUserMsg_StatsHeroPositionInfo {
	message PositionPair {
		optional .DOTA_POSITION_CATEGORY position_category = 1 [default = DOTA_POSITION_NONE];
		optional uint32 position_count = 2;
	}

	optional float average_position = 1;
	repeated .CDOTAUserMsg_StatsHeroPositionInfo.PositionPair position_details = 2;
}

message CDOTAUserMsg_StatsHeroMinuteDetails {
	optional uint32 last_hits = 1;
	optional uint32 hero_kills = 2;
	optional uint32 hero_damage = 3;
	optional uint32 tower_damage = 4;
	optional .CDOTAUserMsg_StatsHeroPositionInfo position_info = 5;
	optional uint32 total_xp = 6;
	optional uint32 net_worth = 7;
	optional uint32 harvested_creep_gold = 8;
	optional uint32 claimed_farm = 9;
	optional uint32 wards_placed = 10;
	optional uint32 runes_collected = 11;
	optional uint32 tps_used = 12;
	repeated uint32 mana_spent = 13;
	repeated uint32 damage_absorbed = 14;
	repeated uint32 damage_done = 15;
}

message CDOTAUserMsg_StatsTeamMinuteDetails {
	message LocationPerformance {
		optional uint32 location_category = 1;
		optional uint32 stat_type = 2;
		optional uint32 value = 3;
	}

	repeated .CDOTAUserMsg_StatsHeroMinuteDetails player_stats = 1;
	optional uint32 tower_kills = 2;
	optional uint32 barrack_kills = 3;
	optional uint32 available_lane_creep_gold = 4;
	optional uint32 balance_kill_value = 5;
	optional uint32 balance_tower_value = 6;
	optional uint32 balance_barracks_value = 7;
	optional uint32 balance_gold_value = 8;
	optional uint32 balance_xp_value = 9;
	repeated .CDOTAUserMsg_StatsTeamMinuteDetails.LocationPerformance lane_performance = 10;
}

message CDOTAUserMsg_StatsPlayerKillShare {
	optional int32 player_id = 1;
	optional float kill_share_percent = 2;
	optional float player_loc_x = 3;
	optional float player_loc_y = 4;
	optional float health_percent = 5;
	optional float mana_percent = 6;
}

message CDOTAUserMsg_StatsKillDetails {
	optional int32 victim_id = 1;
	repeated .CDOTAUserMsg_StatsPlayerKillShare kill_shares = 2;
	optional uint32 damage_to_kill = 3;
	optional uint32 effective_health = 4;
	optional float death_time = 5;
	optional int32 killer_id = 6;
}

message CDOTAUserMsg_StatsMatchDetails {
	message CDOTAUserMsg_StatsFightTeamDetails {
		repeated int32 participants = 1;
		repeated int32 deaths = 2;
		optional uint32 gold_delta = 3;
		optional uint32 xp_delta = 4;
	}

	message CDOTAUserMsg_StatsFightDetails {
		optional float start_time = 1;
		optional float end_time = 2;
		optional .CDOTAUserMsg_StatsMatchDetails.CDOTAUserMsg_StatsFightTeamDetails radiant_fight_details = 3;
		optional .CDOTAUserMsg_StatsMatchDetails.CDOTAUserMsg_StatsFightTeamDetails dire_fight_details = 4;
	}

	repeated .CDOTAUserMsg_StatsHeroLookup hero_lookup = 1;
	repeated .CDOTAUserMsg_StatsTeamMinuteDetails radiant_stats = 2;
	repeated .CDOTAUserMsg_StatsTeamMinuteDetails dire_stats = 3;
	repeated .CDOTAUserMsg_StatsKillDetails radiant_kills = 4;
	repeated .CDOTAUserMsg_StatsKillDetails dire_kills = 5;
	repeated .CDOTAUserMsg_StatsMatchDetails.CDOTAUserMsg_StatsFightDetails fight_details = 6;
}

message CDOTAUserMsg_MiniTaunt {
	optional int32 taunting_player_id = 1;
}

message CDOTAUserMsg_SpeechBubble {
	optional bool destroy_all = 1;
}

message CDOTAUserMsg_CustomHeaderMessage {
	optional int32 player_id = 1;
	optional float duration = 2;
	optional string message = 3;
	optional int32 value = 4;
}

message CMsgHeroAbilityStat {
	optional .EHeroStatType stat_type = 1 [default = k_EHeroStatType_None];
	optional int32 int_value = 2;
	optional float float_value = 3;
}

message CMsgCombatAnalyzerPlayerStat {
	optional uint32 account_id = 1;
	repeated .CMsgHeroAbilityStat hero_ability_stats = 2;
}

message CMsgCombatAnalyzerStats {
	optional uint64 match_id = 1;
	repeated .CMsgCombatAnalyzerPlayerStat player_stats = 2;
}

message CDOTAUserMsg_BeastChat {
	optional uint32 team = 1;
	optional string format = 2;
	optional string message = 3;
	optional string target = 4;
}

message CDOTAUserMsg_CustomHudElement_Create {
	optional string element_id = 1;
	optional string layout_filename = 2;
	optional bytes data = 3;
}

message CDOTAUserMsg_CustomHudElement_Modify {
	optional string element_id = 1;
	optional bool modify_visible = 2;
	optional bytes data = 3;
}

message CDOTAUserMsg_CustomHudElement_Destroy {
	optional string element_id = 1;
}

message CDOTAUserMsg_CompendiumStatePlayer {
	optional int32 player_id = 1;
	optional uint32 level = 2;
}

message CDOTAUserMsg_CompendiumState {
	repeated .CDOTAUserMsg_CompendiumStatePlayer compendium_players = 1;
}

message CDOTAUserMsg_ProjectionAbility {
	optional uint32 ability_id = 1;
	optional int32 caster_ent_index = 2;
	optional int32 caster_team = 3;
	optional bool channel_end = 4;
	optional .CMsgVector origin = 5;
	optional bool track_caster_only = 6;
	optional float end_time = 7;
	optional int32 victim_ent_index = 8;
}

message CDOTAUserMsg_ProjectionEvent {
	optional .EProjectionEvent event_id = 1 [default = ePE_FirstBlood];
	optional uint32 team = 2;
}

message CDOTAUserMsg_XPAlert {
	optional int32 player_id = 1;
	optional int32 target_entindex = 2;
}

message CDOTAUserMsg_TalentTreeAlert {
	optional int32 player_id = 1;
	optional int32 target_entindex = 2;
	optional int32 ability_id = 3;
	optional int32 slot = 4;
	optional bool learned = 5;
}

message CDOTAUserMsg_UpdateQuestProgress {
}

message CDOTAUserMsg_QuestStatus {
	required int32 player_id = 1;
	optional uint32 quest_id = 2;
	optional uint32 challenge_id = 3;
	optional uint32 progress = 4;
	optional uint32 goal = 5;
	optional uint32 query = 6;
	optional float fail_gametime = 7;
	optional uint32 item_ability_id = 8;
}

message CDOTAUserMsg_SuggestHeroPick {
	required int32 player_id = 1;
	optional uint32 hero_id = 2;
	optional bool ban = 3;
}

message CDOTAUserMsg_SuggestHeroRole {
	required int32 player_id = 1;
	optional string hero_role = 2;
}

message CDOTAUserMsg_KillcamDamageTaken {
	required int32 player_id = 1;
	optional uint32 damage_taken = 2;
	optional uint32 item_type = 3;
	optional uint32 item_ability_id = 4;
	optional string hero_name = 5;
	optional string damage_color = 6;
}

message CDOTAUserMsg_SelectPenaltyGold {
	required int32 player_id = 1;
	optional sint32 cost = 2;
}

message CDOTAUserMsg_RollDiceResult {
	optional int32 player_id = 1;
	optional uint32 channel_type = 2;
	optional uint32 roll_min = 3;
	optional uint32 roll_max = 4;
	optional uint32 result = 5;
}

message CDOTAUserMsg_FlipCoinResult {
	optional int32 player_id = 1;
	optional uint32 channel_type = 2;
	optional bool result = 3;
}

message CDOTAUserMessage_RequestItemSuggestions {
	optional int32 player_id = 1;
}

message CDOTAUserMessage_TeamCaptainChanged {
	optional uint32 team = 1;
	optional int32 captain_player_id = 2;
}

message CDOTAUserMsg_ChatWheelCooldown {
	optional uint32 message_id = 1;
	optional float cooldown_remaining = 2;
}

message CDOTAUserMsg_HeroRelicProgress {
	optional uint32 hero_relic_type = 1;
	optional uint32 value = 2;
	optional uint32 ehandle = 3;
	optional uint32 event_id = 4;
	optional float value_display = 5;
}

message CDOTAUserMsg_AbilityDraftRequestAbility {
	optional int32 player_id = 1;
	optional uint32 requested_ability_id = 2;
	optional bool ctrl_is_down = 3;
}

message CDOTAUserMsg_DamageReport {
	optional int32 player_id = 1;
	optional uint32 target_hero_id = 2;
	optional uint32 source_hero_id = 3;
	optional int32 damage_amount = 4;
	optional bool broadcast = 5;
}

message CDOTAUserMsg_SalutePlayer {
	optional int32 source_player_id = 1;
	optional int32 target_player_id = 2;
	optional uint32 tip_amount = 3;
	optional uint32 event_id = 4;
}

message CDOTAUserMsg_TipAlert {
	optional int32 player_id = 1;
	optional string tip_text = 2;
}

message CDOTAUserMsg_ReplaceQueryUnit {
	required int32 player_id = 1;
	optional int32 source_entindex = 2;
	optional int32 target_entindex = 3;
}

message CDOTAUserMsg_ESArcanaCombo {
	optional uint32 ehandle = 1;
	optional uint32 combo_count = 2;
	optional uint32 arcana_level = 3;
}

message CDOTAUserMsg_ESArcanaComboSummary {
	optional uint32 ehandle = 1;
	optional uint32 combo_count = 2;
	optional uint32 damage_amount = 3;
}

message CDOTAUserMsg_OMArcanaCombo {
	optional uint32 ehandle = 1;
	optional uint32 multicast_amount = 2;
	optional uint32 arcana_level = 3;
	optional uint32 multicast_chance = 4;
}

message CDOTAUserMsg_HighFiveCompleted {
	optional int32 player_id_1 = 1;
	optional int32 player_id_2 = 2;
	optional bool special_high_five = 3;
}

message CDOTAUserMsg_HighFiveLeftHanging {
	optional int32 player_id = 1;
}

message CDOTAUserMsg_ShovelUnearth {
	optional int32 player_id = 1;
	optional bool all_chat = 2;
	optional string locstring = 3;
	optional uint32 quantity = 4;
}

message CDOTAUserMsg_AllStarEvent {
	message PlayerScore {
		optional int32 player_id = 1;
		optional uint32 score_sans_kda = 2;
	}

	optional int32 source_player_id = 1;
	optional int32 target_player_id = 2;
	optional uint32 point_amount = 3;
	optional uint32 event_id = 4;
	repeated .CDOTAUserMsg_AllStarEvent.PlayerScore player_scores = 5;
}

message CDOTAUserMsg_QueuedOrderRemoved {
	repeated uint32 unit_order_sequence = 1;
}

message CDOTAUserMsg_DebugChallenge {
	required uint32 challenge_type = 1;
	required uint32 challenge_query_id = 2;
	required uint32 event_id = 3;
	optional uint32 instance_id = 4;
	optional uint32 challenge_var_0 = 5;
	optional uint32 challenge_var_1 = 6;
	optional uint32 challenge_max_rank = 7;
}

message CDOTAUserMsg_FoundNeutralItem {
	optional int32 player_id = 1;
	optional uint32 item_ability_id = 2;
	optional uint32 item_tier = 3;
	optional uint32 tier_item_count = 4;
}

message CDOTAUserMsg_OutpostCaptured {
	optional int32 outpost_entindex = 1;
	optional uint32 team_id = 2;
}

message CDOTAUserMsg_OutpostGrantedXP {
	optional uint32 team_id = 1;
	optional uint32 xp_amount = 2;
}

message CDOTAUserMsg_MoveCameraToUnit {
	optional uint32 unit_ehandle = 1;
}

message CDOTAUserMsg_PauseMinigameData {
	message DataBit {
		optional uint32 index = 1;
		optional int32 data = 2;
		optional int64 data_extra = 3;
	}

	repeated .CDOTAUserMsg_PauseMinigameData.DataBit data_bits = 1;
}

message CDOTAUserMsg_VersusScene_PlayerBehavior {
	optional int32 player_id = 1;
	optional .EDOTAVersusScenePlayerBehavior behavior = 2 [default = VS_PLAYER_BEHAVIOR_PLAY_ACTIVITY];
	optional .VersusScene_PlayActivity play_activity = 3;
	optional .VersusScene_ChatWheel chat_wheel = 4;
	optional .VersusScene_PlaybackRate playback_rate = 5;
}

message CDOTAUserMsg_QoP_ArcanaSummary {
	optional uint32 ehandle = 1;
	optional uint32 arcana_level = 2;
	optional uint32 players_hit = 3;
	optional uint32 players_killed = 4;
}

message CDOTAUserMsg_HotPotato_Created {
	optional int32 player_id_1 = 1;
	optional int32 player_id_2 = 2;
}

message CDOTAUserMsg_HotPotato_Exploded {
	optional int32 player_id = 1;
}

message CDOTAUserMsg_WK_Arcana_Progress {
	optional uint32 ehandle = 1;
	optional uint32 arcana_level = 2;
	optional uint32 hero_id = 3;
}

message CDOTAUserMsg_GuildChallenge_Progress {
	message PlayerProgress {
		optional int32 player_id = 1;
		optional uint32 progress = 6;
	}

	enum EChallengeType {
		k_EChallengeType_Invalid = 0;
		k_EChallengeType_Cooperative = 1;
		k_EChallengeType_Contract = 2;
	}

	repeated .CDOTAUserMsg_GuildChallenge_Progress.PlayerProgress player_progress = 1;
	optional uint32 guild_id = 2;
	optional uint32 challenge_instance_id = 3;
	optional uint32 challenge_parameter = 4;
	optional .CDOTAUserMsg_GuildChallenge_Progress.EChallengeType challenge_type = 5 [default = k_EChallengeType_Invalid];
	optional uint32 challenge_progress_at_start = 7;
	optional bool complete = 8;
}

message CDOTAUserMsg_WRArcanaProgress {
	optional uint32 ehandle = 1;
	optional uint32 target_ehandle = 2;
	optional uint32 arrows_landed = 3;
	optional uint32 damage_dealt = 4;
	optional uint32 target_hp = 5;
	optional uint32 target_max_hp = 6;
	optional uint32 arcana_level = 7;
}

message CDOTAUserMsg_WRArcanaSummary {
	optional uint32 ehandle = 1;
	optional uint32 target_ehandle = 2;
	optional uint32 arrows_landed = 3;
	optional uint32 damage_dealt = 4;
	optional uint32 target_hp = 5;
	optional uint32 target_max_hp = 6;
	optional uint32 arcana_level = 7;
	optional bool success = 8;
}

message CDOTAUserMsg_EmptyItemSlotAlert {
	optional int32 source_player_id = 1;
	optional int32 target_player_id = 2;
	optional int32 slot_index = 3;
	optional int32 cooldown_seconds = 4;
}

message CDOTAUserMsg_AghsStatusAlert {
	optional int32 source_player_id = 1;
	optional int32 target_player_id = 2;
	optional int32 target_entindex = 3;
	optional uint32 alert_type = 4;
	optional bool has_scepter = 5;
	optional bool has_shard = 6;
}

message CDOTAUserMsg_MutedPlayers {
	repeated int32 text_muted_player_ids = 1;
	repeated int32 voice_muted_player_ids = 2;
}

message CDOTAUserMsg_ContextualTip {
	optional int32 tip_id = 1;
	repeated string referenced_abilities = 2;
	repeated string referenced_units = 3;
	repeated string panorama_classes = 4;
	optional bool force_annotation = 5;
	optional int32 variant = 6;
	optional int32 int_param = 7;
	optional int32 int_param2 = 8;
	optional float float_param = 9;
	optional float float_param2 = 10;
	optional string string_param = 11;
	optional string string_param2 = 12;
	optional string tip_text_override = 13;
	optional string tip_annotation_override = 14;
	optional string panorama_snippet = 15;
}

message CDOTAUserMsg_ChatMessage {
	optional int32 source_player_id = 1;
	optional uint32 channel_type = 2;
	optional string message_text = 3;
}
