Files
csdemo/Protobufs/deadlock/citadel_gcmessages_client.proto
2024-09-15 05:09:15 +02:00

1385 lines
38 KiB
Protocol Buffer

import "steammessages.proto";
import "gcsdk_gcmessages.proto";
import "citadel_gcmessages_common.proto";
enum EGCCitadelClientMessages {
k_EMsgClientToGCStartMatchmaking = 9010;
k_EMsgClientToGCStartMatchmakingResponse = 9011;
k_EMsgClientToGCStopMatchmaking = 9012;
k_EMsgClientToGCStopMatchmakingResponse = 9013;
k_EMsgGCToClientMatchmakingStopped = 9014;
k_EMsgClientToGCLeaveLobby = 9015;
k_EMsgClientToGCLeaveLobbyResponse = 9016;
k_EMsgClientToGCIsInMatchmaking = 9017;
k_EMsgClientToGCIsInMatchmakingResponse = 9018;
k_EMsgGCToClientDevPlaytestStatus = 9019;
k_EMsgClientToGCDevSetMMBias = 9023;
k_EMsgClientToGCGetProfileCard = 9024;
k_EMsgClientToGCGetProfileCardResponse = 9025;
k_EMsgClientToGCUpdateRoster = 9026;
k_EMsgClientToGCUpdateRosterResponse = 9027;
k_EMsgGCToClientProfileCardUpdated = 9028;
k_EMsgGCToClientDevAnnouncements = 9029;
k_EMsgClientToGCModifyDevAnnouncements = 9030;
k_EMsgClientToGCModifyDevAnnouncementsResponse = 9031;
k_EMsgGCToClientSDRTicket = 9100;
k_EMsgClientToGCReplacementSDRTicket = 9101;
k_EMsgClientToGCReplacementSDRTicketResponse = 9102;
k_EMsgClientToGCSetServerConVar = 9107;
k_EMsgClientToGCSetServerConVarResponse = 9108;
k_EMsgClientToGCSpectateLobby = 9109;
k_EMsgClientToGCSpectateLobbyResponse = 9110;
k_EMsgClientToGCPostMatchSurveyResponse = 9111;
k_EMsgClientToGCGetMatchHistory = 9112;
k_EMsgClientToGCGetMatchHistoryResponse = 9113;
k_EMsgClientToGCSpectateUser = 9116;
k_EMsgClientToGCSpectateUserResponse = 9117;
k_EMsgClientToGCPartyCreate = 9123;
k_EMsgClientToGCPartyCreateResponse = 9124;
k_EMsgClientToGCPartyLeave = 9125;
k_EMsgClientToGCPartyLeaveResponse = 9126;
k_EMsgClientToGCPartyJoin = 9127;
k_EMsgClientToGCPartyJoinResponse = 9128;
k_EMsgClientToGCPartyAction = 9129;
k_EMsgClientToGCPartyActionResponse = 9130;
k_EMsgClientToGCPartyStartMatch = 9131;
k_EMsgClientToGCPartyStartMatchResponse = 9132;
k_EMsgClientToGCPartyInviteUser = 9133;
k_EMsgClientToGCPartyInviteUserResponse = 9134;
k_EMsgGCToClientPartyEvent = 9135;
k_EMsgGCToClientCanRejoinParty = 9137;
k_EMsgClientToGCPartyJoinViaCode = 9138;
k_EMsgClientToGCPartyJoinViaCodeResponse = 9139;
k_EMsgClientToGCPartyUpdateRoster = 9140;
k_EMsgClientToGCPartyUpdateRosterResponse = 9141;
k_EMsgClientToGCPartySetReadyState = 9142;
k_EMsgClientToGCPartySetReadyStateResponse = 9143;
k_EMsgClientToGCGetAccountStats = 9164;
k_EMsgClientToGCGetAccountStatsResponse = 9165;
k_EMsgGCToClientAccountStatsUpdated = 9166;
k_EMsgClientToGCGetMatchMetaData = 9167;
k_EMsgClientToGCGetMatchMetaDataResponse = 9168;
k_EMsgClientToGCDevAction = 9172;
k_EMsgClientToGCDevActionResponse = 9173;
k_EMsgClientToGCRecordClientEvents = 9174;
k_EMsgClientToGCRecordClientEventsResponse = 9175;
k_EMsgClientToGCSetNewPlayerProgress = 9176;
k_EMsgClientToGCSetNewPlayerProgressResponse = 9177;
k_EMsgClientToGCUpdateAccountSync = 9178;
k_EMsgClientToGCUpdateAccountSyncResponse = 9179;
k_EMsgClientToGCGetHeroChoice = 9180;
k_EMsgClientToGCGetHeroChoiceResponse = 9181;
k_EMsgClientToGCUnlockHero = 9182;
k_EMsgClientToGCUnlockHeroResponse = 9183;
k_EMsgClientToGCBookUnlock = 9184;
k_EMsgClientToGCBookUnlockResponse = 9185;
k_EMsgClientToGCGetBook = 9186;
k_EMsgClientToGCGetBookResponse = 9187;
k_EMsgGCToClientBookUpdated = 9188;
k_EMsgClientToGCSubmitPlaytestUser = 9189;
k_EMsgClientToGCSubmitPlaytestUserResponse = 9190;
k_EMsgClientToGCUpdateHeroBuild = 9193;
k_EMsgClientToGCUpdateHeroBuildResponse = 9194;
k_EMsgClientToGCFindHeroBuilds = 9195;
k_EMsgClientToGCFindHeroBuildsResponse = 9196;
k_EMsgClientToGCReportPlayerFromMatch = 9197;
k_EMsgClientToGCReportPlayerFromMatchResponse = 9198;
k_EMsgClientToGCGetAccountMatchReports = 9199;
k_EMsgClientToGCGetAccountMatchReportsResponse = 9200;
k_EMsgClientToGCDeleteHeroBuild = 9201;
k_EMsgClientToGCDeleteHeroBuildResponse = 9202;
k_EMsgClientToGCGetActiveMatches = 9203;
k_EMsgClientToGCGetActiveMatchesResponse = 9204;
k_EMsgClientToGCGetDiscordLink = 9205;
k_EMsgClientToGCGetDiscordLinkResponse = 9206;
k_EMsgClientToGCPartySetMode = 9207;
k_EMsgClientToGCPartySetModeResponse = 9208;
k_EMsgClientToGCGrantForumAccess = 9209;
k_EMsgClientToGCGrantForumAccessResponse = 9210;
k_EMsgClientToGCModeratorRequest = 9211;
k_EMsgClientToGCModeratorRequestResponse = 9212;
k_EMsgClientToGCGetFriendGameStatus = 9213;
k_EMsgClientToGCGetFriendGameStatusResponse = 9214;
k_EMsgClientToGCUpdateHeroBuildPreference = 9215;
k_EMsgClientToGCUpdateHeroBuildPreferenceResponse = 9216;
k_EMsgClientToGCGetOldHeroBuildData = 9217;
k_EMsgClientToGCGetOldHeroBuildDataResponse = 9218;
k_EMsgClientToGCUpdateSpectatorStatus = 9219;
}
enum ECitadelAccountPermissionFlag {
k_eAccountPermission_PrivateBot = 1;
k_eAccountPermission_CoopBot = 2;
k_eAccountPermission_Unranked = 3;
}
enum ECitadelNewPlayerProgressFlag {
k_eNewPlayerProgress_GettingStarted = 1;
k_eNewPlayerProgress_HeroTraining = 2;
k_eNewPlayerProgress_LaneTraining = 3;
}
enum EProfileCardSlotType {
k_EProfileCardSlotType_Empty = 0;
k_EProfileCardSlotType_Stat = 1;
k_EProfileCardSlotType_Hero = 2;
}
enum ECitadelClientAccountEvent {
k_eLaunchedHeroTest = 1;
k_eViewedProfile = 2;
k_eViewedSocial = 3;
k_eViewedHeroes = 4;
k_eViewedHeroDetails = 5;
k_eViewedPatchNotes = 6;
k_eViewedEvents = 7;
k_eViewedGettingStarted = 8;
k_eViewedGuidePage = 9;
k_eLaunchedClient = 10;
k_eEditRoster = 11;
k_eViewedWatch = 12;
k_eCreatedParty = 13;
k_eCreatedPartyWithInvite = 14;
k_eViewedSelfProfile = 15;
k_eJoinedPartyCode = 16;
k_eSentPartyInvite = 17;
k_eAcceptPartyInvite = 18;
k_eRejectPartyInvite = 19;
k_eSpectateUser = 20;
k_eSpectateMatch = 21;
k_eEnteredMatchMaking = 22;
k_eLeftMatchMaking = 23;
k_eEnteredPartyMatchMaking = 24;
k_eLeftPartyMatchMaking = 25;
k_eDownloadedReplay = 26;
k_eWatchedReplay = 27;
k_eViewMatchDetails = 28;
k_eMatchDetailsTab = 29;
k_eDeleteReplay = 30;
k_eBotMatch_Guided = 31;
k_eBotMatch_Easy = 32;
k_eBotMatch_Hard = 33;
k_eLiveUpdatedRoster = 34;
k_eMatchMakingIdle_Displayed = 35;
k_eMatchMakingIdle_Stopped = 36;
k_eConnectReacquireTicket = 37;
k_eConnectAttemptReconnect = 38;
k_eDisconnectPresentedPrompt = 39;
k_eDisconnectConfirmed = 40;
k_eViewedSettings_Options = 41;
k_eViewedSettings_Video = 42;
k_eViewedSettings_Audio = 43;
k_eViewedSettings_HotKey = 44;
k_eViewedSettings_ChatWheel = 45;
k_eViewedSettings_About = 46;
k_eOpenedSubmitFeedback = 47;
k_eTutorialSkip_Pressed = 48;
k_eTutorialSkip_Confirmed = 49;
k_eViewedGuidePage_5s = 50;
k_eViewedGuidePage_15s = 51;
k_eViewedGuidePage_30s = 52;
k_eViewedGuidePage_60s = 53;
k_eOpenedBookTest = 54;
k_eSandboxViaHeroPage = 55;
}
message CSOGameAccountClient {
enum EFlags {
k_eDeveloper = 1;
k_eExternalModerator = 2;
k_eGotInitialHeroes = 4;
k_eClaimedDiscordLink = 16;
k_eClaimedForum = 32;
k_eAccountBanned = 64;
}
optional uint32 account_id = 1 [(key_field) = true];
optional uint64 flags = 2;
optional uint32 wins = 3;
optional uint32 losses = 4;
optional uint32 kills = 5;
optional uint32 most_played_hero_id = 6;
optional uint64 permissions = 7;
optional uint64 new_player_progress = 8;
optional uint32 hero_unlock_credits = 9;
optional uint32 mm_ban_until = 10;
optional uint32 comms_ban_until = 11;
optional uint32 low_priority_games_remaining = 12;
}
message CSOAccountSyncStorage {
optional uint32 account_id = 1;
optional uint32 id = 2;
optional uint32 value = 3;
}
message CSOAccountHeroInfo {
enum EHeroStatus {
k_eLocked = 0;
k_eOwned = 1;
}
optional uint32 account_id = 1 [(key_field) = true];
optional uint32 hero_id = 2;
optional .CSOAccountHeroInfo.EHeroStatus status = 3 [default = k_eLocked];
optional uint32 wins = 4;
optional uint32 kills = 5;
}
message CMsgCitadelClientHello {
optional .ECitadelRegionMode region_mode = 1 [default = k_ECitadelRegionMode_ROW];
}
message CMsgClientToGCStartMatchmaking {
optional uint32 client_version = 1;
optional .EGCPlatform client_platform = 2 [default = k_eGCPlatform_None];
optional .CMsgStartFindingMatchInfo match_info = 3;
optional .CMsgRegionPingTimesClient ping_times = 4;
optional .CMsgHeroSelectionMatchInfo heroes = 5;
}
message CMsgClientToGCStartMatchmakingResponse {
enum EResultCode {
k_EResult_OK = 0;
k_EResult_AlreadyFindingMatch = 1;
k_EResult_PartyMemberInLobby = 2;
k_EResult_InvalidClientVersion = 3;
k_EResult_MatchmakingDisabled = 4;
k_EResult_MatchmakingTooBusy = 5;
k_EResult_InternalError = 6;
k_EResult_NoRegionPings = 7;
k_EResult_InParty = 8;
k_EResult_ModeLocked = 9;
k_EResult_ModeBanned = 10;
k_EResult_RegionInfoNotProvided = 11;
k_EResult_DurationControlBlocked = 12;
k_EResult_InvalidHeroSelection = 13;
k_EResult_HeroesNotUnlocked = 14;
k_EResult_PermanentBan = 15;
}
optional .CMsgClientToGCStartMatchmakingResponse.EResultCode result = 1 [default = k_EResult_OK];
optional uint32 time_stamp = 2;
optional string debug_message = 3;
}
message CMsgClientToGCStopMatchmaking {
}
message CMsgClientToGCStopMatchmakingResponse {
optional bool success = 1;
}
message CMsgGCToClientMatchmakingStopped {
enum EReason {
k_EResult_Unspecified = 0;
k_EResult_VersionUpdated = 1;
k_EResult_FailedReadyUp = 2;
}
optional .CMsgGCToClientMatchmakingStopped.EReason reason = 1 [default = k_EResult_Unspecified];
}
message CMsgClientToGCLeaveLobby {
optional uint64 lobby_id = 1;
}
message CMsgClientToGCLeaveLobbyResponse {
}
message CMsgClientWelcomeCitadel {
optional uint32 currency = 1;
repeated .CExtraMsgBlock extra_messages = 2;
optional uint32 compatibility_version = 3;
optional .ECitadelRegionMode region_mode = 4 [default = k_ECitadelRegionMode_ROW];
}
message CMsgClientToGCIsInMatchmaking {
}
message CMsgClientToGCIsInMatchmakingResponse {
optional bool in_matchmaking = 1;
}
message CMsgDevMatchInfo {
message MatchPlayer {
optional uint32 account_id = 1;
optional .ECitadelLobbyTeam team = 2 [default = k_ECitadelLobbyTeam_Team0];
optional bool abandoned = 3;
optional uint32 hero_id = 4;
}
optional uint32 start_time = 1;
optional .ECitadelLobbyTeam winning_team = 2 [default = k_ECitadelLobbyTeam_Team0];
optional uint64 match_id = 3;
repeated .CMsgDevMatchInfo.MatchPlayer players = 4;
optional fixed64 lobby_id = 5;
optional uint32 net_worth_team_0 = 9;
optional uint32 net_worth_team_1 = 10;
optional uint32 duration_s = 11;
optional uint32 spectators = 12;
optional uint32 open_spectator_slots = 13;
optional uint64 objectives_mask_team0 = 14;
optional uint64 objectives_mask_team1 = 15;
optional .ECitadelMatchMode match_mode = 16 [default = k_ECitadelMatchMode_Invalid];
optional .ECitadelGameMode game_mode = 17 [default = k_ECitadelGameMode_Invalid];
optional uint32 match_score = 18;
optional .ECitadelRegionMode region_mode = 19 [default = k_ECitadelRegionMode_ROW];
}
message CMsgGCToClientDevPlaytestStatus {
message HeroWhitelist {
optional uint32 hero_id = 1;
repeated uint32 account_ids = 2;
}
message RegionInfo {
optional .ECitadelRegionMode region = 1 [default = k_ECitadelRegionMode_ROW];
optional uint32 unranked_queue_size = 5;
optional uint32 coop_queue_size = 6;
optional uint32 coop_mm_formation_time = 8;
optional uint32 available_servers = 9;
}
optional bool is_mm_enabled = 4;
optional bool locked_heroes = 8;
optional bool party_shared_heroes = 9;
repeated .CMsgGCToClientDevPlaytestStatus.HeroWhitelist hero_whitelists = 10;
optional uint32 mm_pause_time = 14;
repeated uint32 valid_client_versions = 15;
optional uint32 active_match_count = 21;
repeated .CMsgGCToClientDevPlaytestStatus.RegionInfo regions = 22;
}
message CMsgGCToClientSDRTicket {
optional bytes ticket = 1;
}
message CMsgClientToGCReplacementSDRTicket {
optional fixed64 lobby_id = 1;
}
message CMsgClientToGCReplacementSDRTicketResponse {
optional bytes ticket = 1;
optional string error_message = 2;
}
message CMsgClientToGCSetServerConVar {
optional string convar_name = 1;
optional string convar_value = 2;
optional fixed64 lobby_id = 3;
}
message CMsgClientToGCSetServerConVarResponse {
optional string message = 1;
}
message CMsgClientToGCPostMatchSurveyResponse {
message PostMatchSurvey {
optional uint32 question_id = 1;
optional uint32 response_value = 2;
}
repeated .CMsgClientToGCPostMatchSurveyResponse.PostMatchSurvey post_match_survey = 1;
optional uint64 match_id = 2;
}
message CMsgPartyMMInfo {
optional .EGCPlatform platform = 1 [default = k_eGCPlatform_None];
optional .CMsgRegionPingTimesClient ping_times = 2;
optional uint32 client_version = 3;
optional .ECitadelRegionMode region_mode = 4 [default = k_ECitadelRegionMode_ROW];
}
message CMsgClientToGCPartyCreate {
optional .CMsgPartyMMInfo party_mm_info = 1;
optional uint32 invite_account_id = 3;
optional bool disable_party_code = 4;
optional bool is_private_lobby = 5;
optional .ECitadelRegionMode region_mode = 6 [default = k_ECitadelRegionMode_ROW];
optional string server_search_key = 7;
}
message CMsgClientToGCPartyCreateResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eAlreadyInParty = 2;
k_eDisabled = 3;
k_eInvalidVersion = 4;
k_eNoRegionPings = 5;
k_eTooBusy = 6;
k_eRateLimited = 7;
k_eNotFriends = 8;
k_eRegionInfoNotProvided = 9;
k_eDurationControlBlocked = 10;
k_eInMatchmaking = 11;
k_ePlayerDoesntHaveGame = 12;
}
optional .CMsgClientToGCPartyCreateResponse.EResponse result = 1 [default = k_eInternalError];
optional fixed64 party_id = 2;
}
message CMsgClientToGCPartyLeave {
optional fixed64 party_id = 1;
}
message CMsgClientToGCPartyLeaveResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eNotInParty = 2;
k_eInMatchMaking = 3;
}
optional .CMsgClientToGCPartyLeaveResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCPartyJoin {
optional fixed64 party_id = 1;
optional bool is_rejoin = 2;
optional .CMsgPartyMMInfo party_mm_info = 3;
}
message CMsgClientToGCPartyJoinResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eAlreadyInParty = 2;
k_eDisabled = 3;
k_eInvalidPartyID = 4;
k_eInvalidPermissions = 5;
k_eInvalidVersion = 6;
k_eNoRegionPings = 7;
k_eTooBusy = 8;
k_eInvalidCode = 9;
k_eRateLimited = 10;
k_eRegionInfoNotProvided = 11;
k_eDurationControlBlocked = 12;
k_ePartyInMatchMaking = 13;
k_eInMatchmaking = 14;
k_ePartyFull = 15;
}
optional .CMsgClientToGCPartyJoinResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCPartyAction {
enum EAction {
k_eKickUser = 1;
k_eCancelInvite = 2;
k_eCancelFindMatch = 3;
k_eSetPlayerType = 5;
k_eEnablePartyCode = 7;
k_eSetMemberTeam = 8;
k_eSetChatMode = 9;
k_eSetPlayerSlot = 10;
k_eSetRegionMode = 11;
k_eSetPlayerSlotBot = 12;
k_eSetAllSlotBots = 13;
}
optional fixed64 party_id = 1;
optional uint32 target_account_id = 2;
optional .CMsgClientToGCPartyAction.EAction action_id = 3 [default = k_eKickUser];
optional uint64 uint_value = 4;
optional bool bool_value = 5;
}
message CMsgClientToGCPartyActionResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eInvalidPartyID = 2;
k_eInvalidPermissions = 3;
k_eInvalidTarget = 4;
k_eInvalidValue = 5;
k_eInMatchMaking = 6;
k_eInMatch = 7;
k_eDisabled = 8;
k_eTooBusy = 9;
k_eRateLimited = 10;
k_eCannotChangeWhileReady = 12;
k_eSlotTaken = 13;
}
optional .CMsgClientToGCPartyActionResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCPartySetMode {
optional fixed64 party_id = 1;
optional .ECitadelMatchMode match_mode = 2 [default = k_ECitadelMatchMode_Invalid];
optional .ECitadelGameMode game_mode = 3 [default = k_ECitadelGameMode_Invalid];
optional .ECitadelBotDifficulty bot_difficulty = 4 [default = k_ECitadelBotDifficulty_None];
optional string dev_server_command = 5;
optional .ECitadelRegionMode region_mode = 6 [default = k_ECitadelRegionMode_ROW];
}
message CMsgClientToGCPartySetModeResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eInvalidPartyID = 2;
k_eInvalidPermissions = 3;
k_ePlayerPermanentBanned = 4;
k_eInvalidValue = 5;
k_eInMatchMaking = 6;
k_eInMatch = 7;
k_eDisabled = 8;
k_eTooBusy = 9;
k_eRateLimited = 10;
k_eAlreadyDrafting = 11;
k_eCannotChangeWhileReady = 12;
k_eTooFewPlayers = 13;
k_eTooManyPlayers = 14;
k_ePlayerBanned = 15;
k_eTooManyHighMMR = 16;
k_eFiveStacksNotAllowed = 18;
}
optional .CMsgClientToGCPartySetModeResponse.EResponse result = 1 [default = k_eInternalError];
optional uint32 time_stamp = 2;
optional uint32 account_id = 3;
}
message CMsgClientToGCPartyStartMatch {
optional fixed64 party_id = 1;
}
message CMsgClientToGCPartyStartMatchResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 2;
k_eInvalidPartyID = 3;
k_eInvalidPermissions = 4;
k_eTooBusy = 5;
k_eInMatchmaking = 6;
k_eInMatch = 7;
k_eInvalidVersion = 10;
k_ePlayersNotReady = 11;
k_eCannotSelectRegion = 12;
k_eNotAllPlayersAvailable = 13;
k_eTooManyPlayersForMM = 14;
k_eTooManyPlayersForPrivate = 15;
k_eTooManySpectatorsForMM = 16;
k_eTooManySpectatorsForPrivate = 17;
k_eTooFewPlayersForMM = 18;
k_eTooFewPlayersForPrivate = 19;
k_eMismatchedVersions = 20;
k_eInvalidPartyMatchMode = 21;
k_ePlayerBannedFromMode = 22;
k_eTooManyPlayersOnTeam = 23;
k_eInvalidTeam = 24;
k_eInvalidHeroLineup = 25;
k_eInvalidGroupHeroLineup = 26;
k_eUnassignedPlayers = 27;
}
optional .CMsgClientToGCPartyStartMatchResponse.EResponse result = 1 [default = k_eInternalError];
optional uint32 account_id = 2;
}
message CMsgClientToGCPartyInviteUser {
optional fixed64 party_id = 1;
optional uint32 invite_account_id = 2;
}
message CMsgClientToGCPartyInviteUserResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eAlreadyInvited = 2;
k_eInvalidPermissions = 3;
k_eInvalidPartyID = 4;
k_eDisabled = 5;
k_eTooManyInvites = 6;
k_eNotFriends = 7;
k_eTooBusy = 8;
k_eRateLimited = 9;
k_eInvalidPartyMode = 10;
k_ePlayerDoesntHaveGame = 11;
}
optional .CMsgClientToGCPartyInviteUserResponse.EResponse result = 1 [default = k_eInternalError];
optional bool user_online = 2;
}
message CMsgGCToClientPartyEvent {
enum EEvent {
k_ePlayerKicked = 1;
k_eJoinedParty = 3;
k_eMatchCompleted = 4;
k_eMatchMakingStopped_User = 5;
k_eMatchMakingStopped_Version = 6;
k_eMatchMakingStopped_NoServerRegion = 7;
k_eLeftParty = 8;
k_eDeclinedInvite = 9;
k_eMatchMakingStopped_FailedOther = 10;
k_eDraftEnded_User = 11;
k_eStartDraftMMFailed = 12;
k_eMatchMakingStopped_Cancelled = 13;
}
optional fixed64 party_id = 1;
optional .CMsgGCToClientPartyEvent.EEvent event = 2 [default = k_ePlayerKicked];
optional uint32 initiator_account_id = 3;
optional uint32 target_account_id = 4;
optional bytes bytes_data = 5;
optional string str_data = 6;
optional uint64 uint_data = 7;
}
message CMsgGCToClientCanRejoinParty {
optional fixed64 party_id = 1;
}
message CMsgClientToGCPartyJoinViaCode {
optional uint64 join_code = 1;
optional .CMsgPartyMMInfo party_mm_info = 2;
}
message CMsgClientToGCPartyJoinViaCodeResponse {
optional .CMsgClientToGCPartyJoinResponse.EResponse result = 1 [default = k_eInternalError];
optional fixed64 party_id = 2;
}
message CMsgClientToGCPartyUpdateRoster {
optional fixed64 party_id = 1;
optional .CMsgHeroSelectionMatchInfo hero_roster = 2;
}
message CMsgClientToGCPartyUpdateRosterResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eInvalidPermissions = 2;
k_eDisabled = 3;
k_eTooBusy = 4;
k_eRateLimited = 5;
k_eInvalidRoster = 6;
k_eMatchForming = 7;
k_eInvalidGroupRoster = 8;
k_eHeroesNotUnlocked = 9;
}
optional .CMsgClientToGCPartyUpdateRosterResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCPartySetReadyState {
optional fixed64 party_id = 1;
optional bool ready_state = 2;
optional .CMsgHeroSelectionMatchInfo hero_roster = 3;
}
message CMsgClientToGCPartySetReadyStateResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eInvalidPermissions = 2;
k_eDisabled = 3;
k_eTooBusy = 4;
k_eRateLimited = 5;
k_eInvalidRoster = 6;
k_eMatchForming = 7;
k_eInvalidGroupRoster = 8;
k_eInMatch = 9;
k_eHeroesNotUnlocked = 10;
k_eModeLocked = 11;
k_eModeBanned = 12;
}
optional .CMsgClientToGCPartySetReadyStateResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCDevSetMMBias {
optional uint32 account_id = 1;
optional uint32 value = 2;
}
message CMsgClientToGCGetMatchHistory {
optional uint32 account_id = 1;
optional uint64 continue_cursor = 2;
}
message CMsgClientToGCGetMatchHistoryResponse {
message Match {
optional uint64 match_id = 1;
optional uint32 hero_id = 2;
optional uint32 match_duration_s = 3;
optional uint32 start_time = 4;
optional uint32 match_result = 5;
optional .ECitadelLobbyTeam player_team = 6 [default = k_ECitadelLobbyTeam_Team0];
optional uint32 player_kills = 7;
optional uint32 player_deaths = 8;
optional uint32 player_assists = 9;
optional uint32 last_hits = 11;
optional uint32 denies = 12;
optional uint32 hero_level = 13;
optional uint32 net_worth = 14;
optional uint64 objectives_mask_team0 = 15;
optional uint64 objectives_mask_team1 = 16;
optional bool team_abandoned = 17;
optional uint32 abandoned_time_s = 18;
}
enum EResult {
k_eResult_InternalError = 0;
k_eResult_Success = 1;
k_eResult_InvalidPermission = 2;
k_eResult_TemporarilyDisabled = 3;
k_eResult_TooBusy = 4;
k_eResult_RateLimited = 5;
}
optional .CMsgClientToGCGetMatchHistoryResponse.EResult result = 1 [default = k_eResult_InternalError];
optional uint64 continue_cursor = 2;
repeated .CMsgClientToGCGetMatchHistoryResponse.Match matches = 3;
}
message CMsgClientToGCSpectateUser {
optional uint32 spectate_account_id = 1;
optional .ECitadelRegionMode region_mode = 2 [default = k_ECitadelRegionMode_ROW];
optional uint32 client_version = 3;
optional .EGCPlatform client_platform = 4 [default = k_eGCPlatform_None];
}
message CMsgClientToGCSpectateUserResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 2;
k_eTooBusy = 3;
k_eRateLimited = 4;
k_eNotInGame = 5;
k_eDisabledForGame = 6;
k_eServerFull = 7;
k_eNotFriends = 8;
k_eRegionInfoNotProvided = 9;
k_eDurationControlBlocked = 10;
k_eInvalidClientVersion = 11;
k_eInvalidRegion = 12;
}
optional .CMsgClientToGCSpectateUserResponse.EResponse result = 1 [default = k_eInternalError];
optional fixed64 server_steam_id = 3;
optional bytes sdr_key = 4;
optional uint32 udp_connect_ip = 5;
optional uint32 udp_connect_port = 6;
optional fixed64 lobby_id = 7;
optional string client_broadcast_url = 8;
}
message CMsgClientToGCSpectateLobby {
optional uint64 lobby_id = 1;
optional .ECitadelRegionMode region_mode = 2 [default = k_ECitadelRegionMode_ROW];
optional uint32 client_version = 3;
optional .EGCPlatform client_platform = 4 [default = k_eGCPlatform_None];
}
message CMsgClientToGCSpectateLobbyResponse {
optional .CMsgClientToGCSpectateUserResponse result = 1;
}
message CMsgClientToGCGetProfileCard {
optional uint32 account_id = 1;
optional bool dev_access_hint = 2;
optional bool friend_access_hint = 3;
}
message CMsgCitadelProfileCard {
message Slot {
message Stat {
optional .CMsgCitadelProfileCard.EStatID stat_id = 1 [default = k_eStat_Invalid];
optional uint32 stat_score = 2;
}
message Hero {
optional uint32 hero_id = 1;
optional uint32 hero_wins = 2;
optional uint32 hero_kills = 3;
}
optional uint32 slot_id = 1;
optional .CMsgCitadelProfileCard.Slot.Stat stat = 2;
optional .CMsgCitadelProfileCard.Slot.Hero hero = 3;
}
enum EStatID {
k_eStat_Invalid = 0;
k_eStat_Wins = 1;
k_eStat_Kills = 2;
k_eStat_GamesPlayed = 3;
}
optional uint32 account_id = 1;
repeated .CMsgCitadelProfileCard.Slot slots = 2;
}
message CMsgClientToGCUpdateRoster {
optional .CMsgHeroSelectionMatchInfo heroes = 1;
optional .ECitadelGameMode game_mode = 2 [default = k_ECitadelGameMode_Invalid];
optional .ECitadelMatchMode match_mode = 3 [default = k_ECitadelMatchMode_Invalid];
optional bool solo_match = 4;
}
message CMsgClientToGCUpdateRosterResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 2;
k_eTooBusy = 3;
k_eRateLimited = 4;
k_eMMBusy = 5;
k_eInvalidHeroSelection = 6;
k_eHeroesNotUnlocked = 7;
}
optional .CMsgClientToGCUpdateRosterResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCGetAccountStats {
optional uint32 account_id = 1;
optional bool dev_access_hint = 2;
optional bool friend_access_hint = 3;
}
message CMsgClientToGCGetAccountStatsResponse {
enum EResult {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 2;
k_eTooBusy = 3;
k_eRateLimited = 4;
k_eInvalidPermissions = 5;
}
optional .CMsgClientToGCGetAccountStatsResponse.EResult result = 1 [default = k_eInternalError];
optional .CMsgAccountStats stats = 2;
}
message CMsgClientToGCGetMatchMetaData {
optional uint64 match_id = 1;
optional uint32 metadata_salt = 3;
optional uint32 target_account_id = 4;
}
message CMsgClientToGCGetMatchMetaDataResponse {
enum EResult {
k_eResult_InternalError = 0;
k_eResult_Success = 1;
k_eResult_InvalidPermission = 2;
k_eResult_TemporarilyDisabled = 3;
k_eResult_TooBusy = 4;
k_eResult_RateLimited = 5;
k_eResult_InvalidMatch = 6;
k_eResult_MatchInFlight = 7;
}
optional .CMsgClientToGCGetMatchMetaDataResponse.EResult result = 1 [default = k_eResult_InternalError];
optional uint32 replay_salt = 2;
optional uint32 metadata_salt = 3;
optional uint32 replay_valid_through = 4;
optional uint32 cluster_id = 5;
optional uint32 replay_processing_through = 6;
}
message CMsgGCToClientDevAnnouncements {
message Announcement {
optional uint32 priority = 1;
optional string title = 2;
optional string message = 3;
optional string url = 4;
optional uint32 unique_id = 5;
optional uint32 posted_time = 6;
optional string patch_version = 7;
}
repeated .CMsgGCToClientDevAnnouncements.Announcement announcements = 1;
}
message CMsgClientToGCModifyDevAnnouncements {
enum EOperation {
k_eCreate = 0;
k_eUpdate = 1;
k_eDelete = 2;
}
optional .CMsgClientToGCModifyDevAnnouncements.EOperation operation = 1 [default = k_eCreate];
optional uint32 target_id = 2;
optional uint32 priority = 3;
optional string title = 4;
optional string message = 5;
optional string url = 6;
optional string patch_version = 7;
}
message CMsgClientToGCModifyDevAnnouncementsResponse {
enum EResult {
k_eSuccess = 0;
k_eInvalidPermission = 1;
k_eInvalidTarget = 2;
k_eInternalError = 3;
}
optional .CMsgClientToGCModifyDevAnnouncementsResponse.EResult result = 1 [default = k_eSuccess];
}
message CMsgClientToGCDevAction {
enum EAction {
k_eSetDeveloper = 1;
k_eSetMMR = 2;
k_eSetMMRUncertainty = 3;
k_eSetHeroStatus = 4;
k_eSetPermission = 5;
k_eSetNewPlayerProgress = 6;
k_eForceAccountStorage = 7;
k_eBookReset = 9;
k_eBookXPGrant = 10;
k_eBanAccount = 11;
}
optional .CMsgClientToGCDevAction.EAction action = 1 [default = k_eSetDeveloper];
optional uint32 account_id = 2;
optional uint32 uint_value = 3;
optional int32 int_value = 4;
optional bool bool_value = 5;
optional string str_value = 6;
}
message CMsgClientToGCDevActionResponse {
enum EResult {
k_eSuccess = 0;
k_eInvalidPermission = 1;
k_eInvalidTarget = 2;
k_eInternalError = 3;
}
optional .CMsgClientToGCDevActionResponse.EResult result = 1 [default = k_eSuccess];
}
message CMsgClientToGCRecordClientEvents {
message Event {
optional uint32 time_stamp = 1;
optional .ECitadelClientAccountEvent event_id = 2 [default = k_eLaunchedHeroTest];
optional uint64 event_data = 3;
optional uint32 client_event_index = 4;
}
repeated .CMsgClientToGCRecordClientEvents.Event events = 1;
optional uint32 client_run_token = 2;
}
message CMsgClientToGCRecordClientEventsResponse {
optional bool success = 1;
}
message CMsgClientToGCSetNewPlayerProgress {
optional .ECitadelNewPlayerProgressFlag flag = 1 [default = k_eNewPlayerProgress_GettingStarted];
}
message CMsgClientToGCSetNewPlayerProgressResponse {
optional bool success = 1;
}
message CMsgClientToGCUpdateAccountSync {
repeated uint32 ids = 1;
repeated uint32 values = 2;
}
message CMsgClientToGCUpdateAccountSyncResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 2;
k_eTooBusy = 3;
k_eInvalidMessage = 4;
}
optional .CMsgClientToGCUpdateAccountSyncResponse.EResponse result = 1 [default = k_eInternalError];
}
message CMsgClientToGCGetHeroChoice {
}
message CMsgClientToGCGetHeroChoiceResponse {
message Hero {
optional uint32 hero_id = 1;
}
enum EResult {
k_eSuccess = 0;
k_eNoChoices = 1;
k_eInvalidTarget = 2;
k_eInternalError = 3;
k_eDisabled = 4;
k_eTooBusy = 5;
k_eChoiceClosed = 6;
}
optional .CMsgClientToGCGetHeroChoiceResponse.EResult result = 1 [default = k_eSuccess];
repeated .CMsgClientToGCGetHeroChoiceResponse.Hero hero_selections = 2;
optional uint32 hero_choice_id = 3;
optional uint32 select_count = 4;
}
message CMsgClientToGCUnlockHero {
repeated uint32 hero_ids = 1;
optional uint32 hero_choice_id = 2;
}
message CMsgClientToGCUnlockHeroResponse {
enum EResult {
k_eSuccess = 0;
k_eInternalError = 1;
k_eInvalidHero = 2;
k_eOutOfSync = 3;
k_eDisabled = 4;
k_eTooBusy = 5;
}
optional .CMsgClientToGCUnlockHeroResponse.EResult result = 1 [default = k_eSuccess];
}
message CMsgAccountBook {
message Unlock {
optional uint32 unlock_id = 1;
optional uint32 flags = 2;
}
optional uint32 book_id = 1;
optional uint32 book_xp = 2;
optional uint32 spent_xp = 3;
repeated .CMsgAccountBook.Unlock unlocks = 4;
}
message CMsgClientToGCBookUnlock {
optional uint32 book_id = 1;
optional uint32 unlock_id = 2;
optional uint32 expected_cost = 3;
optional uint32 client_version = 4;
}
message CMsgClientToGCBookUnlockResponse {
enum EResult {
k_eSuccess = 0;
k_eInternalError = 1;
k_eOutOfDateClient = 2;
k_eInvalidFunds = 3;
k_eDisabled = 4;
k_eTooBusy = 5;
k_eAlreadyUnlocked = 6;
}
optional .CMsgClientToGCBookUnlockResponse.EResult result = 1 [default = k_eSuccess];
optional .CMsgAccountBook updated_book = 2;
}
message CMsgClientToGCGetBook {
optional uint32 book_id = 1;
}
message CMsgClientToGCGetBookResponse {
enum EResult {
k_eSuccess = 0;
k_eInternalError = 1;
k_eInvalidBook = 2;
k_eDisabled = 3;
k_eTooBusy = 4;
}
optional .CMsgClientToGCGetBookResponse.EResult result = 1 [default = k_eSuccess];
optional .CMsgAccountBook book = 2;
}
message CMsgGCToClientBookUpdated {
optional .CMsgAccountBook book = 1;
}
message CMsgClientToGCSubmitPlaytestUser {
optional string location = 3;
optional uint32 target_account_id = 4;
}
message CMsgClientToGCSubmitPlaytestUserResponse {
enum EResponse {
eResponse_Success = 0;
eResponse_InternalError = 1;
eResponse_InvalidFriend = 3;
eResponse_NotFriendsLongEnough = 4;
eResponse_AlreadyHasGame = 5;
eResponse_LimitedUser = 6;
eResponse_InviteLimitReached = 7;
}
optional .CMsgClientToGCSubmitPlaytestUserResponse.EResponse response = 1 [default = eResponse_Success];
}
message CMsgHeroBuild {
message BuildModEntry {
optional uint32 ability_id = 1;
optional string annotation = 2;
}
message BuildModCategory {
repeated .CMsgHeroBuild.BuildModEntry mods = 1;
optional string name = 2;
optional string description = 3;
optional float width = 4;
optional float height = 5;
}
message CurrencyChange {
optional uint32 ability_id = 1;
optional int32 currency_type = 2;
optional int32 delta = 3;
optional string annotation = 4;
}
message AbilityOrder {
repeated .CMsgHeroBuild.CurrencyChange currency_changes = 1;
}
message Details_V0 {
repeated .CMsgHeroBuild.BuildModCategory mod_categories = 1;
optional .CMsgHeroBuild.AbilityOrder ability_order = 2;
}
optional uint32 hero_build_id = 1;
optional uint32 hero_id = 2;
optional uint32 author_account_id = 3;
optional uint32 last_updated_timestamp = 4;
optional string name = 5;
optional string description = 6;
optional uint32 language = 7;
optional uint32 version = 8;
optional uint32 origin_build_id = 9;
optional .CMsgHeroBuild.Details_V0 details = 10;
}
message CMsgClientToGCUpdateHeroBuild {
optional .CMsgHeroBuild hero_build = 1;
}
message CMsgClientToGCUpdateHeroBuildResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
}
optional .CMsgClientToGCUpdateHeroBuildResponse.EResponse response = 1 [default = k_eInternalError];
optional uint32 hero_build_id = 2;
optional uint32 version = 3;
}
message CMsgClientToGCFindHeroBuilds {
optional uint32 author_account_id = 1;
optional uint32 hero_id = 2;
repeated int32 language = 3;
optional string search_text = 4;
}
message CMsgHeroBuildPreference {
optional bool favorited = 1;
optional bool ignored = 2;
optional bool reported = 3;
}
message CMsgClientToGCFindHeroBuildsResponse {
message HeroBuildResult {
optional .CMsgHeroBuild hero_build = 1;
optional .CMsgHeroBuildPreference preference = 2;
optional uint32 num_favorites = 3;
optional uint32 num_ignores = 4;
optional uint32 num_reports = 5;
}
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
}
optional .CMsgClientToGCFindHeroBuildsResponse.EResponse response = 1 [default = k_eInternalError];
repeated .CMsgClientToGCFindHeroBuildsResponse.HeroBuildResult results = 2;
}
message CMsgClientToGCUpdateHeroBuildPreference {
optional uint32 hero_build_id = 1;
optional .CMsgHeroBuildPreference preference = 2;
}
message CMsgClientToGCUpdateHeroBuildPreferenceResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
}
optional .CMsgClientToGCUpdateHeroBuildPreferenceResponse.EResponse response = 1 [default = k_eInternalError];
}
message CMsgClientToGCGetOldHeroBuildData {
optional uint32 author_account_id = 1;
}
message CMsgClientToGCGetOldHeroBuildDataResponse {
message OldDetails_V0 {
repeated uint32 recommended_mod_ability_ids = 1;
}
message OldBuild {
optional string name = 1;
optional uint32 hero_id = 2;
optional string description = 3;
optional .CMsgClientToGCGetOldHeroBuildDataResponse.OldDetails_V0 details = 4;
}
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
}
optional .CMsgClientToGCGetOldHeroBuildDataResponse.EResponse response = 1 [default = k_eInternalError];
optional uint32 author_account_id = 2;
repeated .CMsgClientToGCGetOldHeroBuildDataResponse.OldBuild results = 3;
}
message CMsgClientToGCReportPlayerFromMatch {
enum EReportType {
k_eReport_None = 0;
k_eReport_VoiceChat = 1;
k_eReport_Griefing = 2;
k_eReport_LeftMatch = 3;
k_eReport_Matchmaking = 4;
}
optional uint64 match_id = 1;
optional uint32 target_account_id = 2;
optional .CMsgClientToGCReportPlayerFromMatch.EReportType report_type = 3 [default = k_eReport_None];
optional string report_text = 4;
}
message CMsgClientToGCReportPlayerFromMatchResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eRateLimited = 2;
k_eAlreadyReported = 3;
k_eDisabled = 4;
k_eInvalidPermissions = 5;
k_eReportingWindowExpired = 6;
k_eTooBusy = 7;
}
optional .CMsgClientToGCReportPlayerFromMatchResponse.EResponse response = 1 [default = k_eInternalError];
}
message CMsgClientToGCGetAccountMatchReports {
optional uint64 match_id = 1;
}
message CMsgClientToGCGetAccountMatchReportsResponse {
message Report {
optional uint32 account_id = 1;
}
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDisabled = 4;
k_eTooBusy = 7;
}
optional .CMsgClientToGCGetAccountMatchReportsResponse.EResponse response = 1 [default = k_eInternalError];
repeated .CMsgClientToGCGetAccountMatchReportsResponse.Report reports = 2;
}
message CMsgClientToGCDeleteHeroBuild {
optional uint32 author_account_id = 1;
optional uint32 hero_build_id = 2;
}
message CMsgClientToGCDeleteHeroBuildResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
}
optional .CMsgClientToGCDeleteHeroBuildResponse.EResponse response = 1 [default = k_eInternalError];
optional uint32 builds_deleted = 2;
}
message CMsgClientToGCGetActiveMatches {
}
message CMsgClientToGCGetActiveMatchesResponse {
repeated .CMsgDevMatchInfo active_matches = 1;
}
message CMsgClientToGCGetDiscordLink {
}
message CMsgClientToGCGetDiscordLinkResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eDiscordTooBusy = 2;
k_eAlreadyClaimed = 3;
k_eDisabled = 4;
}
optional .CMsgClientToGCGetDiscordLinkResponse.EResponse response = 1 [default = k_eInternalError];
optional string discord_link = 2;
optional uint32 valid_hours = 3;
}
message CMsgClientToGCGrantForumAccess {
optional string email = 1;
}
message CMsgClientToGCGrantForumAccessResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eAlreadyClaimed = 2;
k_eDisabled = 3;
k_eEmailUsed = 4;
}
optional .CMsgClientToGCGrantForumAccessResponse.EResponse response = 1 [default = k_eInternalError];
optional string email = 2;
optional string username = 3;
optional string forum_password = 4;
}
message CMsgClientToGCModeratorRequest {
optional uint32 account_id = 1;
}
message CMsgClientToGCModeratorRequestResponse {
optional bool success = 1;
repeated string response_text = 2;
}
message CMsgClientToGCGetFriendGameStatus {
optional bool include_invited = 1;
}
message CMsgClientToGCGetFriendGameStatusResponse {
enum EResponse {
k_eInternalError = 0;
k_eSuccess = 1;
k_eTooBusy = 2;
k_eDisabled = 3;
}
optional .CMsgClientToGCGetFriendGameStatusResponse.EResponse response = 1 [default = k_eInternalError];
repeated uint32 friends_played_game = 2 [packed = true];
repeated uint32 friends_invited = 3 [packed = true];
}
message CMsgClientToGCUpdateSpectatorStatus {
optional fixed64 spectating_lobby_id = 1;
optional bool stopped_spectating = 2;
}