Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1692 lines
66 KiB

//====== Copyright 1996-2010, Valve Corporation, All rights reserved. =======
//
// Purpose: The file defines our Google Protocol Buffers which are used in over
// the wire messages between servers as well as between the CS:GO and CS:GO gameservers
// and clients.
//
//=============================================================================
// 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 "steammessages.proto";
import "engine_gcmessages.proto";
enum ECsgoGCMsg
{
k_EMsgGCCStrike15_v2_Base = 9100;
k_EMsgGCCStrike15_v2_MatchmakingStart = 9101;
k_EMsgGCCStrike15_v2_MatchmakingStop = 9102;
k_EMsgGCCStrike15_v2_MatchmakingClient2ServerPing = 9103;
k_EMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate = 9104;
k_EMsgGCCStrike15_v2_MatchmakingGC2ServerReserve = 9105;
k_EMsgGCCStrike15_v2_MatchmakingServerReservationResponse = 9106;
k_EMsgGCCStrike15_v2_MatchmakingGC2ClientReserve = 9107;
k_EMsgGCCStrike15_v2_MatchmakingServerRoundStats = 9108;
k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello = 9109;
k_EMsgGCCStrike15_v2_MatchmakingGC2ClientHello = 9110;
k_EMsgGCCStrike15_v2_MatchmakingServerMatchEnd = 9111;
k_EMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon = 9112;
k_EMsgGCCStrike15_v2_MatchmakingServer2GCKick = 9113;
k_EMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm = 9114;
k_EMsgGCCStrike15_v2_MatchmakingGCOperationalStats = 9115;
k_EMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate = 9116;
k_EMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate = 9117;
k_EMsgGCCStrike15_v2_ServerNotificationForUserPenalty = 9118;
k_EMsgGCCStrike15_v2_ClientReportPlayer = 9119;
k_EMsgGCCStrike15_v2_ClientReportServer = 9120;
k_EMsgGCCStrike15_v2_ClientCommendPlayer = 9121;
k_EMsgGCCStrike15_v2_ClientReportResponse = 9122;
k_EMsgGCCStrike15_v2_ClientCommendPlayerQuery = 9123;
k_EMsgGCCStrike15_v2_ClientCommendPlayerQueryResponse = 9124;
// k_EMsgGCCStrike15_v2_ClientRequestWatchInfoFriends_Obsolete = 9125; // OBSOLETE: September 2013
k_EMsgGCCStrike15_v2_WatchInfoUsers = 9126;
k_EMsgGCCStrike15_v2_ClientRequestPlayersProfile = 9127;
k_EMsgGCCStrike15_v2_PlayersProfile = 9128;
k_EMsgGCCStrike15_v2_SetMyMedalsInfo = 9129;
// k_EMsgGCCStrike15_v2_PlayerEarnedRewardNotification_Obsolete = 9130; // OBSOLETE: May 2015
k_EMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate = 9131;
k_EMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment = 9132;
k_EMsgGCCStrike15_v2_PlayerOverwatchCaseStatus = 9133;
k_EMsgGCCStrike15_v2_GC2ClientTextMsg = 9134;
k_EMsgGCCStrike15_v2_Client2GCTextMsg = 9135;
k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops = 9136;
k_EMsgGCCStrike15_v2_MatchEndRewardDropsNotification = 9137;
k_EMsgGCCStrike15_v2_ClientRequestWatchInfoFriends2 = 9138; // new revision of msg#9125
k_EMsgGCCStrike15_v2_MatchList = 9139;
k_EMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames = 9140;
k_EMsgGCCStrike15_v2_MatchListRequestRecentUserGames = 9141;
k_EMsgGCCStrike15_v2_GC2ServerReservationUpdate = 9142;
k_EMsgGCCStrike15_v2_ClientVarValueNotificationInfo = 9144; // client reports variable values
k_EMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification = 9145;
k_EMsgGCCStrike15_v2_MatchListRequestTournamentGames = 9146;
k_EMsgGCCStrike15_v2_MatchListRequestFullGameInfo = 9147;
k_EMsgGCCStrike15_v2_GiftsLeaderboardRequest = 9148;
k_EMsgGCCStrike15_v2_GiftsLeaderboardResponse = 9149;
k_EMsgGCCStrike15_v2_ServerVarValueNotificationInfo = 9150; // server reports variable values for clients
k_EMsgGCToGCReloadVersions = 9151; // called when the server or client versions change and other GC's should reload
k_EMsgGCCStrike15_v2_ClientSubmitSurveyVote = 9152; // client submits a survey vote
k_EMsgGCCStrike15_v2_Server2GCClientValidate = 9153; // server requests GC to validate connecting client
k_EMsgGCCStrike15_v2_MatchListRequestLiveGameForUser = 9154; // client requests live match scoreboard for another client's match
k_EMsgGCCStrike15_v2_Server2GCPureServerValidationFailure = 9155; // server reports to GC pure client validation
k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest = 9156; // client requests econ preview data block
k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse = 9157; // client requests econ preview data block
k_EMsgGCCStrike15_v2_AccountPrivacySettings = 9158; // client requests his own account privacy settings, or GC responds with account privacy settings
k_EMsgGCCStrike15_v2_SetMyActivityInfo = 9159; // client reports his own activity
k_EMsgGCCStrike15_v2_MatchListRequestTournamentPredictions = 9160; // client requests his own tournament predictions
k_EMsgGCCStrike15_v2_MatchListUploadTournamentPredictions = 9161; // client uploads his own tournament predictions
k_EMsgGCCStrike15_v2_DraftSummary = 9162; // client gets or uploads draft selection
k_EMsgGCCStrike15_v2_ClientRequestJoinFriendData = 9163; // Client requests data required to join a friend
k_EMsgGCCStrike15_v2_ClientRequestJoinServerData = 9164; // Client requests data required to join a game server
k_EMsgGCCStrike15_v2_ClientRequestNewMission = 9165; // Client requests a new mission for their current campaign
k_EMsgGCCStrike15_v2_GC2ServerNotifyXPRewarded = 9166; // GC informs server of xp rewards this match
k_EMsgGCCStrike15_v2_GC2ClientTournamentInfo = 9167; // GC informs client of tournament match starting
k_EMsgGC_GlobalGame_Subscribe = 9168; // Client subscribes to global game on the GC
k_EMsgGC_GlobalGame_Unsubscribe = 9169; // Client unsubscribes to global game on the GC
k_EMsgGC_GlobalGame_Play = 9170; // Client takes action in the global game on the GC
k_EMsgGCCStrike15_v2_AcknowledgePenalty = 9171; // User acknowledge he/she had a cooldown in the past
k_EMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin = 9172; // Client wants to trade max level status for current prestige coin
k_EMsgGCCStrike15_v2_GC2ClientGlobalStats = 9173; // GC informs client about updated global stats, only deltas are included
k_EMsgGCCStrike15_v2_Client2GCStreamUnlock = 9174; // Client requests GC to unlock streaming codec that is currently unavailable
k_EMsgGCCStrike15_v2_FantasyRequestClientData = 9175; // Client requests his fantasy data
k_EMsgGCCStrike15_v2_FantasyUpdateClientData = 9176; // Client uploads his own tournament predictions
k_EMsgGCCStrike15_v2_GCToClientSteamdatagramTicket = 9177; // GC -> client, here's your ticket to talk via SDR to a gameserver
k_EMsgGCCStrike15_v2_ClientToGCRequestTicket = 9178; // client -> GC, could I have a ticket please?
k_EMsgGCCStrike15_v2_ClientToGCRequestElevate = 9179; // client -> GC, request elevated status
k_EMsgGCCStrike15_v2_GlobalChat = 9180; // client <-> GC, chat message
k_EMsgGCCStrike15_v2_GlobalChat_Subscribe = 9181; // client <-> GC, chat message
k_EMsgGCCStrike15_v2_GlobalChat_Unsubscribe = 9182; // client <-> GC, chat message
k_EMsgGCCStrike15_v2_ClientAuthKeyCode = 9183; // client <-> GC, authkey sharing code exchange
k_EMsgGCCStrike15_v2_GotvSyncPacket = 9184; // server>GC: update sync tick; client>GC: asking for sync tick; GC>client: responding with sync tick
k_EMsgGCCStrike15_v2_ClientPlayerDecalSign = 9185; // client <-> GC, client requesting spray decal charge to be consumed
k_EMsgGCCStrike15_v2_ClientLogonFatalError = 9187; // GC -> client, banned from logging in, no need to retry
k_EMsgGCCStrike15_v2_ClientPollState = 9188; // GC <-> client: poll state, or results of the poll
k_EMsgGCCStrike15_v2_Party_Register = 9189; // GC <-> client: register the party metadata
k_EMsgGCCStrike15_v2_Party_Unregister = 9190; // GC <-> client: unregister the party metadata
k_EMsgGCCStrike15_v2_Party_Search = 9191; // GC <-> client: search the party metadata
k_EMsgGCCStrike15_v2_Party_Invite = 9192; // GC -> client: you have been invited to this party
k_EMsgGCCStrike15_v2_Account_RequestCoPlays = 9193; // client <-> GC: download recent co players
};
/////////////////////////////////////////////////////////////////////////
//
// v2 messages
//
message GameServerPing
{
//optional uint64 gameserver_id = 1; // SteamID of the game server with which the client could establish a connection
optional int32 ping = 2; // ping to this game server, negative value would mean that the server is unreachable for the client
optional uint32 ip = 3; // Server IP address
//optional uint32 port = 4; // Server port
optional uint32 instances = 5; // Number of server intances on the same address
};
message DataCenterPing
{
optional fixed32 data_center_id = 1; // Data center code. (Usually 3 character ID)
optional sint32 ping = 2; // Ping to this data center. Negative value would mean we weern't able to communicate with this data center
};
message DetailedSearchStatistic
{
optional uint32 game_type = 1; // Type of the game searched
optional uint32 search_time_avg = 2; // Average time a game is found with these settings
optional uint32 players_searching = 4; // Players including this type in their search
};
message TournamentPlayer
{
optional uint32 account_id = 1; // Account ID registered
optional string player_nick = 2; // Player nick
optional string player_name = 3; // Player name
optional uint32 player_dob = 4; // Player DOB timestamp
optional string player_flag = 5; // Player flag
optional string player_location = 6; // Player location
optional string player_desc = 7; // Player bio
};
message TournamentTeam
{
optional int32 team_id = 1; // Team ID in the database
optional string team_tag = 2; // Team tag
optional string team_flag = 3; // Team flag
optional string team_name = 4; // Team name
repeated TournamentPlayer players = 5; // Team players
};
message TournamentEvent
{
optional int32 event_id = 1; // Event ID in the database
optional string event_tag = 2; // Event tag
optional string event_name = 3; // Event name
optional uint32 event_time_start = 4; // Event time start
optional uint32 event_time_end = 5; // Event time end
optional int32 event_public = 6; // Event public flag
optional int32 event_stage_id = 7; // Event stage ID in the database
optional string event_stage_name = 8; // Event stage name
optional uint32 active_section_id = 9; // Which section is currently active
};
message GlobalStatistics
{
optional uint32 players_online = 1; // Total number of players online
optional uint32 servers_online = 2; // Total number of game servers online
optional uint32 players_searching = 3; // Total number of players searching
optional uint32 servers_available = 4; // Total number of game servers available for reservation
optional uint32 ongoing_matches = 5; // Total number of currently ongoing matches
optional uint32 search_time_avg = 6; // Average search time in milliseconds
repeated DetailedSearchStatistic search_statistics = 7; // Detailed search statistics
optional string main_post_url = 8; // URL for the main menu post
optional uint32 required_appid_version = 9; // Required appid version
optional uint32 pricesheet_version = 10; // Pricesheet version
optional uint32 twitch_streams_version = 11;// Force Twitch.tv streams version number, 0 to disable the feature on the client
optional uint32 active_tournament_eventid = 12; // Currently active tournament EventID
optional uint32 active_survey_id = 13; // Currently active SurveyID
};
message OperationalStatisticDescription
{
optional string name = 1; // Name of the statistic
optional uint32 idkey = 2; // ID key of the statistic
};
message OperationalStatisticElement
{
optional uint32 idkey = 1; // ID key of the operational statistic
repeated int32 values = 2; // Values of the operational statistic
};
message OperationalStatisticsPacket
{
optional int32 packetid = 1; // Packet index
optional int32 mstimestamp = 2; // Timestamp in milliseconds
repeated OperationalStatisticElement values = 3; // Actual values of the statistics
};
message PlayerRankingInfo
{
optional uint32 account_id = 1; // Player account id
optional uint32 rank_id = 2; // Player rank id
optional uint32 wins = 3; // Number of won matches
optional float rank_change = 4; // How did the player rank change if the rank changed
};
message PlayerCommendationInfo
{
optional uint32 cmd_friendly = 1; // Friendly
optional uint32 cmd_teaching = 2; // Teaching
optional uint32 cmd_leader = 4; // Leader
};
// Also payload for: k_EMsgGCCStrike15_v2_SetMyMedalsInfo
message PlayerMedalsInfo
{
optional uint32 medal_team = 1; // Team achievements
optional uint32 medal_combat = 2; // Combat achievements
optional uint32 medal_weapon = 3; // Weapon achievements
optional uint32 medal_global = 4; // Global achievements
optional uint32 medal_arms = 5; // Arms Race achievements
// optional uint32 legacy__coin_op_payback = 6;// LEGACY: pre-economy update -- Challenge Coin for 'Operation: Payback'
repeated uint32 display_items_defidx = 7; // Array of display items
optional uint32 featured_display_item_defidx = 8; // Featured flair item
};
// Also payload for: k_EMsgGCCStrike15_v2_SetMyActivityInfo
message AccountActivity
{
optional uint32 activity = 1; // What is the account currently doing
optional uint32 mode = 2; // Which mode the account has loaded
optional uint32 map = 3; // Which map the account has loaded
};
message TournamentMatchSetup
{
optional int32 event_id = 1; // Event ID of the match
optional int32 team_id_ct = 2; // Team that is starting CT
optional int32 team_id_t = 3; // Team that is starting T
optional int32 event_stage_id = 4; // Event stage ID (group stage, semi-finals, etc.)
};
message ServerHltvInfo
{
optional uint32 tv_udp_port = 1; // GOTV UDP port
optional uint64 tv_watch_key = 2; // GOTV watch key
optional uint32 tv_slots = 3; // GOTV global slots
optional uint32 tv_clients = 4; // GOTV clients including proxies+spectators
optional uint32 tv_proxies = 5; // Number of GOTV proxies
optional uint32 tv_time = 6; // How long has the match been going on
optional uint32 game_type = 8; // Game mode
optional string game_mapgroup = 9; // Game mapgroup
optional string game_map = 10; // Game map
optional uint64 tv_master_steamid = 11; // When relaying GOTV broadcast this is the SteamID of master server
optional uint32 tv_local_slots = 12; // GOTV local slots
optional uint32 tv_local_clients = 13; // GOTV local clients including proxies+spectators
optional uint32 tv_local_proxies = 14; // Number of local GOTV proxies
optional uint32 tv_relay_slots = 15; // GOTV relay slots
optional uint32 tv_relay_clients = 16; // GOTV relay clients including proxies+spectators
optional uint32 tv_relay_proxies = 17; // Number of relay GOTV proxies
optional uint32 tv_relay_address = 18; // Relay connection address
optional uint32 tv_relay_port = 19; // Relay connection port
optional uint64 tv_relay_steamid = 20; // When relaying GOTV broadcast this is the SteamID of relay connection server which is not necessarily the master
};
// IP Address mask (e.g. 192.69.96.0/22 -> a=192, b=69, c=96, d=0, bits=22), token represents datacenter id when multiple masks apply
message IpAddressMask
{
optional uint32 a = 1;
optional uint32 b = 2;
optional uint32 c = 3;
optional uint32 d = 4;
optional uint32 bits = 5;
optional uint32 token = 6;
};
// Used by both ServerQuestUpdateData and k_EMsgGCCStrike15_v2_GC2ServerNotifyXPRewarded
message XpProgressData
{
optional uint32 xp_points = 1; // Points earned towards next level
optional int32 xp_category = 2; // Cause of this set of points
};
// Update any econ items based on match completion
message MatchEndItemUpdates
{
optional uint64 item_id = 1; // item to be updated
optional uint32 item_attr_defidx = 2; // attribute to be updated
optional uint32 item_attr_delta_value = 3; // delta of attribute
};
// Leaderboard scoreboard entry data
message ScoreLeaderboardData
{
optional uint64 quest_id = 1;
optional uint32 score = 2;
message Entry
{
optional uint32 tag = 1;
optional uint32 val = 2;
};
message AccountEntries
{
optional uint32 accountid = 1;
repeated Entry entries = 2;
};
repeated AccountEntries accountentries = 3;
repeated Entry matchentries = 5;
};
message PlayerQuestData
{
message QuestItemData
{
optional uint64 quest_id = 1;
optional int32 quest_normal_points_earned = 2;
optional int32 quest_bonus_points_earned = 3;
};
optional uint32 quester_account_id = 1;
repeated QuestItemData quest_item_data = 2;
repeated XpProgressData xp_progress_data = 3;
optional uint32 time_played = 4;
optional uint32 mm_game_mode = 5; // game mode of the match this progress happened in. Number is a EMsgGCCStrike15_v2_MatchmakingGame_t enum
repeated MatchEndItemUpdates item_updates = 6; // list of items which need attribute updates based on match completion
};
//
// Helper structure to communicate player quest progress
//
message CMsgGC_ServerQuestUpdateData
{
repeated PlayerQuestData player_quest_data = 1; // per-player quest progress data
optional bytes binary_data = 2; // serialized binary data about the match
optional uint32 mm_game_mode = 3; // game mode of the match this progress happened in. Number is a EMsgGCCStrike15_v2_MatchmakingGame_t enum
optional ScoreLeaderboardData missionlbsdata = 4; // data to be placed for participating accounts into the leaderboards
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGCOperationalStats
//
// GC operational statistics
//
message CMsgGCCStrike15_v2_MatchmakingGCOperationalStats
{
optional int32 packetid = 1; // Packet index of the last received packet (or not set for initial request)
repeated OperationalStatisticDescription namekeys = 2; // Name keys of the statistics
repeated OperationalStatisticsPacket packets = 3; // Packets with statistics
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm
//
// GC confirmation to official dedicated server for server reliable message
//
message CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm
{
optional uint32 token = 1; // Confirmation token
optional uint32 stamp = 2; // Confirmation stamp
optional uint64 exchange = 3; // Exchange value between client and server
};
//
// k_EMsgGCCStrike15_v2_GC2ServerReservationUpdate
//
// GC is updating reservation information on the game server
//
message CMsgGCCStrike15_v2_GC2ServerReservationUpdate
{
optional uint32 viewers_external_total = 1; // Number of total external viewers
optional uint32 viewers_external_steam = 2; // Number of total external viewers with Steam account linked
};
//
// k_EMsgGCCStrike15_v2_MatchmakingStart
//
// Places the party into matchmaking pool
//
message CMsgGCCStrike15_v2_MatchmakingStart
{
repeated uint32 account_ids = 1; // List of party members who will play together, first one is the party leader (sender of the message)
optional uint32 game_type = 2; // Arms Race, Classic
optional string ticket_data = 3; // Matchmaking ticket data
optional uint32 client_version = 4; // Client version
optional TournamentMatchSetup tournament_match = 5; // Tournament match configuration
optional bool prime_only = 6; // Party only wants to match against other prime users
};
//
// k_EMsgGCCStrike15_v2_MatchmakingStop
//
// Takes the party containing sender out of matchmaking pool
//
message CMsgGCCStrike15_v2_MatchmakingStop
{
optional int32 abandon = 1; // Flag indicating that user wants to abandon the ongoing match
};
//
// k_EMsgGCCStrike15_v2_MatchmakingClient2ServerPing
//
// Client reports information about their ping to a game server
//
message CMsgGCCStrike15_v2_MatchmakingClient2ServerPing
{
//
// Either a list of gameservers we have pinged
//
repeated GameServerPing gameserverpings = 1; // Pings information to game servers
optional int32 offset_index = 2; // How many game servers have been submitted by client so far
optional int32 final_batch = 3; // Whether the batch reported is final
//
// Or ping measurements to data centers based on Steam Datagram
//
repeated DataCenterPing data_center_pings = 4;
optional uint32 max_ping = 5; // User preference indicating how much max acceptable ping is allowed
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate
//
// GC reports to the client the state of matchmaking
//
message CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate
{
optional int32 matchmaking = 1; // Matchmaking stage
repeated uint32 waiting_account_id_sessions = 2; // Waiting for these accounts to login to GC
optional string error = 3; // Error message information
repeated uint32 ongoingmatch_account_id_sessions = 6; // Waiting for these accounts to finish their ongoing match
optional GlobalStatistics global_stats = 7; // Global statistics about the game
repeated uint32 failping_account_id_sessions = 8; // These accounts failed to ping any servers
repeated uint32 penalty_account_id_sessions = 9; // These accounts have penalty from matchmaking
repeated uint32 failready_account_id_sessions = 10; // These accounts failed to ready up
repeated uint32 vacbanned_account_id_sessions = 11; // These accounts have VAC ban
optional IpAddressMask server_ipaddress_mask = 12; // When match must be restricted to a specific game server this will be the mask
message Note
{
optional int32 type = 1; // Type of the note for the user
optional int32 region_id = 2; // Region in which the note applies
optional float region_r = 3; // Radius of the region, km
optional float distance = 4; // Distance from the region, km
};
repeated Note notes = 13; // Notes to display to the user during matchmaking
repeated uint32 penalty_account_id_sessions_green = 14; // These accounts have green penalty from matchmaking
repeated uint32 insufficientlevel_sessions = 15; // These accounts have insufficient level
repeated uint32 vsncheck_account_id_sessions = 16; // These accounts are not VAC verified
repeated uint32 launcher_mismatch_sessions = 17; // These accounts are not VAC verified
};
// k_EMsgGCCStrike15_v2_DraftSummary
message CDataGCCStrike15_v2_TournamentMatchDraft
{
optional int32 event_id = 1;
optional int32 event_stage_id = 2;
optional int32 team_id_0 = 3;
optional int32 team_id_1 = 4;
optional int32 maps_count = 5; // Number of maps in the series
optional int32 maps_current = 6; // Current index of the map in the series (0-2)
optional int32 team_id_start = 7; // Team ID who has the starting turn
optional int32 team_id_veto1 = 8; // Which team does the veto first
optional int32 team_id_pickn = 9; // Which team does the side pick in the last draft entry
message Entry
{
optional int32 mapid = 1; // map id selected
optional int32 team_id_ct = 2; // which team starts CT
};
repeated Entry drafts = 10; // Draft selections
};
message CPreMatchInfoData
{
optional int32 predictions_pct = 1; // When tournament predictions were placed for teams involved in the match this will be the percentage in favor of team0, valid values between [1..99], 0 means undefined
optional CDataGCCStrike15_v2_TournamentMatchDraft draft = 4; // Draft of the match series
message TeamStats
{
optional int32 match_info_idxtxt = 1; // Reference to another match info txt
optional string match_info_txt = 2; // Match info txt
repeated string match_info_teams = 3; // Match info values per team
};
repeated TeamStats stats = 5; // A bundle of different stats
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ServerReserve
//
// GC reports to server matchmaking reservation
//
message CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve
{
repeated uint32 account_ids = 1; // Acccount IDs for the reservation
optional uint32 game_type = 2; // Game for the reservation
optional uint64 match_id = 3; // If this match proceeds and happens this will be the match id
optional uint32 server_version = 4; // Server version required for this match to proceed
// --- next section of the reservation doesn't have to be filled out by the server.dll when communicating with GC ---
repeated PlayerRankingInfo rankings = 5; // Player rankings for the match
optional uint64 encryption_key = 6; // Encryption key unique per match
optional uint64 encryption_key_pub = 7; // Encryption key for public streamable data
repeated uint32 party_ids = 8; // Party identifier of the players
repeated IpAddressMask whitelist = 9; // GC whitelist of IP address masks for relays
optional uint64 tv_master_steamid = 10; // For server reservations of official GOTV relay proxies this is SteamID of master
optional TournamentEvent tournament_event = 11; // Tournament event reservation
repeated TournamentTeam tournament_teams = 12; // Tournament teams for the reservation
repeated uint32 tournament_casters_account_ids = 13; // Tournament caster account IDs that will be allowed to connect to the game server directly
optional uint64 tv_relay_steamid = 14; // For server reservations of official GOTV relay proxies this is SteamID of upstream relay connection proxy which can be different from master
optional CPreMatchInfoData pre_match_data = 15; // When tournament predictions were placed for teams involved in the match this will be the percentage in favor of team0, valid values between [1..99], 0 means undefined
};
//
// k_EMsgGCCStrike15_v2_MatchmakingServerReservationResponse
//
// Server reports its state to GC
//
message CMsgGCCStrike15_v2_MatchmakingServerReservationResponse
{
optional uint64 reservationid = 1; // Reservation id for connecting to the server
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2; // Current matchmaking reservation of the server
optional string map = 3; // Map that the server rolled for the teams
optional uint64 gc_reservation_sent = 4; // GC reservation
optional uint32 server_version = 5; // Server protocol version
optional ServerHltvInfo tv_info = 6; // Server TV info if TV is active
repeated uint32 reward_player_accounts = 7; // Player accounts to be rewarded
repeated uint32 idle_player_accounts = 8; // Player accounts who are idle and should not be rewarded
optional uint32 reward_item_attr_def_idx = 9; // Player accounts must own this attribute
optional uint32 reward_item_attr_value = 10; // That attribute must have this value
optional uint32 reward_item_attr_reward_idx = 11; // Index of tha attribute to modify
optional uint32 reward_drop_list = 12; // Series of weapon case to (sometimes?) reward in this map
optional string tournament_tag = 13; // Tournament tag setting of the game server
optional uint32 steamdatagram_port = 14; // If we can be proxied by steam datagram, what port are we listening on?
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ClientReserve
//
// GC reports to clients matchmaking reservation
// GC can also request another game server to become GOTV relay with the same message (game server replies with CMsgGCCStrike15_v2_MatchmakingServerReservationResponse)
//
message CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve
{
optional uint64 serverid = 1; // Game server SteamID
optional uint32 direct_udp_ip = 2; // Game server IP
optional uint32 direct_udp_port = 3; // Game server port
optional uint64 reservationid = 4; // Server reservation id
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 5; // Current matchmaking reservation of the server
optional string map = 6; // Map that the server rolled for the teams
optional string server_address = 7; // Game server connect address. This indicates the GC's prefered method of connecting to the server. (Either Steam datagram or direct UDP connect.)
};
//
// k_EMsgGCCStrike15_v2_MatchmakingServerRoundStats
//
// Server reports its round stats to GC
//
message CMsgGCCStrike15_v2_MatchmakingServerRoundStats
{
optional uint64 reservationid = 1; // Reservation id for connecting to the server
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2; // Current matchmaking reservation of the server
optional string map = 3; // Map
optional int32 round = 4; // Round
repeated int32 kills = 5; // Kills
repeated int32 assists = 6; // Assists
repeated int32 deaths = 7; // Deaths
repeated int32 scores = 8; // Scores
repeated int32 pings = 9; // Pings (-1 would mean unconnected)
optional int32 round_result = 10; // Round result (0 = tie, 1 = 1st team win, 2 = 2nd team win)
optional int32 match_result = 11; // End of match result that will override team scores if present (0 = tie, 1 = 1st team win, 2 = 2nd team win, 3 = game failed to continue due to abandon, 4 (bitmask'ed) = game network conditions have been detected)
repeated int32 team_scores = 12; // Scores of each team, at 0th index is the team containing 0th reservation player
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm confirm = 13; // Confirmation to deliver
optional int32 reservation_stage = 14; // Reservation stage (1 = connection probing, 2 = ready-up)
optional int32 match_duration = 15; // How many seconds has the match been going on
repeated int32 enemy_kills = 16; // How many enemies were killed
repeated int32 enemy_headshots = 17;// How many enemies were killed with a headshot
repeated int32 enemy_3ks = 18; // 3K rounds
repeated int32 enemy_4ks = 19; // 4K rounds
repeated int32 enemy_5ks = 20; // 5K rounds
repeated int32 mvps = 21; // MVP stars
optional uint32 spectators_count = 22; // Max number of spectators observed during the match
optional uint32 spectators_count_tv = 23; // Max number of spectators connected via GOTV during the match
optional uint32 spectators_count_lnk = 24; // Max number of spectators connected via twitch.tv account linking during the match
repeated int32 enemy_kills_agg = 25; // How many enemies were killed by this player on aggregate
message DropInfo
{
optional uint32 account_mvp = 1; // AccountID of the MVP of this round
};
optional DropInfo drop_info = 26; // Drop info for the tournament
};
//
// k_EMsgGCCStrike15_v2_MatchmakingServerMatchEnd
//
// Server reports its match end stats to GC
//
message CMsgGCCStrike15_v2_MatchmakingServerMatchEnd
{
optional CMsgGCCStrike15_v2_MatchmakingServerRoundStats stats = 1; // Results of the match
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm confirm = 3; // Confirmation to deliver
optional uint64 rematch = 4; // When set to non-zero then rematch is requested, last confirmed exchange round id must be provided
optional uint32 replay_token = 5; // Token for the replay ID
optional uint32 replay_cluster_id = 6; // Replay cluster ID
optional bool aborted_match = 7; // This match is void.
optional CMsgGC_ServerQuestUpdateData match_end_quest_data = 8; // Quest update data for players
optional uint32 server_version = 9; // Version of the server submitting match outcome
};
//
// k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello
//
// Client is at the main menu, GC has an opportunity to
// provide some useful information to the client
//
message CMsgGCCStrike15_v2_MatchmakingClient2GCHello
{
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ClientHello
//
// GC is providing session information to the client
//
message CMsgGCCStrike15_v2_MatchmakingGC2ClientHello
{
optional uint32 account_id = 1; // Client account id
optional CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve ongoingmatch = 2; // Match that the client should be participating in
optional GlobalStatistics global_stats = 3; // Global statistics about the game
optional uint32 penalty_seconds = 4; // How many penalty seconds remaining for the player
optional uint32 penalty_reason = 5; // What is the reason for player being penalized
optional int32 vac_banned = 6; // When non-zero means the account has been VAC banned
optional PlayerRankingInfo ranking = 7; // Account ranking information
optional PlayerCommendationInfo commendation = 8; // Commendation information
optional PlayerMedalsInfo medals = 9; // Medals that GC has cached for the client
optional TournamentEvent my_current_event = 10; // Event that the user is currently participating in
repeated TournamentTeam my_current_event_teams = 11; // Teams that are currently participating in the event
optional TournamentTeam my_current_team = 12; // Team that the user is playing on
repeated TournamentEvent my_current_event_stages = 13; // Stages remaining in the event
optional uint32 survey_vote = 14; // What is the current player vote on the active survey
optional AccountActivity activity = 15; // What GC has cached for the client
// optional int32 seconds_until_next_mission_deprecated = 16; // Number of seconds until we've earned our next mission
optional int32 player_level = 17; // Player's level based on xp earned in matches
optional int32 player_cur_xp = 18; // Player's xp earned towards next level
optional int32 player_xp_bonus_flags = 19; // Flags marking which perodic bonuses the player has available
};
//
// k_EMsgGCCStrike15_v2_AccountPrivacySettings
//
// Client is requesting or modifying his own privacy settings or GC is replying with client privacy settings
//
message CMsgGCCStrike15_v2_AccountPrivacySettings
{
message Setting
{
optional uint32 setting_type = 1; // Setting type
optional uint32 setting_value = 2; // Setting value
};
repeated Setting settings = 1; // A pool of settings
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon
//
// Notifies the user about clients abandoning the match
//
message CMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon
{
optional uint32 account_id = 1; // Another client who is abandoning the match
optional CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve abandoned_match = 2; // Match that the mentioned client is abandoning
optional uint32 penalty_seconds = 3; // How many seconds of penalty was assigned to the abandoning player
optional uint32 penalty_reason = 4; // What is the reason for player being penalized
};
//
// k_EMsgGCCStrike15_v2_MatchmakingServer2GCKick
//
// Server notifies the GC that a client has been kicked from the game
//
message CMsgGCCStrike15_v2_MatchmakingServer2GCKick
{
optional uint32 account_id = 1; // Account id of the client being kicked
optional CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2; // Current matchmaking reservation of the server
optional uint32 reason = 3; // Reason for kicking and banning the client
};
//
// k_EMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate
//
// GC reports players rank updates to the game server
//
message CMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate
{
repeated PlayerRankingInfo rankings = 1; // Updated rankings
optional uint64 match_id = 2; // Match ID
};
//
// k_EMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate
//
// Operator instruction for GC to set blog URL
//
message CMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate
{
optional string main_post_url = 1; // URL for the main menu post
};
//
// k_EMsgGCCStrike15_v2_ServerNotificationForUserPenalty
//
// GC notifies the server that a user has a penalty
//
message CMsgGCCStrike15_v2_ServerNotificationForUserPenalty
{
optional uint32 account_id = 1; // Account id of the client
optional uint32 reason = 2; // Reason for client having the penalty
optional uint32 seconds = 3; // How many seconds remaining
};
//
// k_EMsgGCCStrike15_v2_ClientReportPlayer
//
// Client submitted a player report
//
message CMsgGCCStrike15_v2_ClientReportPlayer
{
optional uint32 account_id = 1; // Reporting this player
optional uint32 rpt_aimbot = 2; // Aimbot
optional uint32 rpt_wallhack = 3; // Wallhack
optional uint32 rpt_speedhack = 4; // Speedhack
optional uint32 rpt_teamharm = 5; // Team harm
optional uint32 rpt_textabuse = 6; // Text abuse
optional uint32 rpt_voiceabuse = 7; // Voice abuse
optional uint64 match_id = 8; // Match ID
};
//
// k_EMsgGCCStrike15_v2_ClientCommendPlayer
// k_EMsgGCCStrike15_v2_ClientCommendPlayerQuery
// k_EMsgGCCStrike15_v2_ClientCommendPlayerQueryResponse
//
// Client submitted a player commendation, queried commendation or query response
//
message CMsgGCCStrike15_v2_ClientCommendPlayer
{
optional uint32 account_id = 1; // Commending this player
optional uint64 match_id = 8; // Match ID
optional PlayerCommendationInfo commendation = 9; // Commendation information
optional uint32 tokens = 10; // Number of commendation tokens
};
//
// k_EMsgGCCStrike15_v2_ClientReportServer
//
// Client submitted a server report
//
message CMsgGCCStrike15_v2_ClientReportServer
{
optional uint32 rpt_poorperf = 1; // Poor performance
optional uint32 rpt_abusivemodels = 2; // Abusive models
optional uint32 rpt_badmotd = 3; // Bad message of the day content
optional uint32 rpt_listingabuse = 4; // Listing abuse
optional uint32 rpt_inventoryabuse = 5; // Misrepresenting players' inventory
optional uint64 match_id = 8; // Match ID
};
//
// k_EMsgGCCStrike15_v2_ClientReportResponse
//
// GC responds to client report message
//
message CMsgGCCStrike15_v2_ClientReportResponse
{
optional uint64 confirmation_id = 1; // Confirmation id for the report
optional uint32 account_id = 2; // Accound id that was reported
optional uint32 server_ip = 3; // Server IP that was used in the report
optional uint32 response_type = 4; // Response to message type
optional uint32 response_result = 5; // Response result
optional uint32 tokens = 6; // Number of commendation tokens
};
//
// k_EMsgGCCStrike15_v2_ClientRequestWatchInfoFriends2
//
// Client requests information about watching friends games
//
message CMsgGCCStrike15_v2_ClientRequestWatchInfoFriends
{
optional uint32 request_id = 1; // Request id
repeated uint32 account_ids = 2; // Friends account ids
optional uint64 serverid = 3; // Server SteamID
optional uint64 matchid = 4; // Server MatchID
};
message WatchableMatchInfo
{
optional uint32 server_ip = 1; // Server IP (or replay cluster ID)
optional uint32 tv_port = 2; // Server TV port (or replay token)
optional uint32 tv_spectators = 3; // Number of GOTV spectators
optional uint32 tv_time = 4; // GOTV match time in seconds
optional bytes tv_watch_password = 5; // GOTV watch password
optional uint64 cl_decryptdata_key = 6; // cl_decryptdata_key
optional uint64 cl_decryptdata_key_pub = 7; // cl_decryptdata_key_pub
optional uint32 game_type = 8; // Game mode
optional string game_mapgroup = 9; // Game mapgroup
optional string game_map = 10; // Game map
optional uint64 server_id = 11; // Server SteamID
optional uint64 match_id = 12; // Match ID
optional uint64 reservation_id = 13; // Reservation ID
};
//
// k_EMsgGCCStrike15_v2_ClientRequestJoinFriendData
//
message CMsgGCCStrike15_v2_ClientRequestJoinFriendData
{
optional uint32 version = 1; // version
optional uint32 account_id = 2; // friend account id
optional uint32 join_token = 3; // join token
optional uint32 join_ipp = 4; // join ipp
optional CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve res = 5; // reservation data
optional string errormsg = 6; // error message to display
};
//
// k_EMsgGCCStrike15_v2_ClientRequestJoinServerData
//
message CMsgGCCStrike15_v2_ClientRequestJoinServerData
{
optional uint32 version = 1; // version
optional uint32 account_id = 2; // user account id
optional uint64 serverid = 3; // friend account id
optional uint32 server_ip = 4; // friend account id
optional uint32 server_port = 5; // server port
optional CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve res = 6; // reservation data
optional string errormsg = 7; // error message to display
};
//
// k_EMsgGCCStrike15_v2_ClientRequestNewMission
//
message CMsgGCCstrike15_v2_ClientRequestNewMission
{
// optional uint64 campaign_item_id_deprecated = 1; // full item id of the campaign we're trying to advance // DEPRECATED
optional uint32 mission_id = 2; // id of the mission we want to begin
optional uint32 campaign_id = 3; // campaign id of the campaign we're trying to advance
};
//
// k_EMsgGCCStrike15_v2_GC2ServerNotifyXPRewarded
//
message CMsgGCCstrike15_v2_GC2ServerNotifyXPRewarded
{
repeated XpProgressData xp_progress_data = 1; // xp chunks and reasons for receiving them
optional uint32 account_id = 2;
optional uint32 current_xp = 3; // xp before the current progress is applied
optional uint32 current_level = 4; // player level before current xp is applied
optional uint32 upgraded_defidx = 5; // upgraded item that player acquired
};
//
// k_EMsgGCCStrike15_v2_WatchInfoUsers
//
// GC response about user matches
//
message CMsgGCCStrike15_v2_WatchInfoUsers
{
optional uint32 request_id = 1; // Request id
repeated uint32 account_ids = 2; // Users account ids with which the watchable match info is associated
repeated WatchableMatchInfo watchable_match_infos = 3; // Watchable match info
// obsolete field = 4
optional uint32 extended_timeout = 5; // GC server requests the client to additionally wait for so many more seconds and retry
};
//
// k_EMsgGCCStrike15_v2_ClientRequestPlayersProfile
//
// Client requests player profile details
//
message CMsgGCCStrike15_v2_ClientRequestPlayersProfile
{
optional uint32 request_id__deprecated = 1; // Request id
repeated uint32 account_ids__deprecated = 2; // Friends account ids
optional uint32 account_id = 3; // Account id requested
optional uint32 request_level = 4; // How much data is being requested (EMsgGCAccountPrivacyRequestLevel_t)
};
//
// k_EMsgGCCStrike15_v2_PlayersProfile
//
// GC responds with friends profile details
//
message CMsgGCCStrike15_v2_PlayersProfile
{
optional uint32 request_id = 1; // Request id
repeated CMsgGCCStrike15_v2_MatchmakingGC2ClientHello account_profiles = 2; // Available profiles
};
//
// k_EMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate
//
// Client requests overwatch case update or assignment
//
message CMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate
{
optional uint64 caseid = 1; // Case ID in the overwatch
// optional uint32 verdict_legacy = 2; // Verdict on the case [LEGACY: June 11 2013 -- Handler will be removed]
optional uint32 suspectid = 3; // Suspect ID
optional uint32 fractionid = 4; // Evidence fraction
// [NEW: June 11 2013 -- this is the new fields to submit verdict on the case]
optional uint32 rpt_aimbot = 5; // Aimbot
optional uint32 rpt_wallhack = 6; // Wallhack
optional uint32 rpt_speedhack = 7; // Speedhack
optional uint32 rpt_teamharm = 8; // Team harm
optional uint32 reason = 9; // Overwatch case update reason [check? assign? verdict?]
};
//
// k_EMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment
//
// Client requests overwatch case assignment
//
message CMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment
{
optional uint64 caseid = 1; // Case ID in the overwatch
optional string caseurl = 2; // Case evidence available for download
optional uint32 verdict = 3; // Verdict on the case
optional uint32 timestamp = 4; // Server timestamp of case assignment
optional uint32 throttleseconds = 5; // How many seconds client has to wait before requesting again
optional uint32 suspectid = 6; // Suspect ID
optional uint32 fractionid = 7; // Evidence fraction
optional uint32 numrounds = 8; // Total evidence number of rounds
optional uint32 fractionrounds = 9; // How many rounds in the fraction
optional int32 streakconvictions = 10; // What is the convictions streak of this player
optional uint32 reason = 11; // Description of the overwatch case assignment (assign would indicate that there's a case pending)
};
//
// k_EMsgGCCStrike15_v2_PlayerOverwatchCaseStatus
//
// Client reports case status when dealing with overwatch case
//
message CMsgGCCStrike15_v2_PlayerOverwatchCaseStatus
{
optional uint64 caseid = 1; // Case ID that the client encountered error with
optional uint32 statusid = 2; // Type of status that client encountered
};
//
// Client header for a overwatch demo
//
message CClientHeaderOverwatchEvidence
{
optional uint32 accountid = 1; // Account ID that received the case
optional uint64 caseid = 2; // Case ID in the overwatch
};
//
// k_EMsgGCCStrike15_v2_GC2ClientTextMsg
//
// GC requests to print a message on the client
//
message CMsgGCCStrike15_v2_GC2ClientTextMsg
{
optional uint32 id = 1; // Original request id if applicable
optional uint32 type = 2; // What is in the payload?
optional bytes payload = 3; // Message text for the client
};
//
// k_EMsgGCCStrike15_v2_Client2GCTextMsg
//
// Client forwards a text message to GC
//
message CMsgGCCStrike15_v2_Client2GCTextMsg
{
optional uint32 id = 1; // request id for tracking purposes
repeated bytes args = 2; // arguments of the client text message
};
//
// k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops
//
// Server match finished and GC should drop items for players
//
message CMsgGCCStrike15_v2_MatchEndRunRewardDrops
{
optional CMsgGCCStrike15_v2_MatchmakingServerReservationResponse serverinfo = 3; // Full server state that would have been reported in periodic reservation updates, but expedited due to match end
optional CMsgGC_ServerQuestUpdateData match_end_quest_data = 4; // quest update data for players
};
//
// Data structure holding information for item preview
//
message CEconItemPreviewDataBlock
{
message Sticker
{
optional uint32 slot = 1; // Slot where the sticker is applied
optional uint32 sticker_id = 2; // Sticker ID
optional float wear = 3; // Sticker wear
optional float scale = 4; // Sticker scale
optional float rotation = 5; // Sticker rotation
optional uint32 tint_id = 6; // Tint ID
};
optional uint32 accountid = 1; // Account ID that owns the item
optional uint64 itemid = 2; // Item ID
optional uint32 defindex = 3; // Item definition index
optional uint32 paintindex = 4; // Paint index
optional uint32 rarity = 5; // Item rarity
optional uint32 quality = 6; // Item quality
optional uint32 paintwear = 7; // Paint wear
optional uint32 paintseed = 8; // Paint seed
optional uint32 killeaterscoretype = 9; // Kill eater score type
optional uint32 killeatervalue = 10; // Kill eater value
optional string customname = 11; // Custom name
repeated Sticker stickers = 12; // Stickers applied to the weapon
optional uint32 inventory = 13; // Inventory position index or flags
optional uint32 origin = 14; // Origin if it is applicable for the message
optional uint32 questid = 15; // Quest ID that was completed for this item
optional uint32 dropreason = 16; // Reason user got this drop (used to show display icon in drop list)
optional uint32 musicindex = 17; // Music kit id in schema
};
//
// k_EMsgGCCStrike15_v2_MatchEndRewardDropsNotification
//
// GC dropped items for client and committed transactions successfully
// notification is for the server to display item drops in end match UI
//
message CMsgGCCStrike15_v2_MatchEndRewardDropsNotification
{
optional CEconItemPreviewDataBlock iteminfo = 6; // Item that got dropped
};
//
// k_EMsgGCItemAcknowledged
//
message CMsgItemAcknowledged
{
optional CEconItemPreviewDataBlock iteminfo = 1; // Item that got acknowledged
};
//
// k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest
//
message CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest
{
// econ item asset preview integration with Steam Community params
optional uint64 param_s = 1;
optional uint64 param_a = 2;
optional uint64 param_d = 3;
optional uint64 param_m = 4;
};
//
// k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse
//
message CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse
{
optional CEconItemPreviewDataBlock iteminfo = 1;
};
//
// k_EMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification
//
// GC dropped tournament items for clients and committed transactions
// notification informs the game server about it
//
message CMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification
{
optional uint64 match_id = 1; // tournament match id
optional uint32 defindex = 2; // Item definition index
repeated uint32 accountids = 3; // Account IDs that received the reward
};
//
// k_EMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames
//
// Request current live games
//
message CMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames
{
};
//
// k_EMsgGCCStrike15_v2_MatchListRequestLiveGameForUser
//
// Client requests live match data from another user's match
//
message CMsgGCCStrike15_v2_MatchListRequestLiveGameForUser
{
optional uint32 accountid = 1; // AccountID of the other user who is in competitive match
};
//
// k_EMsgGCCStrike15_v2_MatchListRequestRecentUserGames
//
// Request recent user games for a given user
//
message CMsgGCCStrike15_v2_MatchListRequestRecentUserGames
{
optional uint32 accountid = 1; // Account ID for whom the recent user games list is requested
};
//
// k_EMsgGCCStrike15_v2_MatchListRequestTournamentGames
//
// Request for tournament games
//
message CMsgGCCStrike15_v2_MatchListRequestTournamentGames
{
optional int32 eventid = 1; // Event ID for which the games list is being requested
};
//
// k_EMsgGCCStrike15_v2_MatchListRequestFullGameInfo
//
// Request a specific match by match identifier
//
message CMsgGCCStrike15_v2_MatchListRequestFullGameInfo
{
optional uint64 matchid = 1; // Unique Match ID
optional uint64 outcomeid = 2; // Unique Outcome ID
optional uint32 token = 3; // 16-bit validation token
};
message CDataGCCStrike15_v2_MatchInfo
{
optional uint64 matchid = 1; // Match ID
optional uint32 matchtime = 2; // Match RTime32 timestamp
optional WatchableMatchInfo watchablematchinfo = 3; // Live matches can be watched using this watchable match info
optional CMsgGCCStrike15_v2_MatchmakingServerRoundStats roundstats_legacy = 4; // Latest round stats
repeated CMsgGCCStrike15_v2_MatchmakingServerRoundStats roundstatsall = 5; // History of round stats
};
message CDataGCCStrike15_v2_TournamentGroupTeam
{
optional int32 team_id = 1; // Team ID of the team
optional int32 score = 2; // Score this team accumulated in the group
optional bool correctpick = 3; // Whether this team was the correct pick
};
message CDataGCCStrike15_v2_TournamentGroup
{
optional uint32 groupid = 1; // Group or matchup UID
optional string name = 2; // Name of the group "Group A"
optional string desc = 3; // Description of the group "Group A"
optional uint32 picks__deprecated = 4; // Number of picks allowed in this group [deprecated in favor of repeated picks field#10 Aug 2015]
repeated CDataGCCStrike15_v2_TournamentGroupTeam teams = 5; // Teams in the group or matchup
repeated int32 stage_ids = 6; // Matches that are tagged with stage_id in this list belong to this group
optional uint32 picklockuntiltime = 7; // When picks get placed they will be locked until this time (and the field indicates that picks can be placed)
optional uint32 pickableteams = 8; // Number of teams from the team list that are allowed for picks (team list can include eliminated teams)
optional uint32 points_per_pick = 9; // Number of points that players can earn per correct picks
message Picks
{
repeated int32 pickids = 1; // Correct picks
};
repeated Picks picks = 10; // Correct picks for the group
};
message CDataGCCStrike15_v2_TournamentSection
{
optional uint32 sectionid = 1; // Section UID
optional string name = 2; // Name of the section "Group Stage | A and B"
optional string desc = 3; // Description of the section "Aug 17th"
repeated CDataGCCStrike15_v2_TournamentGroup groups = 4; // Groups info here
};
message CDataGCCStrike15_v2_TournamentInfo
{
repeated CDataGCCStrike15_v2_TournamentSection sections = 1;// Sections and matchup groups/brackets of the tournament
optional TournamentEvent tournament_event = 2; // Tournament event information
repeated TournamentTeam tournament_teams = 3; // Tournament teams registered
};
//
// k_EMsgGCCStrike15_v2_MatchList
//
// Match list returned upon client request
//
message CMsgGCCStrike15_v2_MatchList
{
optional uint32 msgrequestid = 1; // Which message the client sent to trigger the match list response
optional uint32 accountid = 2; // Which account id the match list belongs to
optional uint32 servertime = 3; // Server RTime32 stamp of the match list
repeated CDataGCCStrike15_v2_MatchInfo matches = 4; // List of matches
repeated TournamentTeam streams = 5; // Streams of the container
optional CDataGCCStrike15_v2_TournamentInfo tournamentinfo = 6; // Tournament information
};
//
// k_EMsgGCCStrike15_v2_Predictions
//
// Match list predictions upon client request
//
message CMsgGCCStrike15_v2_Predictions
{
optional uint32 event_id = 1; // Event of the predictions data
message GroupMatchTeamPick
{
optional int32 sectionid = 1; // Section id
optional int32 groupid = 2; // Group id
optional int32 index = 3; // Index in the group
optional int32 teamid = 4; // Team id
optional uint64 itemid = 5; // Item ID used to place the prediction
};
repeated GroupMatchTeamPick group_match_team_picks = 2; // List of team picks
};
//
// k_EMsgGCCStrike15_v2_FantasyRequestClientData
// k_EMsgGCCStrike15_v2_FantasyUpdateClientData
//
// Fantasy data request and update
//
message CMsgGCCStrike15_v2_Fantasy
{
optional uint32 event_id = 1; // Event of the fantasy data
message FantasySlot
{
optional int32 type = 1; // What type of slot is being used
optional int32 pick = 2; // What is the pick in this slot
optional uint64 itemid = 3; // What itemid is used to make the pick
};
message FantasyTeam
{
optional int32 sectionid = 1; // Section id
repeated FantasySlot slots = 2; // Slots on this team
};
repeated FantasyTeam teams = 2; // Fantasy teams list
};
message CAttribute_String
{
optional string value = 1;
};
// k_EMsgGCToGCReloadVersions
message CMsgGCToGCReloadVersions
{
};
message CMsgCStrike15Welcome
{
// optional bool spectator_only = 1;
// optional bool allow_team_creation = 2;
// optional bool tournament_admin = 3;
// optional bool tournament_broadcaster = 4;
optional uint32 store_item_hash = 5;
optional uint32 timeplayedconsecutively = 6;
// optional bool allow_3rd_party_match_history = 7;
// optional DOTA_PartnerAccountType partner_account_type = 8;
// optional uint32 banned_word_list_word_id = 9;
optional uint32 time_first_played = 10;
// optional uint32 partner_account_state = 11;
optional uint32 last_time_played = 12;
optional uint32 last_ip_address = 13;
// optional uint32 notify_successful_report = 14;
// optional uint32 shutdownlawterminatetime = 15;
// optional uint32 banned_word_list_version = 16;
// optional bool profile_private = 17;
optional uint64 gscookieid = 18;
optional uint64 uniqueid = 19;
};
//
// k_EMsgGCCStrike15_v2_ClientVarValueNotificationInfo
//
// Client message reporting variable value information
//
message CMsgGCCStrike15_v2_ClientVarValueNotificationInfo
{
optional string value_name = 1; // Name of the value reported
optional int32 value_int = 2; // Integer value reported
optional uint32 server_addr = 3; // Server address where the client is playing
optional uint32 server_port = 4; // Server port where the client is playing
repeated string choked_blocks = 5; // Choked blocks
};
//
// k_EMsgGCCStrike15_v2_ServerVarValueNotificationInfo
//
// Server message reporting client variable value information
//
message CMsgGCCStrike15_v2_ServerVarValueNotificationInfo
{
optional uint32 accountid = 1; // AccountID reported
repeated uint32 viewangles = 2; // Viewangles observed by server (3 values = viewangles only, 6 values = viewangles + move forward/side/up)
optional uint32 type = 3;
};
//
// k_EMsgGCCStrike15_v2_GiftsLeaderboardRequest
//
// Game server is requesting gifts leaderboard
//
message CMsgGCCStrike15_v2_GiftsLeaderboardRequest
{
};
//
// k_EMsgGCCStrike15_v2_GiftsLeaderboardResponse
//
// GC is sending gifts leaderboard to game server
//
message CMsgGCCStrike15_v2_GiftsLeaderboardResponse
{
optional uint32 servertime = 1; // Timestamp when leaderboard response was generated
optional uint32 time_period_seconds = 2; // Time period coverd by leaderboard response
optional uint32 total_gifts_given = 3; // Total number of gifts given in that time period
optional uint32 total_givers = 4; // Total number of accounts who gave gifts
message GiftLeaderboardEntry
{
optional uint32 accountid = 1; // Gifter accountid
optional uint32 gifts = 2; // Number of gifts gifted
};
repeated GiftLeaderboardEntry entries = 5; // Featured leaderboard entries
};
//
// k_EMsgGCCStrike15_v2_ClientSubmitSurveyVote
//
// Client is submitting vote on an active survey
//
message CMsgGCCStrike15_v2_ClientSubmitSurveyVote
{
optional uint32 survey_id = 1; // Survey ID that the vote is submitted for
optional uint32 vote = 2; // Vote that is submitted by the client
};
//
// k_EMsgGCCStrike15_v2_Server2GCClientValidate
//
// Server requests GC to validate connecting client
//
message CMsgGCCStrike15_v2_Server2GCClientValidate
{
optional uint32 accountid = 1; // Client account id
};
//
// k_EMsgGCCStrike15_v2_Server2GCPureServerValidationFailure
//
// Server reports to GC failure to validate pure files of the client
//
message CMsgGCCStrike15_v2_Server2GCPureServerValidationFailure
{
optional uint32 accountid = 1; // AccountID
optional string path = 2; // File path
optional string file = 3; // File name
optional uint32 crc = 4; // File crc
optional int32 hash = 5; // Hash type
optional int32 len = 6; // Length
optional int32 pack_number = 7; // Pack number
optional int32 pack_file_id = 8; // Pack file ID
};
//
// k_EMsgGCCStrike15_v2_GC2ClientTournamentInfo
//
// GC informs the client about a tournament match starting
//
message CMsgGCCStrike15_v2_GC2ClientTournamentInfo
{
optional uint32 eventid = 1; // Tournament event ID
optional uint32 stageid = 2; // Stage of the event for the match
optional uint32 game_type = 3; // Game type for the match that is played
repeated uint32 teamids = 4; // Teams playing the match
};
//
// Shared Object for Coupons
//
message CSOEconCoupon
{
optional uint32 entryid = 1 [ (key_field) = true ];
optional uint32 defidx = 2;
optional fixed32 expiration_date = 3;
};
//
// Shared Object for Quests
//
message CSOQuestProgress
{
optional uint32 questid = 1 [ (key_field) = true ];
optional uint32 points_remaining = 2;
optional uint32 bonus_points = 3;
};
//
// Shared Object for Persona
//
message CSOPersonaDataPublic
{
optional int32 player_level = 1; // Player's level based on xp earned in matches
optional PlayerCommendationInfo commendation = 2; // Commendation information
optional bool elevated_state = 3; // Whether the user has elevated state (true IFF k_EGameAccountElevatedState_Elevated)
};
//
// k_EMsgGC_GlobalGame_Subscribe
//
message CMsgGC_GlobalGame_Subscribe
{
// Client > GC: request to subscribe to global game and get a ticket to play
// GC > Client: informs the client of the ticket that will be used to play
optional uint64 ticket = 1;
};
//
// k_EMsgGC_GlobalGame_Unsubscribe
//
message CMsgGC_GlobalGame_Unsubscribe
{
// Client > GC: unsubscribe from global game
// GC > Client: unsubscribe, and if seconds remaining is set then client has to wait
optional int32 timeleft = 1;
};
//
// k_EMsgGC_GlobalGame_Play
//
message CMsgGC_GlobalGame_Play
{
// Client > GC: take an action in the global game
// GC > Client: informs the client that the action was registered
optional uint64 ticket = 1;
optional uint32 gametimems = 2; // how much game time milliseconds elapsed since rollover
optional uint32 msperpoint = 3; // how many milliseconds each point is worth
};
//
// k_EMsgGCCStrike15_v2_AcknowledgePenalty
//
// Acknowledges that the user had a cooldown penalty in the past.
//
message CMsgGCCStrike15_v2_AcknowledgePenalty
{
optional int32 acknowledged = 1; // Flag indicating user acknowledges penalty
};
//
// k_EMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin
//
// Client wants to trade max level status for current prestige coin
//
message CMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin
{
};
//
// k_EMsgGCCStrike15_v2_Client2GCStreamUnlock
//
// Client requests GC to unlock streaming codec that is currently unavailable
//
message CMsgGCCStrike15_v2_Client2GCStreamUnlock
{
optional uint64 ticket = 1; // client ticket to prevent accidental streaming unlock
optional int32 os = 2; // OS type of the client
};
//
// k_EMsgGCCStrike15_v2_ClientToGCRequestElevate
//
// Client wants to request premium matchmaking status
//
message CMsgGCCStrike15_v2_ClientToGCRequestElevate
{
optional uint32 stage = 1;
};
//
// k_EMsgGCCStrike15_v2_GlobalChat
// k_EMsgGCCStrike15_v2_GlobalChat_Subscribe
// k_EMsgGCCStrike15_v2_GlobalChat_Unsubscribe
//
// Client informs the GC about valid matchid and chat fragments
//
message CMsgGCCStrike15_v2_ClientToGCChat
{
optional uint64 match_id = 1; // Match ID that client is spectating or zero to unsubscribe
optional string text = 2; // Client's text if they want to say something
};
//
// k_EMsgGCCStrike15_v2_GlobalChat
//
// Client informs the GC about valid matchid and chat fragments
//
message CMsgGCCStrike15_v2_GCToClientChat
{
optional uint32 account_id = 1; // Account ID of the sender
optional string text = 2; // Client's text if they want to say something
};
//
// k_EMsgGCCStrike15_v2_ClientAuthKeyCode
//
// Client requests GC to generate a
//
message CMsgGCCStrike15_v2_ClientAuthKeyCode
{
optional uint32 eventid = 1; // Which event category auth key code is being generated for (0 for all)
optional string code = 2; // Actual code or a special character: '?' = query, '-' = remove, '+' = create
};
//
// k_EMsgGCCStrike15_v2_GotvSyncPacket
//
// server>GC: update sync tick;
// client>GC: asking for sync tick;
// GC>client: responding with sync tick
//
message CMsgGCCStrike15_GotvSyncPacket
{
optional CEngineGotvSyncPacket data = 1; // Data
};
//
// k_EMsgGCCStrike15_v2_ClientPlayerDecalSign
//
// Client requests GC to generate a digital signature for their spray decal charge
//
message PlayerDecalDigitalSignature
{
optional bytes signature = 1;
optional uint32 accountid = 2;
optional uint32 rtime = 3;
repeated float endpos = 4;
repeated float startpos = 5;
repeated float right = 6;
optional uint32 tx_defidx = 7;
optional int32 entindex = 8;
optional uint32 hitbox = 9;
optional float creationtime = 10;
optional uint32 equipslot = 11;
optional uint32 trace_id = 12;
repeated float normal = 13;
optional uint32 tint_id = 14;
};
message CMsgGCCStrike15_v2_ClientPlayerDecalSign
{
optional PlayerDecalDigitalSignature data = 1;
optional uint64 itemid = 2;
};
//
// k_EMsgGCCStrike15_v2_ClientLogonFatalError
//
message CMsgGCCStrike15_v2_ClientLogonFatalError
{
optional uint32 errorcode = 1; // error code
optional string message = 2; // message
};
//
// k_EMsgGCCStrike15_v2_ClientPollState
//
message CMsgGCCStrike15_v2_ClientPollState
{
optional uint32 pollid = 1; // poll id
repeated string names = 2; // poll names for cvars
repeated int32 values = 3; // poll scale (when 0 is int value, otherwise factor for bucketing floats, e.g. 1000 will multiply client float value by 1000 and return it as int for bucketing)
};
//
// k_EMsgGCCStrike15_v2_Party_Register = 9189; // GC <-> client: register the party metadata
// k_EMsgGCCStrike15_v2_Party_Unregister = 9190; // GC <-> client: unregister the party metadata
//
message CMsgGCCStrike15_v2_Party_Register
{
optional uint32 id = 1; // SteamID of the Lobby
optional uint32 ver = 2; // Version of the game
optional uint32 apr = 3; // Prime setting
optional uint32 ark = 4; // Rank setting
optional uint32 nby = 5; // Nearby advertisement
optional uint32 grp = 6; // AccountID_t of Steam Group advertisement
optional uint32 slots = 7; // Number of available slots
optional uint32 launcher = 8; // Launcher used by the party
};
//
// k_EMsgGCCStrike15_v2_Party_Search = 9191; // GC <-> client: search the party metadata
//
message CMsgGCCStrike15_v2_Party_Search
{
optional uint32 ver = 1; // Version of the game
optional uint32 apr = 2; // Prime setting
optional uint32 ark = 3; // Rank setting
repeated uint32 grps = 4; // Clan AccountID_t of Steam Groups that should match
optional uint32 launcher = 5; // Launcher used by the search
};
message CMsgGCCStrike15_v2_Party_SearchResults
{
message Entry
{
optional uint32 id = 1; // SteamID of the lobby
optional uint32 grp = 2; // Clan AccountID how this lobby was found (not set for nearby)
};
repeated Entry entries = 1; // Lobbies discovered
};
//
// k_EMsgGCCStrike15_v2_Party_Invite = 9192; // GC -> client: you have been invited to this party
//
message CMsgGCCStrike15_v2_Party_Invite
{
optional uint32 accountid = 1; // Inviting user
optional uint32 lobbyid = 2; // SteamID of the lobby
};
//
// k_EMsgGCCStrike15_v2_Account_RequestCoPlays
//
message CMsgGCCStrike15_v2_Account_RequestCoPlays
{
message Player
{
optional uint32 accountid = 1; // AccountID of a teammate
optional uint32 rtcoplay = 2; // RTime32 of most recent co-play experience
optional bool online = 3; // Whether account is currently online
};
repeated Player players = 1; // list of recent players
optional uint32 servertime = 2; // Server RTime32 stamp of the response
};
//
// k_EMsgGCCStrike15_v2_ClientToGCRequestTicket
//
message CMsgGCCStrike15_v2_ClientToGCRequestTicket
{
optional fixed64 authorized_steam_id = 1; // Client that is being authorized to communicate
optional fixed32 authorized_public_ip = 2; // They are allowed to talk on which public IP? (This is necessary to prevent ticket sharing.)
optional fixed64 gameserver_steam_id = 3; // Gameserver they are authorized to talk to
optional fixed64 gameserver_net_id = 4; // Network-routable ID of the gameserver
};