summaryrefslogtreecommitdiff
path: root/game/shared/base_gcmessages.proto
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/base_gcmessages.proto')
-rw-r--r--game/shared/base_gcmessages.proto1031
1 files changed, 1031 insertions, 0 deletions
diff --git a/game/shared/base_gcmessages.proto b/game/shared/base_gcmessages.proto
new file mode 100644
index 0000000..3740b2d
--- /dev/null
+++ b/game/shared/base_gcmessages.proto
@@ -0,0 +1,1031 @@
+//====== 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 TF GC and TF 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 save 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";
+
+// Messages
+enum EGCBaseMsg
+{
+ k_EMsgGCSystemMessage = 4001; // broadcast announcements from the GC
+ k_EMsgGCReplicateConVars = 4002; // GC => client
+ k_EMsgGCConVarUpdated = 4003; // GC => client
+ //k_EMsgGCInQueue = 4008; // GC => client
+
+ // !GROSS! These have ben moved to gcsystemmsgs.proto. But I didn't reassign their number
+ //k_EMsgGCClientWelcome = 4004; // GC => client
+ //k_EMsgGCServerWelcome = 4005; // GC => server
+ //k_EMsgGCClientHello = 4006; // client => GC
+ //k_EMsgGCServerHello = 4007; // server => GC
+ //k_EMsgGCClientConnectionStatus = 4009; // GC => client
+ //k_EMsgGCServerConnectionStatus = 4010; // GC => server
+
+ // Matchmaking messages
+ k_EMsgGCInviteToParty = 4501; // inviting another player to your party
+ k_EMsgGCInvitationCreated = 4502; // sent from GC to sender
+ k_EMsgGCPartyInviteResponse = 4503; // client accepting a party invite
+ k_EMsgGCKickFromParty = 4504; // sent from party leader to GC to kick a player from the party
+ k_EMsgGCLeaveParty = 4505; // sent from party member to GC to leave a party
+ k_EMsgGCServerAvailable = 4506; // send from a dedicated server when its ready
+ k_EMsgGCClientConnectToServer = 4507; // sent to a client to connect to a server
+ k_EMsgGCGameServerInfo = 4508; // send from a dedicated server for server address information
+ k_EMsgGCError = 4509; // sent from GC to client telling client about an error
+ k_EMsgGCReplay_UploadedToYouTube = 4510; // client => GC
+ k_EMsgGCLANServerAvailable = 4511; // send from a listen server when its ready
+
+};
+
+//enum EGCSharedMsg = 7001-7006
+
+enum EGCBaseProtoObjectTypes
+{
+ k_EProtoObjectPartyInvite = 1001;
+ k_EProtoObjectLobbyInvite = 1002;
+};
+
+// Econ
+message CGCStorePurchaseInit_LineItem
+{
+ optional uint32 item_def_id = 1; // DefIndex of the item to purchase
+ optional uint32 quantity = 2; // quantity to purchase
+ optional uint32 cost_in_local_currency = 3; // cost in cents of the local currency the user thinks he should pay (if you change this update item_price_t!)
+ optional uint32 purchase_type = 4; // is this a regular purchase? a rental? maps to ECartItemType
+};
+
+// k_EMsgGCStorePurchaseInit
+message CMsgGCStorePurchaseInit
+{
+ optional string country = 1; // Country the purchase is being made from (obtained from Steam)
+ optional int32 language = 2; // Client's language
+ optional int32 currency = 3; // Currency the purchase is in (obtained from Steam)
+
+ repeated CGCStorePurchaseInit_LineItem line_items = 4;
+};
+
+// k_EMsgGCStorePurchaseInitResponse
+message CMsgGCStorePurchaseInitResponse
+{
+ optional int32 result = 1; // Result of the operation
+ optional uint64 txn_id = 2; // Transaction ID of the new transaction
+};
+
+
+// Shared objects
+
+//
+// CSOPartyInvite - sent from the GC to possible new party member
+//
+message CSOPartyInvite
+{
+ optional uint64 group_id = 1 [ (key_field) = true ];
+ optional fixed64 sender_id = 2;
+ optional string sender_name = 3;
+};
+
+// Sent from the GC to possible new lobby member
+//
+message CSOLobbyInvite
+{
+ optional uint64 group_id = 1 [ (key_field) = true ];
+ optional fixed64 sender_id = 2;
+ optional string sender_name = 3;
+ // TODO: Game mode, etc.
+};
+
+//
+// CMsgSystemBroadcast
+//
+message CMsgSystemBroadcast
+{
+ optional string message = 1; // the message to display on the client
+};
+
+//
+// CMsgClientHello
+//
+message CMsgClientHello
+{
+ optional uint32 version = 1;
+};
+
+//
+// CMsgServerHello
+//
+message CMsgServerHello
+{
+ optional uint32 version = 1;
+};
+
+//
+// CMsgClientWelcome
+//
+message CMsgClientWelcome
+{
+ optional uint32 version = 1;
+ optional bytes game_data = 2;
+};
+
+//
+// CMsgServerWelcome
+//
+message CMsgServerWelcome
+{
+ optional uint32 min_allowed_version = 1;
+ optional uint32 active_version = 2;
+};
+
+enum GCGoodbyeReason
+{
+ GCGoodbyeReason_GC_GOING_DOWN = 1;
+ GCGoodbyeReason_NO_SESSION = 2;
+};
+
+//
+// CMsgClientGoodbye
+//
+message CMsgClientGoodbye
+{
+ optional GCGoodbyeReason reason = 1;
+};
+
+//
+// CMsgServerGoodbye
+//
+message CMsgServerGoodbye
+{
+ optional GCGoodbyeReason reason = 1;
+};
+
+//
+// CMsgInviteToParty - sent from party leader to the GC
+//
+message CMsgInviteToParty
+{
+ optional fixed64 steam_id = 1;
+ optional uint32 client_version = 2;
+ optional uint32 team_id = 3;
+ optional bool as_coach = 4;
+};
+
+
+//
+// CMsgInvitationCreated - sent from GC to the party leader
+//
+message CMsgInvitationCreated
+{
+ optional uint64 group_id = 1;
+ optional fixed64 steam_id = 2;
+};
+
+
+//
+// CMsgPartyInviteResponse - sent from client to GC when accepting/rejecting a CMsgPartyInvite
+//
+message CMsgPartyInviteResponse
+{
+ optional uint64 party_id = 1;
+ optional bool accept = 2;
+ optional uint32 client_version = 3;
+ optional uint32 team_id = 4;
+ optional bool as_coach = 5;
+};
+
+
+//
+// CMsgKickFromParty - sent from party leader to the GC
+//
+message CMsgKickFromParty
+{
+ optional fixed64 steam_id = 1;
+};
+
+//
+// CMsgLeaveParty - sent from party member to the GC
+//
+message CMsgLeaveParty
+{
+ optional uint64 party_id = 1; // Party the user wants to leave
+ optional uint64 lobby_id = 2; // Lobby the user wants to leave
+};
+
+//
+// CMsgServerAvailable - send from a dedicated server to the GC to indicate availability
+//
+message CMsgServerAvailable
+{
+};
+
+//
+// CMsgLANServerAvailable - send from a listen server to the GC to indicate availability
+//
+message CMsgLANServerAvailable
+{
+ optional fixed64 lobby_id = 1;
+};
+
+
+//
+// Used by CEconGameAccountClient
+//
+message CSOEconGameAccountClient
+{
+ optional uint32 additional_backpack_slots = 1 [ default = 0 ]; // the number of backpack slots this user has on top of DEFAULT_NUM_BACKPACK_SLOTS
+ optional bool trial_account = 2 [ default = false ];
+// optional bool eligible_for_online_play = 3 [ default = true ]; // DEPRECATED
+ optional bool need_to_choose_most_helpful_friend = 4;
+ optional bool in_coaches_list = 5;
+ optional fixed32 trade_ban_expiration = 6;
+ optional fixed32 duel_ban_expiration = 7;
+ optional uint32 preview_item_def = 8 [ default = 0 ];
+// optional bool eligible_for_community_market = 9; // DEPRECATED
+ optional bool phone_verified = 19 [ default = false ];
+ optional uint32 skill_rating_6v6 = 20;
+ optional uint32 skill_rating_9v9 = 21;
+// optional bool two_factor_enabled = 22 [ default = false ]; // No longer shared with clients
+ optional bool competitive_access = 23 [ default = false ];
+ // !! 18 out of order slightly to be more properly grouped with the various ban fields
+ optional uint32 matchmaking_ranked_ban_expiration = 18; // player can't matchmake in ranked groups until this time
+ optional uint32 matchmaking_ranked_low_priority_expiration = 24; // MM low priority in ranked groups until
+ optional uint32 matchmaking_ranked_ban_last_duration = 25; // How long the current ranked ban's total duration was set for
+ optional uint32 matchmaking_ranked_low_priority_last_duration = 26; // How long the current ranked ban's total duration was set for
+ optional uint32 matchmaking_casual_ban_expiration = 27; // player can't matchmake in casual groups until this time
+ optional uint32 matchmaking_casual_low_priority_expiration = 28; // MM low priority in casual groups until
+ optional uint32 matchmaking_casual_ban_last_duration = 29; // How long the current casual ban's total duration was set for
+ optional uint32 matchmaking_casual_low_priority_last_duration = 30; // How long the current casual ban's total duration was set for
+ optional bool phone_identifying = 31 [ default = false ];
+};
+
+//
+// Used by CEconCraftingRecipe
+//
+message CSOItemCriteriaCondition
+{
+ optional int32 op = 1;
+ optional string field = 2;
+ optional bool required = 3;
+ optional float float_value = 4;
+ optional string string_value = 5;
+}
+
+
+message CSOItemCriteria
+{
+ optional uint32 item_level = 1;
+ optional int32 item_quality = 2;
+
+ optional bool item_level_set = 3;
+ optional bool item_quality_set = 4;
+ optional uint32 initial_inventory = 5;
+ optional uint32 initial_quantity = 6;
+// optional bool forced_quality_match__DEPRECATED = 7;
+ optional bool ignore_enabled_flag = 8;
+
+ repeated CSOItemCriteriaCondition conditions = 9;
+
+ optional bool recent_only = 10;
+ optional string tags = 11;
+};
+
+
+message CSOItemRecipe
+{
+ optional uint32 def_index = 1;
+ optional string name = 2;
+ optional string n_a = 3;
+ optional string desc_inputs = 4;
+ optional string desc_outputs = 5;
+ optional string di_a = 6;
+ optional string di_b = 7;
+ optional string di_c = 8;
+ optional string do_a = 9;
+ optional string do_b = 10;
+ optional string do_c = 11;
+ optional bool requires_all_same_class = 12;
+ optional bool requires_all_same_slot = 13;
+ optional int32 class_usage_for_output = 14;
+ optional int32 slot_usage_for_output = 15;
+ optional int32 set_for_output = 16;
+
+ repeated CSOItemCriteria input_items_criteria = 20;
+ repeated CSOItemCriteria output_items_criteria = 21;
+ repeated uint32 input_item_dupe_counts = 22;
+};
+
+//
+// k_EMsgGCDev_NewItemRequest
+//
+message CMsgDevNewItemRequest
+{
+ //using fixed64 since steamids have lots of entropy in their bits
+ optional fixed64 receiver = 1;
+ optional CSOItemCriteria criteria = 2;
+};
+
+//
+// k_EMsgGCDev_DebugRollLootRequest
+//
+message CMsgDevDebugRollLootRequest
+{
+ //using fixed64 since steamids have lots of entropy in their bits
+ optional fixed64 receiver = 1;
+ optional string loot_list_name = 2;
+};
+
+//
+// k_EMsgGC_IncrementKillCountAttribute
+//
+message CMsgIncrementKillCountAttribute
+{
+ optional uint64 killer_steam_id = 1; // Kyle says: we could make these both fixed32!
+ optional uint64 victim_steam_id = 2;
+ optional uint64 item_id = 3;
+
+ optional uint32 event_type = 4;
+ optional uint32 increment_value = 5; // How much to increment the score by
+};
+
+//
+// k_EMsgGC_IncrementKillCountAttribute_Multiple
+//
+message CMsgIncrementKillCountAttribute_Multiple
+{
+ repeated CMsgIncrementKillCountAttribute msgs = 1;
+};
+
+//
+// k_EMsgGC_TrackUniquePlayerPairEvent
+//
+message CMsgTrackUniquePlayerPairEvent
+{
+ optional uint64 killer_steam_id = 1; // Kyle says: we could make these both fixed32!
+ optional uint64 victim_steam_id = 2;
+ optional uint64 item_id = 3;
+
+ optional uint32 event_type = 4;
+};
+
+//
+// k_EMsgGCApplyStrangeCountTransfer
+//
+
+message CMsgApplyStrangeCountTransfer
+{
+ optional uint64 tool_item_id = 1; // item id of the xfer tool
+ optional uint64 item_src_item_id = 2;
+ optional uint64 item_dest_item_id = 3;
+};
+
+//
+// k_EMsgGCApplyStrangePart
+//
+message CMsgApplyStrangePart
+{
+ optional uint64 strange_part_item_id = 1; // which part are we "inserting"?
+ optional uint64 item_item_id = 2; // what strange item are we inserting this new part into?
+};
+
+//
+// k_EMsgGCApplyStrangeRestriction
+//
+message CMsgApplyStrangeRestriction
+{
+ optional uint64 strange_part_item_id = 1; // which restriction item are we "inserting"?
+ optional uint64 item_item_id = 2; // what strange item are we inserting this new part into?
+ optional uint32 strange_attr_index = 3; // which slot did the user select for application?
+};
+
+//
+// k_EMsgGCApplyUpgradeCard
+//
+message CMsgApplyUpgradeCard
+{
+ optional uint64 upgrade_card_item_id = 1; // which card are we attaching?
+ optional uint64 subject_item_id = 2; // what item are we applying this new card to?
+};
+
+//
+// Used by CEconItem
+//
+message CSOEconItemAttribute
+{
+ optional uint32 def_index = 1;
+ optional uint32 value = 2; // DEPRECATED -- see value_bytes
+ optional bytes value_bytes = 3;
+}
+
+message CSOEconItemEquipped
+{
+ optional uint32 new_class = 1;
+ optional uint32 new_slot = 2;
+}
+
+message CSOEconItem
+{
+ optional uint64 id = 1;
+ optional uint32 account_id = 2;
+ optional uint32 inventory = 3;
+ optional uint32 def_index = 4;
+ optional uint32 quantity = 5;
+ optional uint32 level = 6;
+ optional uint32 quality = 7;
+ optional uint32 flags = 8 [ default = 0 ];
+ optional uint32 origin = 9;
+ optional string custom_name = 10;
+ optional string custom_desc = 11;
+ repeated CSOEconItemAttribute attribute = 12;
+ optional CSOEconItem interior_item = 13;
+ optional bool in_use = 14 [ default = false ];
+ optional uint32 style = 15 [default = 0 ];
+ optional uint64 original_id = 16 [ default = 0 ];
+ optional bool contains_equipped_state = 17; // DEPRECATED
+ repeated CSOEconItemEquipped equipped_state = 18;
+ optional bool contains_equipped_state_v2 = 19; // will be set to true even if equipped_state is an empty array, meaning "unequipped from everything"
+}
+
+//
+// k_EMsgGCAdjustItemEquippedState
+//
+message CMsgAdjustItemEquippedState
+{
+ optional uint64 item_id = 1;
+ optional uint32 new_class = 2;
+ optional uint32 new_slot = 3; // will be -1 if not equipped on this class any longer
+}
+
+//
+// k_EMsgGCSortItems
+//
+message CMsgSortItems
+{
+ optional uint32 sort_type = 1;
+}
+
+//
+// Used by CEconClaimCode
+//
+message CSOEconClaimCode
+{
+ optional uint32 account_id = 1;
+ optional uint32 code_type = 2;
+ optional uint32 time_acquired = 3;
+ optional string code = 4;
+}
+
+//
+// k_EMsgGCStoreGetUserData
+//
+message CMsgStoreGetUserData
+{
+ optional fixed32 price_sheet_version = 1;
+}
+
+
+//
+// k_EMsgGCStoreGetUserDataResponse
+//
+message CMsgStoreGetUserDataResponse
+{
+ optional int32 result = 1; // Result of the call
+ optional int32 currency = 2; // Currency to display to the user
+ optional string country = 3; // Country the purchase is being made from (Send back in k_EMsgGCStorePurchaseInit)
+
+ optional fixed32 price_sheet_version = 4; // Version of the current price sheet on the GC
+
+ // experiments
+ optional uint64 experiment_data = 5 [ default = 0 ]; // top 32 bits = experiment id, bottom 32 bits = experiment group number
+ optional int32 featured_item_idx = 6;
+ optional bool show_hat_descriptions = 7 [ default = true ];
+
+ // Serialized KV representing the price sheet menu
+ optional bytes price_sheet = 8;
+
+ optional int32 default_item_sort = 9 [ default = 0 ];
+
+ // popular items by def
+ repeated uint32 popular_items = 10;
+};
+
+//
+// k_EMsgGCUpdateItemSchema
+//
+message CMsgUpdateItemSchema
+{
+ optional bytes items_game = 1; // actual contents of items_game.txt (only used on dev)
+ optional fixed32 item_schema_version = 2; // Version of the items_game.txt we're using
+ optional string items_game_url = 3; // HTTP URL where they can use to fetch the one we're using, if theirs is out of date and we don't send the contents
+ optional bytes signature = 4; // signature of the schema (either the one at the CDN, or the bytes we are providing). In certain branches (TF) this is required.
+};
+
+// sent from the GC to a client telling him about a GC error
+message CMsgGCError
+{
+ optional string error_text = 1;
+};
+
+//
+// k_EMsgGCRequestInventoryRefresh
+//
+message CMsgRequestInventoryRefresh
+{
+};
+
+//
+// k_EMsgGCConvarUpdated
+//
+message CMsgConVarValue
+{
+ optional string name = 1;
+ optional string value = 2;
+};
+
+//
+// k_EMsgGCReplicateConVars
+//
+message CMsgReplicateConVars
+{
+ repeated CMsgConVarValue convars = 1;
+};
+
+//
+// k_EMsgGCUseItemRequest
+//
+message CMsgUseItem
+{
+ optional uint64 item_id = 1;
+ optional fixed64 target_steam_id = 2; // 64-bit field left over from original message
+
+ repeated uint32 gift__potential_targets = 3;
+ optional uint32 duel__class_lock = 4;
+ optional fixed64 initiator_steam_id = 5;
+ optional bool itempack__ack_immediately = 6;
+};
+
+//
+// k_EMsgGCReplay_UploadedToYouTube
+//
+message CMsgReplayUploadedToYouTube
+{
+ optional string youtube_url = 1;
+ optional string youtube_account_name = 2;
+ optional uint64 session_id = 3;
+};
+
+//
+// k_EMsgGCConsumableExhausted
+//
+message CMsgConsumableExhausted
+{
+ optional int32 item_def_id = 1;
+};
+
+//
+// k_EMsgGCItemAcknowledged
+//
+message CMsgItemAcknowledged
+{
+ optional uint32 account_id = 1;
+ optional uint32 inventory = 2;
+ optional uint32 def_index = 3;
+ optional uint32 quality = 4;
+ optional uint32 rarity = 5;
+ optional uint32 origin = 6;
+ optional uint32 is_strange = 7;
+ optional uint32 is_unusual = 8;
+ optional float wear = 9;
+};
+
+//
+// CMsgSetPresetItemPosition
+//
+message CMsgSetPresetItemPosition
+{
+ optional uint32 class_id = 1;
+ optional uint32 preset_id = 2;
+ optional uint32 slot_id = 3;
+ optional uint64 item_id = 4;
+};
+
+//
+// CMsgSetItemPositions
+//
+message CMsgSetItemPositions
+{
+ message ItemPosition
+ {
+ optional uint64 item_id = 1;
+ optional uint32 position = 2;
+ }
+
+ repeated ItemPosition item_positions = 1;
+};
+
+//
+// CSOEconItemPresetInstance - The preset, class and slot ID's are all marked key fields, so that those
+// fields will always be networked down to clients, even if only the item ID is modified. This is so that
+// when CSharedObjectTypeCache::BUpdateFromMsg() calls its FindSharedObject(), it will have the necessary
+// key data for CEconItemPresetInstance::BIsKeyLess() to be able to function. Without these, FindSharedObject()
+// fails and no object is updated.
+//
+message CSOEconItemPresetInstance
+{
+// optional uint32 account_id = 1; // NOTE: Never use id '1' again - but we don't need to transmit the account id here
+ optional uint32 class_id = 2 [ (key_field) = true ];
+ optional uint32 preset_id = 3 [ (key_field) = true ];
+ optional uint32 slot_id = 4 [ (key_field) = true ];
+ optional uint64 item_id = 5;
+};
+
+//
+// k_EMsgGCPresets_SelectPresetForClass
+//
+message CMsgSelectPresetForClass
+{
+ optional uint32 class_id = 1; // which class we're changing the selection on
+ optional uint32 preset_id = 2; // which preset we want to change to
+};
+
+//
+// CSOClassPresetClientData
+//
+message CSOClassPresetClientData
+{
+ optional uint32 account_id = 1;
+ optional uint32 class_id = 2;
+ optional uint32 active_preset_id = 3;
+};
+
+//
+// k_EMsgGC_ReportAbuse
+//
+message CMsgGCReportAbuse
+{
+ optional fixed64 target_steam_id = 1; // who is the user accusing?
+
+ optional string description = 4; // in the user's own words
+ optional uint64 gid = 5; // meaning depends on content type
+
+ // If accusing a player:
+ optional uint32 abuse_type = 2; // EAbuseReportType
+ optional uint32 content_type = 3; // ECommunityContentType
+
+ // If accusing a game server:
+ optional fixed32 target_game_server_ip = 6;
+ optional uint32 target_game_server_port = 7;
+};
+
+//
+// k_EMsgGC_ReportAbuseResponse
+//
+message CMsgGCReportAbuseResponse
+{
+ optional fixed64 target_steam_id = 1; // target to which this reply is in reference
+ optional uint32 result = 2; // EResult
+ optional string error_message = 3; // Diagnostic error message (not localized, for debugging purposes only)
+};
+
+//
+// k_EMsgGCNameItemNotification
+//
+message CMsgGCNameItemNotification
+{
+ optional fixed64 player_steamid = 1;
+ optional uint32 item_def_index = 2;
+ optional string item_name_custom = 3;
+};
+
+//
+// k_EMsgGCClientDisplayNotification
+//
+message CMsgGCClientDisplayNotification
+{
+ optional string notification_title_localization_key = 1;
+ optional string notification_body_localization_key = 2;
+ repeated string body_substring_keys = 3;
+ repeated string body_substring_values = 4;
+};
+
+//
+// k_EMsgGCShowItemsPickedUp
+//
+message CMsgGCShowItemsPickedUp
+{
+ optional fixed64 player_steamid = 1;
+};
+
+//
+// k_EMsgGC_UpdatePeriodicEvent
+//
+message CMsgUpdatePeriodicEvent
+{
+ optional uint32 account_id = 1;
+ optional uint32 event_type = 2;
+ optional uint32 amount = 3;
+};
+
+//
+// k_EMsgGCIncrementKillCountResponse
+//
+message CMsgGCIncrementKillCountResponse // was CMsgTFIncrementKillCountResponse
+{
+ optional uint32 killer_account_id = 1 [ (key_field) = true ]; // name of the user who got the kill
+ optional uint32 num_kills = 2; // number of kills (or: ubers released; or gifts given out; etc.)
+ optional uint32 item_def = 3; // id of the item in question
+ optional uint32 level_type = 4; // what sort of rank is this? (ie., kills, gifts, etc.) used for looking up strings
+};
+
+//
+// k_EMsgGCRemoveStrangePart
+//
+message CMsgGCRemoveStrangePart
+{
+ optional uint64 item_id = 1; // ID of the item we're removing a part from
+ optional uint32 strange_part_score_type = 2; // score type counted by the strange part we want to remove -- it doesn't matter what slot this part is in or what item def it came from as each item can only have one counter of each type
+};
+
+//
+// k_EMsgGCRemoveUpgradeCard
+//
+message CMsgGCRemoveUpgradeCard
+{
+ optional uint64 item_id = 1; // ID of the item we're removing a part from
+ optional uint32 attribute_index = 2; // the attribute index of the attribute we want to remove; this is only valid if the attribute is set to be user-customizable
+};
+
+//
+// k_EMsgGCRemoveItemPaint
+// k_EMsgGCRemoveCustomTexture
+// k_EMsgGCRemoveMakersMark
+//
+message CMsgGCRemoveCustomizationAttributeSimple
+{
+ optional uint64 item_id = 1;
+};
+
+//
+// k_EMsgGCResetStrangeScores
+//
+message CMsgGCResetStrangeScores
+{
+ optional uint64 item_id = 1;
+};
+
+//
+// k_EMsgGCItemPreviewItemBoughtNotification
+//
+message CMsgGCItemPreviewItemBoughtNotification
+{
+ optional uint32 item_def_index = 1;
+};
+
+//
+// k_EMsgGCStorePurchaseCancel
+//
+message CMsgGCStorePurchaseCancel
+{
+ optional uint64 txn_id = 1; // Transaction ID for the the transaction
+};
+
+//
+// k_EMsgGCStorePurchaseCancelResponse
+//
+message CMsgGCStorePurchaseCancelResponse
+{
+ optional uint32 result = 1; // Result of the operation
+};
+
+//
+// k_EMsgGCStorePurchaseFinalize
+//
+message CMsgGCStorePurchaseFinalize
+{
+ optional uint64 txn_id = 1; // Transaction ID for the the transaction
+};
+
+//
+// k_EMsgGCStorePurchaseFinalizeResponse
+//
+message CMsgGCStorePurchaseFinalizeResponse
+{
+ optional uint32 result = 1; // Result of the operation
+ repeated uint64 item_ids = 2; // If successful, list of uint64's that represent the purchased items
+};
+
+// k_EMsgGCBannedWordListRequest
+message CMsgGCBannedWordListRequest
+{
+ optional uint32 ban_list_group_id = 1; // The group code to request the word list from (English, Chinese, etc)
+ optional uint32 word_id = 2; // The most recent word ID that we want to request (the response will include this ID if present)
+};
+
+//
+// k_EMsgGCGiftedItems
+//
+message CMsgGCGiftedItems
+{
+ optional uint64 gifter_steam_id = 1;
+ optional bool was_random_person = 2;
+ repeated uint32 recipient_account_ids = 3;
+};
+
+//
+// k_EMsgGCCollectItem
+//
+message CMsgGCCollectItem
+{
+ optional uint64 collection_item_id = 1;
+ optional uint64 subject_item_id = 2;
+};
+
+//
+// k_EMsgGCClientRequestMarketData
+//
+message CMsgGCClientMarketDataRequest
+{
+ optional uint32 user_currency = 1;
+};
+
+//
+// k_EMsgGCClientRequestMarketDataResponse
+//
+message CMsgGCClientMarketDataEntry
+{
+ optional uint32 item_def_index = 1;
+ optional uint32 item_quality = 2;
+
+ optional uint32 item_sell_listings = 3;
+ optional uint32 price_in_local_currency = 4;
+};
+
+message CMsgGCClientMarketData
+{
+ repeated CMsgGCClientMarketDataEntry entries = 1;
+};
+
+//
+// k_EMsgGCApplyStrangifier
+// k_EMsgGCUseItemEaterRecharger
+//
+message CMsgApplyToolToItem
+{
+ optional uint64 tool_item_id = 1; // which item tool are we using
+ optional uint64 subject_item_id = 2; // what item are we applying this tool to?
+};
+
+message CMsgApplyToolToBaseItem
+{
+ optional uint64 tool_item_id = 1; // which item tool are we using
+ optional uint32 baseitem_def_index = 2; // which base item def index are we applying this tool to?
+};
+
+message CMsgRecipeComponent
+{
+ optional uint64 subject_item_id = 1;
+ optional uint64 attribute_index = 2;
+};
+
+//
+// k_EMsgGCFulfillDynamicRecipeComponent
+//
+message CMsgFulfillDynamicRecipeComponent
+{
+ optional uint64 tool_item_id = 1; // which item tool are we using
+ repeated CMsgRecipeComponent consumption_components = 2; // Items to consume
+};
+
+//
+// k_EMsgGCSetItemEffectVerticalOffset
+//
+message CMsgSetItemEffectVerticalOffset
+{
+ optional uint64 item_id = 1;
+ optional float offset = 2;
+};
+
+//
+// k_EMsgGCSetHatEffectUseHeadOrigin
+//
+message CMsgSetHatEffectUseHeadOrigin
+{
+ optional uint64 item_id = 1;
+ optional bool use_head = 2;
+};
+
+//
+// k_EMsgGCDeliverGiftResponseGiver
+//
+message CMsgDeliverGiftResponseGiver
+{
+ optional uint32 response_code = 1;
+ optional string receiver_account_name = 2; // will only be set if found and if the user wasn't specifically selected
+};
+
+//
+// Used by CEconGameAccountClientForGameServers
+//
+message CSOEconGameAccountForGameServers
+{
+ // Deprecated.
+ // optional uint32 skill_rating = 3;
+ // optional uint32 skill_rating_6v6 = 2;
+ // optional uint32 skill_rating_9v9 = 4;
+ // optional uint32 skill_rating_12v12 = 5;
+};
+
+// ================================================================================================
+// ================================================================================================
+// PROTOBUF DEFINITIONS COPIED FROM STEAM
+// ================================================================================================
+// ================================================================================================
+
+message CWorkshop_PopulateItemDescriptions_Request
+{
+ message SingleItemDescription
+ {
+ optional uint32 gameitemid = 1;
+ optional string item_description = 2;
+ }
+
+ message ItemDescriptionsLanguageBlock
+ {
+ optional string language = 1; // ICU name
+ repeated SingleItemDescription descriptions = 2;
+ }
+
+ optional uint32 appid = 1;
+ repeated ItemDescriptionsLanguageBlock languages = 2;
+}
+
+message CWorkshop_GetContributors_Request
+{
+ optional uint32 appid = 1;
+ optional uint32 gameitemid = 2;
+}
+
+message CWorkshop_GetContributors_Response
+{
+ repeated fixed64 contributors = 1;
+}
+
+// ------------------------------------------------------------------------------------------------
+
+message CWorkshop_SetItemPaymentRules_Request
+{
+ message WorkshopItemPaymentRule
+ {
+ optional uint64 workshop_file_id = 1;
+ optional float revenue_percentage = 2;
+ optional string rule_description = 3;
+ }
+
+ message PartnerItemPaymentRule
+ {
+ optional uint32 account_id = 1;
+ optional float revenue_percentage = 2;
+ optional string rule_description = 3;
+ }
+
+ optional uint32 appid = 1;
+ optional uint32 gameitemid = 2;
+ repeated WorkshopItemPaymentRule associated_workshop_files = 3;
+ repeated PartnerItemPaymentRule partner_accounts = 4;
+
+}
+
+message CWorkshop_SetItemPaymentRules_Response
+{
+}
+
+// Don�t remove this line at the end of the file due a bug in the Mac OS X protobuf compiler