Server Messages are protocol buffer messages used for communication between dedicated Dota 2 game servers (srcds) and the Game Coordinator (GC). These messages enable game servers to report player connections, match results, network conditions, and real-time game state. Unlike client messages (see 4.2 Client Messages), server messages typically contain authoritative game state information and match statistics that only the game server can reliably provide.
This page documents the message types defined in protocol/dota_gcmessages_server.proto1-1564 and their corresponding Go implementations in protocol/dota_gcmessages_server.pb.go1-726946
Sources: protocol/dota_gcmessages_server.proto1-1564 protocol/dota_gcmessages_server.pb.go1-23
The following diagram illustrates the relationship between Game Server components and the GC processing logic via specific protocol buffer messages.
Sources: protocol/dota_gcmessages_server.proto1-1564
CMsgGameServerInfo contains comprehensive information about a game server's capabilities, network configuration, and current state. Servers send this message during registration and when their status changes.
Key Fields:
server_type (protocol/dota_gcmessages_server.proto120): Enum indicating server purpose (GAME, PROXY, DOTA_ONLY, CUSTOM_GAME_ONLY, EVENT_GAME_ONLY) defined at protocol/dota_gcmessages_server.pb.go135-142server_cluster (protocol/dota_gcmessages_server.proto133): Geographic cluster identifier.server_hibernation (protocol/dota_gcmessages_server.proto119): Whether server is in low-power state.allow_custom_games (protocol/dota_gcmessages_server.proto134): Custom game support (BOTH, NONE, ONLY, EVENT) defined at protocol/dota_gcmessages_server.pb.go178-183Sources: protocol/dota_gcmessages_server.proto95-138 protocol/dota_gcmessages_server.pb.go122-204 protocol/dota_gcmessages_server.pb.go748-996
Reports server crashes to help diagnose stability issues and trigger appropriate match handling.
| Field | Type | Purpose |
|---|---|---|
match_id | uint64 | Match being played when crash occurred |
lobby_id | fixed64 | Associated lobby identifier |
game_state | DOTA_GameState | Game state at crash time (protocol/dota_gcmessages_server.proto41) |
server_steam_id | fixed64 | Server's Steam ID |
server_cluster | uint32 | Geographic cluster |
pid | uint32 | Process ID |
engine | uint32 | Engine version |
Sources: protocol/dota_gcmessages_server.proto38-51 protocol/dota_gcmessages_server.pb.go481-616
CMsgConnectedPlayers provides periodic updates about which players are connected to the game server and current match state. This message is sent for various reasons indicated by the SendReason enum.
Player Substructure: Each player entry (protocol/dota_gcmessages_server.proto54) contains:
steam_id: Player's Steam ID.hero_id: Selected hero.leaver_state: CMsgLeaverState with connection details.disconnect_reason: ENetworkDisconnectionReason enum value (protocol/dota_gcmessages_server.proto58).Sources: protocol/dota_gcmessages_server.proto53-93 protocol/dota_gcmessages_server.pb.go59-120 protocol/dota_gcmessages_server.pb.go618-746
Notifies the GC when a player abandons a match, including context about network conditions and disconnect reason.
| Field | Type | Description |
|---|---|---|
steam_id | fixed64 | Player who left |
leaver_status | DOTALeaverStatus_t | Type of leave (DISCONNECTED, ABANDONED) |
leaver_state | CMsgLeaverState | Detailed connection state |
disconnect_reason | ENetworkDisconnectionReason | Why player disconnected |
poor_network_conditions | CMsgPoorNetworkConditions | Network quality context |
server_cluster | uint32 | Server location |
Sources: protocol/dota_gcmessages_server.proto140-147 protocol/dota_gcmessages_server.pb.go998-1086
Provides detailed information about network issues affecting match quality. This message helps the GC identify patterns and potentially compensate players affected by server-side problems.
Detection Types (protocol/dota_gcmessages_server.proto19-24):
k_EPoorNetworkConditions_None: No issues.k_EPoorNetworkConditions_Unknown: Unclassified problem.k_EPoorNetworkConditions_MassDisconnect: Multiple players disconnected simultaneously.k_EPoorNetworkConditions_ExcessBadQosIntervals: High packet loss or jitter detected over time.Player Substructure (protocol/dota_gcmessages_server.proto27-32):
account_id: Affected player.disconnect_reason: Type of disconnect.num_bad_intervals: Count of poor QoS intervals.peak_loss_pct: Peak packet loss percentage.Sources: protocol/dota_gcmessages_server.proto19-36 protocol/dota_gcmessages_server.pb.go20-57
The most comprehensive server message, CMsgGameMatchSignOut contains complete match statistics sent at match conclusion. This message includes per-player, per-team, and match-level data used for MMR calculation and statistics tracking.
Major Subsections:
Core Player Stats (protocol/dota_gcmessages_server.proto211-285):
gold_per_min, xp_per_minute, gold_spent, net_worth, last_hits, denies.scaled_hero_damage, scaled_tower_damage, scaled_hero_healing.hero_damage_received and hero_damage_dealt are broken down by HeroDamageType (PHYSICAL, MAGICAL, PURE) at protocol/dota_gcmessages_server.proto205-209wards_placed, dewards, camps_stacked.Sources: protocol/dota_gcmessages_server.proto191-359 protocol/dota_gcmessages_server.pb.go1396-1675
Before sending match signout, servers must request permission via CMsgGameMatchSignOutPermissionRequest (protocol/dota_gcmessages_server.proto478) to ensure the GC is ready to process the data.
Response (CMsgGameMatchSignOutPermissionResponse):
permission_granted: Whether to proceed with signout.abandon_signout: Whether to give up on this match record.retry_delay_seconds: How long to wait before retry.Sources: protocol/dota_gcmessages_server.proto478-489 protocol/dota_gcmessages_server.pb.go2307-2440
Provides real-time scoreboard information for spectators and tournament broadcasts. This message is sent periodically during matches.
DOTAUltimateState Enum (protocol/dota_gcmessages_server.proto543-548):
k_EDOTAUltimateStateNotLearned: Ultimate not skilled yet.k_EDOTAUltimateStateCooldown: On cooldown.k_EDOTAUltimateStateNeedsMana: Ready but insufficient mana.k_EDOTAUltimateStateReady: Available to cast.Player Data Fields (protocol/dota_gcmessages_server.proto562-588):
kills, deaths, assists, last_hits, denies.gold, level, net_worth.item0 through item5 (6 slots).ultimate_state and ultimate_cooldown.Sources: protocol/dota_gcmessages_server.proto535-596
The protocol includes several messages specifically for Steam Learn machine learning pipelines:
Detailed match state snapshots used for training models:
kills, glyph_cooldown, and creep positioning (protocol/dota_gcmessages_server.proto1405).net_worth, level, respawn_time, has_buyback, has_aegis (protocol/dota_gcmessages_server.proto1418).Sources: protocol/dota_gcmessages_server.proto1405-1435
Ability skill order for ML training:
ability_id: Ability to skill (protocol/dota_gcmessages_server.proto1462).skilled_abilities: Current skill build.is_using_dota_plus: Whether the player is following a Dota Plus guide.Sources: protocol/dota_gcmessages_server.proto1461-1466
| Message Type | Direction | Purpose |
|---|---|---|
CMsgGameServerInfo | Server → GC | Register server and update status |
CMsgConnectedPlayers | Server → GC | Periodic player and game state updates |
CMsgPoorNetworkConditions | Server → GC | Report network quality issues |
CMsgGameserverCrash | Server → GC | Report process crashes |
CMsgLeaverDetected | Server → GC | Notify of player abandonment |
CMsgGameMatchSignOut | Server → GC | Submit final match statistics |
CMsgDOTALiveScoreboardUpdate | Server → GC | Provide live stats for spectators |
CMsgServerToGCRealtimeStats | Server → GC | Send terse real-time game data |
CMsgDOTAFantasyFinalPlayerStats | Server → GC | Submit fantasy points for DPC |
CMsgSignOutDraftInfo | Server → GC | Submit pick/ban phase data |
Refresh this wiki