hl2sdk/public/game/shared/dota/protobuf/dota_usermessages.proto
Nicholas Hastings 6f2dff28f5 Updated protobufs.
--HG--
extra : rebase_source : 33b658e2d314424a66e48aa987d13fae26bfeb24
2013-06-05 21:05:42 -04:00

725 lines
20 KiB
Protocol Buffer

//====== Copyright (c) 2012, Valve Corporation, All rights reserved. ========//
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
// Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.
//===========================================================================//
//
// Purpose: The file defines our Google Protocol Buffers which are used in over
// the wire messages for the Source engine.
//
//=============================================================================
// We care more about speed than code size
option optimize_for = SPEED;
// We don't use the service generation functionality
option cc_generic_services = false;
//
// STYLE NOTES:
//
// Use CamelCase CMsgMyMessageName style names for messages.
//
// Use lowercase _ delimited names like my_steam_id for field names, this is non-standard for Steam,
// but plays nice with the Google formatted code generation.
//
// Try not to use required fields ever. Only do so if you are really really sure you'll never want them removed.
// Optional should be preffered as it will make versioning easier and cleaner in the future if someone refactors
// your message and wants to remove or rename fields.
//
// Use fixed64 for JobId_t, GID_t, or SteamID. This is appropriate for any field that is normally
// going to be larger than 2^56. Otherwise use int64 for 64 bit values that are frequently smaller
// than 2^56 as it will safe space on the wire in those cases.
//
// Similar to fixed64, use fixed32 for RTime32 or other 32 bit values that are frequently larger than
// 2^28. It will safe space in those cases, otherwise use int32 which will safe space for smaller values.
// An exception to this rule for RTime32 is if the value will frequently be zero rather than set to an actual
// time.
//
import "google/protobuf/descriptor.proto";
// for CMsgVector, etc.
import "netmessages.proto";
// for Activity
import "ai_activity.proto";
// for structures shared between user and client messages
import "dota_commonmessages.proto";
//=============================================================================
// Dota User Messages
//=============================================================================
enum EDotaUserMessages
{
DOTA_UM_AddUnitToSelection = 64;
DOTA_UM_AIDebugLine = 65;
DOTA_UM_ChatEvent = 66;
DOTA_UM_CombatHeroPositions = 67;
DOTA_UM_CombatLogData = 68;
DOTA_UM_CombatLogShowDeath = 70;
DOTA_UM_CreateLinearProjectile = 71;
DOTA_UM_DestroyLinearProjectile = 72;
DOTA_UM_DodgeTrackingProjectiles = 73;
DOTA_UM_GlobalLightColor = 74;
DOTA_UM_GlobalLightDirection = 75;
DOTA_UM_InvalidCommand = 76;
DOTA_UM_LocationPing = 77;
DOTA_UM_MapLine = 78;
DOTA_UM_MiniKillCamInfo = 79;
DOTA_UM_MinimapDebugPoint = 80;
DOTA_UM_MinimapEvent = 81;
DOTA_UM_NevermoreRequiem = 82;
DOTA_UM_OverheadEvent = 83;
DOTA_UM_SetNextAutobuyItem = 84;
DOTA_UM_SharedCooldown = 85;
DOTA_UM_SpectatorPlayerClick = 86;
DOTA_UM_TutorialTipInfo = 87;
DOTA_UM_UnitEvent = 88;
DOTA_UM_ParticleManager = 89;
DOTA_UM_BotChat = 90;
DOTA_UM_HudError = 91;
DOTA_UM_ItemPurchased = 92;
DOTA_UM_Ping = 93;
DOTA_UM_ItemFound = 94;
DOTA_UM_CharacterSpeakConcept = 95;
DOTA_UM_SwapVerify = 96;
DOTA_UM_WorldLine = 97;
DOTA_UM_TournamentDrop = 98;
DOTA_UM_ItemAlert = 99;
DOTA_UM_HalloweenDrops = 100;
DOTA_UM_ChatWheel = 101;
DOTA_UM_ReceivedXmasGift = 102;
DOTA_UM_UpdateSharedContent = 103;
DOTA_UM_TutorialRequestExp = 104;
DOTA_UM_TutorialPingMinimap = 105;
DOTA_UM_GamerulesStateChanged = 106;
DOTA_UM_ShowSurvey = 107;
DOTA_UM_TutorialFade = 108;
DOTA_UM_AddQuestLogEntry = 109;
DOTA_UM_SendStatPopup = 110;
DOTA_UM_TutorialFinish = 111;
}
//=============================================================================
message CDOTAUserMsg_AIDebugLine
{
optional string message = 1;
}
message CDOTAUserMsg_Ping
{
optional string message = 1;
}
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_ABANDON = 20;
CHAT_MESSAGE_SAFE_TO_LEAVE = 21;
CHAT_MESSAGE_RUNE_PICKUP = 22;
CHAT_MESSAGE_RUNE_BOTTLE = 23;
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_CHARGES_EXHAUSTED = 30;
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_SAFE_TO_LEAVE_ABANDONER = 40;
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_SAFE_TO_LEAVE_ABANDONER_EARLY = 48;
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;
}
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
{
COOP_BATTLE_POINTS_RULES = 1;
}
message CDOTAUserMsg_SwapVerify
{
optional uint32 player_id = 1;
}
message CDOTAUserMsg_ChatEvent
{
required DOTA_CHAT_MESSAGE type = 1 [default = CHAT_MESSAGE_INVALID];
optional uint32 value = 2;
// ugh
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 ];
}
enum DOTA_COMBATLOG_TYPES
{
DOTA_COMBATLOG_DAMAGE = 0;
DOTA_COMBATLOG_HEAL = 1;
DOTA_COMBATLOG_MODIFIER_ADD = 2;
DOTA_COMBATLOG_MODIFIER_REMOVE = 3;
DOTA_COMBATLOG_DEATH = 4;
}
message CDOTAUserMsg_CombatLogData
{
optional DOTA_COMBATLOG_TYPES type = 1 [default = DOTA_COMBATLOG_DAMAGE];
optional uint32 target_name = 2;
optional uint32 attacker_name = 3;
optional bool attacker_illusion = 4;
optional bool target_illusion = 5;
optional uint32 inflictor_name = 6;
optional int32 value = 7;
optional int32 health = 8;
optional float time = 9;
}
message CDOTAUserMsg_CombatLogShowDeath
{
}
message CDOTAUserMsg_BotChat
{
optional uint32 player_id = 1;
optional string format = 2;
optional string message = 3;
optional string target = 4;
}
message CDOTAUserMsg_CombatHeroPositions
{
optional uint32 index = 1;
optional int32 time = 2;
optional CMsgVector2D world_pos = 3;
optional int32 health = 4;
}
message CDOTAUserMsg_MiniKillCamInfo
{
message Attacker
{
optional uint32 attacker = 1;
optional int32 total_damage = 2;
message Ability
{
optional uint32 ability = 1;
optional int32 damage = 2;
}
repeated Ability abilities = 3;
}
repeated 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 uint32 player_id = 1;
optional CDOTAMsg_LocationPing location_ping = 2;
}
message CDOTAUserMsg_ItemAlert
{
optional uint32 player_id = 1;
optional CDOTAMsg_ItemAlert item_alert = 2;
}
message CDOTAUserMsg_MinimapEvent
{
optional int32 event_type = 1;
optional int32 entity_handle = 2;
optional int32 x = 3;
optional int32 y = 4;
optional int32 duration = 5;
}
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;
}
message CDOTAUserMsg_CreateLinearProjectile
{
optional CMsgVector origin = 1;
optional CMsgVector2D velocity = 2;
optional int32 latency = 3;
optional int32 entindex = 4;
optional int32 particle_index = 5;
optional int32 handle = 6;
}
message CDOTAUserMsg_DestroyLinearProjectile
{
optional int32 handle = 1;
}
message CDOTAUserMsg_DodgeTrackingProjectiles
{
required int32 entindex = 1;
}
message CDOTAUserMsg_SpectatorPlayerClick
{
required int32 entindex = 1;
optional int32 order_type = 2;
optional int32 target_index = 3;
}
message CDOTAUserMsg_NevermoreRequiem
{
optional int32 entity_handle = 1;
optional int32 lines = 2;
optional CMsgVector origin = 3;
}
message CDOTAUserMsg_InvalidCommand
{
optional string message = 1;
}
message CDOTAUserMsg_HudError
{
optional int32 order_id = 1;
}
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 uint32 player_ids = 2;
optional uint32 prize_list = 3;
}
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;
}
message CDOTAResponseQuerySerialized
{
message Fact
{
enum ValueType
{
NUMERIC = 1;
STRING = 2;
}
required int32 key = 1;
required ValueType valtype = 2 [default = NUMERIC];
optional float val_numeric = 3;
optional string val_string = 4;
}
repeated Fact facts = 1;
}
message CDOTASpeechMatchOnClient
{
optional int32 concept = 1;
optional int32 recipient_type = 2;
optional CDOTAResponseQuerySerialized responsequery = 3;
optional sfixed32 randomseed = 4 [default = 0];
}
message CDOTAUserMsg_UnitEvent
{
required EDotaEntityMessages msg_type = 1 [default = DOTA_UNIT_SPEECH];
required int32 entity_index = 2;
message Speech
{
optional int32 concept = 1;
optional string response = 2;
optional int32 recipient_type = 3;
optional int32 level = 4;
optional bool muteable = 5 [default = false];
}
optional Speech speech = 3;
message SpeechMute
{
optional float delay = 1 [default = 0.5];
}
optional SpeechMute speech_mute = 4;
message AddGesture
{
optional Activity activity = 1 [default = ACT_INVALID];
optional int32 slot = 2;
optional float fade_in = 3 [default = 0];
optional float fade_out = 4 [default = 0.1];
}
optional AddGesture add_gesture = 5;
message RemoveGesture
{
optional Activity activity = 1 [default = ACT_INVALID];
}
optional RemoveGesture remove_gesture = 6;
message BloodImpact
{
optional int32 scale = 1;
optional int32 x_normal = 2;
optional int32 y_normal = 3;
}
optional BloodImpact blood_impact = 7;
message FadeGesture
{
optional Activity activity = 1 [default = ACT_INVALID];
}
optional FadeGesture fade_gesture = 8;
optional CDOTASpeechMatchOnClient speech_match_on_client = 9;
}
message CDOTAUserMsg_ItemPurchased
{
optional int32 item_index = 1;
}
message CDOTAUserMsg_ItemFound
{
optional int32 player = 1;
optional int32 quality = 2;
optional int32 rarity = 3;
optional int32 method = 4;
optional int32 itemdef = 5;
}
enum DOTA_PARTICLE_MESSAGE
{
DOTA_PARTICLE_MANAGER_EVENT_CREATE = 0;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE = 1;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE_FORWARD = 2;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE_ORIENTATION = 3;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE_FALLBACK = 4;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE_ENT = 5;
DOTA_PARTICLE_MANAGER_EVENT_UPDATE_OFFSET = 6;
DOTA_PARTICLE_MANAGER_EVENT_DESTROY = 7;
DOTA_PARTICLE_MANAGER_EVENT_DESTROY_INVOLVING = 8;
DOTA_PARTICLE_MANAGER_EVENT_RELEASE = 9;
DOTA_PARTICLE_MANAGER_EVENT_LATENCY = 10;
DOTA_PARTICLE_MANAGER_EVENT_SHOULD_DRAW = 11;
};
message CDOTAUserMsg_ParticleManager
{
message ReleaseParticleIndex
{
}
message CreateParticle
{
optional int32 particle_name_index = 1;
optional int32 attach_type = 2;
optional int32 entity_handle = 3;
}
message DestroyParticle
{
optional bool destroy_immediately = 1;
}
message DestroyParticleInvolving
{
optional bool destroy_immediately = 1;
optional int32 entity_handle = 3;
}
message UpdateParticle
{
optional int32 control_point = 1;
optional CMsgVector position = 2;
}
message UpdateParticleFwd
{
optional int32 control_point = 1;
optional CMsgVector forward = 2;
}
message UpdateParticleOrient
{
optional int32 control_point = 1;
optional CMsgVector forward = 2;
optional CMsgVector right = 3;
optional CMsgVector up = 4;
}
message UpdateParticleFallback
{
optional int32 control_point = 1;
optional CMsgVector position = 2;
}
message UpdateParticleOffset
{
optional int32 control_point = 1;
optional CMsgVector origin_offset = 2;
}
message UpdateParticleEnt
{
optional int32 control_point = 1;
optional int32 entity_handle = 2;
optional int32 attach_type = 3;
optional int32 attachment = 4;
optional CMsgVector fallback_position = 5;
}
message UpdateParticleLatency
{
optional int32 player_latency = 1;
optional int32 tick = 2;
}
message UpdateParticleShouldDraw
{
optional bool should_draw = 1;
}
required DOTA_PARTICLE_MESSAGE type = 1 [default = DOTA_PARTICLE_MANAGER_EVENT_CREATE];
required uint32 index = 2;
optional ReleaseParticleIndex release_particle_index = 3; // DOTA_PARTICLE_MANAGER_EVENT_RELEASE
optional CreateParticle create_particle = 4; // DOTA_PARTICLE_MANAGER_EVENT_CREATE
optional DestroyParticle destroy_particle = 5; // DOTA_PARTICLE_MANAGER_EVENT_DESTROY
optional DestroyParticleInvolving destroy_particle_involving = 6; // DOTA_PARTICLE_MANAGER_EVENT_DESTROY_INVOLVING
optional UpdateParticle update_particle = 7; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE
optional UpdateParticleFwd update_particle_fwd = 8; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE_FORWARD
optional UpdateParticleOrient update_particle_orient = 9; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE_ORIENTATION
optional UpdateParticleFallback update_particle_fallback = 10; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE_FALLBACK
optional UpdateParticleOffset update_particle_offset = 11; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE_OFFSET
optional UpdateParticleEnt update_particle_ent = 12; // DOTA_PARTICLE_MANAGER_EVENT_UPDATE_ENT
optional UpdateParticleLatency update_particle_latency = 13; // DOTA_PARTICLE_MANAGER_EVENT_LATENCY
optional UpdateParticleShouldDraw update_particle_should_draw = 14; // DOTA_PARTICLE_MANAGER_EVENT_SHOULD_DRAW
}
// If you modify this, make sure you update g_OverheadMessageType!
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;
};
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;
}
message CDOTAUserMsg_WorldLine
{
optional int32 player_id = 1;
optional CDOTAMsg_WorldLine worldline = 2;
}
message CDOTAUserMsg_TournamentDrop
{
optional string winner_name = 1;
optional int32 event_type = 2;
}
message CDOTAUserMsg_ChatWheel
{
optional EDOTAChatWheelMessage chat_message = 1 [default = k_EDOTA_CW_Ok];
optional uint32 player_id = 2;
optional uint32 account_id = 3;
}
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;
}
message CDOTAUserMsg_UpdateSharedContent
{
optional int32 slot_type = 1;
}
message CDOTAUserMsg_TutorialRequestExp
{
}
message CDOTAUserMsg_TutorialFade
{
optional int32 tgt_alpha = 1;
}
message CDOTAUserMsg_TutorialPingMinimap
{
optional uint32 player_id = 1;
optional float pos_x = 2;
optional float pos_y = 3;
optional float pos_z = 4;
optional int32 entity_index = 5;
}
message CDOTA_UM_GamerulesStateChanged
{
optional uint32 state = 1;
}
message CDOTAUserMsg_AddQuestLogEntry
{
optional string npc_name = 1;
optional string npc_dialog = 2;
optional bool quest = 3;
optional int32 quest_type = 4;
}
message CDOTAUserMsg_SendStatPopup
{
optional int32 player_id = 1;
optional CDOTAMsg_SendStatPopup statpopup = 2;
}