overlook-csgo 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +2 -0
  3. data/.gitignore +5 -0
  4. data/.rspec +2 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +3 -0
  7. data/Gemfile.lock +115 -0
  8. data/README.md +77 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +7 -0
  11. data/bin/setup +7 -0
  12. data/lib/overlook.rb +20 -0
  13. data/lib/overlook/bit_buffer.rb +52 -0
  14. data/lib/overlook/bit_reader.rb +64 -0
  15. data/lib/overlook/byte_reader.rb +58 -0
  16. data/lib/overlook/csgo.rb +9 -0
  17. data/lib/overlook/csgo/demo.rb +33 -0
  18. data/lib/overlook/csgo/demo/base.rb +20 -0
  19. data/lib/overlook/csgo/demo/command.rb +67 -0
  20. data/lib/overlook/csgo/demo/command_factory.rb +15 -0
  21. data/lib/overlook/csgo/demo/encrypted_data_handler.rb +16 -0
  22. data/lib/overlook/csgo/demo/game_event_list_message_handler.rb +19 -0
  23. data/lib/overlook/csgo/demo/game_event_message_handler.rb +35 -0
  24. data/lib/overlook/csgo/demo/header.rb +45 -0
  25. data/lib/overlook/csgo/demo/key_reader.rb +18 -0
  26. data/lib/overlook/csgo/demo/packet.rb +16 -0
  27. data/lib/overlook/csgo/demo/packet_factory.rb +22 -0
  28. data/lib/overlook/csgo/demo/packet_handler.rb +50 -0
  29. data/lib/overlook/csgo/demo/parser.rb +66 -0
  30. data/lib/overlook/csgo/demo/user_message_message_handler.rb +43 -0
  31. data/lib/overlook/csgo/match_info_decoder.rb +92 -0
  32. data/lib/overlook/csgo/sharecode_decoder.rb +83 -0
  33. data/lib/overlook/version.rb +3 -0
  34. data/lib/proto/.gitkeep +0 -0
  35. data/lib/proto/compiled/cstrike15_gcmessages.pb.rb +1382 -0
  36. data/lib/proto/compiled/cstrike15_usermessages.pb.rb +702 -0
  37. data/lib/proto/compiled/descriptor.pb.rb +280 -0
  38. data/lib/proto/compiled/netmessages.pb.rb +687 -0
  39. data/lib/proto/compiled/steammessages.pb.rb +798 -0
  40. data/overlook-csgo.gemspec +36 -0
  41. metadata +209 -0
@@ -0,0 +1,43 @@
1
+ require 'steamidlib'
2
+
3
+ module Overlook
4
+ module Csgo
5
+ module Demo
6
+ class UserMessageMessageHandler
7
+ include SteamIDs
8
+
9
+ SERVER_RANK_UPDATE_MESSAGE_TYPE = 52
10
+ XP_UPDATE_MESSAGE_TYPE = 65
11
+
12
+ def initialize(parser)
13
+ @parser = parser
14
+ end
15
+
16
+ def handle(message)
17
+ user_message = CSVCMsg_UserMessage.decode(message)
18
+
19
+ case user_message.msg_type
20
+ when XP_UPDATE_MESSAGE_TYPE
21
+ xp_update_message = CCSUsrMsg_XpUpdate.decode(user_message.msg_data)
22
+
23
+ community_id = SteamID32.parse("[U:1:#{xp_update_message.data.account_id}]").to_steamID64.to_s
24
+ xp_update_message.data.xp_progress_data.each do |update|
25
+ # wip
26
+ end
27
+ when SERVER_RANK_UPDATE_MESSAGE_TYPE
28
+ server_rank_update_message = CCSUsrMsg_ServerRankUpdate.decode(user_message.msg_data)
29
+
30
+ server_rank_update_message.rank_update.each do |update|
31
+ # The account_id is used in the 'modern' steam format.
32
+ # [U:1:account_id]
33
+ community_id = SteamID32.parse("[U:1:#{update.account_id}]").to_steamID64.to_s
34
+
35
+ @parser.emit(:rank_update,
36
+ { community_id: community_id, rank: update.rank_new })
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,92 @@
1
+ require 'stringio'
2
+ require 'steamidlib'
3
+
4
+ module Overlook
5
+ module Csgo
6
+ class MatchInfoDecoder
7
+ include SteamIDs
8
+
9
+ def initialize
10
+ end
11
+
12
+ def decode(io)
13
+ match = CDataGCCStrike15_v2_MatchInfo.decode(io.read)
14
+
15
+ decoded = {}
16
+ decoded.merge!(extract_match_meta(match))
17
+ decoded.merge!(extract_replay_info(match))
18
+ decoded.merge!(extract_stats(match))
19
+ decoded.merge!(extract_end_results(match))
20
+ decoded
21
+ end
22
+
23
+ private
24
+
25
+ # 1 - T
26
+ # 2 - CT
27
+ def extract_end_results(match)
28
+ official_results = match.roundstatsall.last.to_hash
29
+
30
+ winner = official_results[:match_result]
31
+
32
+ results = {
33
+ winner: winner,
34
+ score: official_results[:team_scores],
35
+ duration: official_results[:match_duration]
36
+ }
37
+
38
+ { results: results }
39
+ end
40
+
41
+ def extract_match_meta(match)
42
+ {
43
+ match: {
44
+ matchid: match.matchid.to_s,
45
+ matchtime: match.matchtime
46
+ }
47
+ }
48
+ end
49
+
50
+ def extract_replay_info(match)
51
+ {
52
+ replay: {
53
+ ip: match.watchablematchinfo.server_ip,
54
+ port: match.watchablematchinfo.tv_port,
55
+ reservation_id: match.roundstatsall.last.reservationid.to_s
56
+ }
57
+ }
58
+ end
59
+
60
+ def extract_stats(match)
61
+ stats = match.roundstatsall.map.with_index do |round, round_index|
62
+ {
63
+ round: round_index,
64
+ timestamp: match.matchtime + round.match_duration,
65
+ scores: extract_round_stats(round)
66
+ }
67
+ end
68
+
69
+ { stats: stats }
70
+ end
71
+
72
+ def extract_round_stats(round)
73
+ players = round.reservation.account_ids.collect! { |id| SteamID32.parse("[U:1:#{id}]").to_steamID64.to_s }
74
+
75
+ raise RuntimeError,
76
+ "Invalid player list, expected 10 players got #{players.count}" unless players.count == 10
77
+
78
+ players.each.with_index.inject({}) do |memo, (community_id, player_index)|
79
+ memo[community_id] ||= {}
80
+
81
+ %w(enemy_kills enemy_headshots kills deaths assists scores mvps).each do |property|
82
+ memo[community_id].merge!(property.to_sym => round.send(property)[player_index])
83
+ end
84
+
85
+ memo[community_id][:team] = player_index <= 4 ? 1 : 2
86
+
87
+ memo
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,83 @@
1
+ require 'stringio'
2
+
3
+ module Overlook
4
+ module Csgo
5
+ class SharecodeDecoder
6
+ InvalidShareCode = Class.new(StandardError)
7
+ DecodingError = Class.new(StandardError)
8
+
9
+ DICTIONARY = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefhijkmnopqrstuvwxyz23456789".freeze
10
+ DICTIONARY_LENGTH = DICTIONARY.length.freeze
11
+
12
+ attr_reader :code
13
+
14
+ def initialize(_code)
15
+ @code = _code.dup
16
+ end
17
+
18
+ def decode
19
+ sanitize_code!
20
+
21
+ reader = ByteReader.new(io)
22
+ matchid = reader.read_int64
23
+ outcomeid = reader.read_int64
24
+ tokenid = reader.read_short
25
+
26
+ { matchid: matchid.to_s, outcomeid: outcomeid.to_s, tokenid: tokenid.to_s }
27
+ end
28
+
29
+ private
30
+
31
+ def io
32
+ StringIO.new(decoded)
33
+ end
34
+
35
+ def decoded
36
+ result = [0] * 18
37
+
38
+ @code.chars.reverse.each_with_index do |char, index|
39
+ addval = DICTIONARY.index(char)
40
+
41
+ tmp = [0] * 18
42
+
43
+ carry, v = 0, 0
44
+ 17.downto(0).each do |t|
45
+ carry = 0
46
+ t.downto(0).each do |s|
47
+ if t - s == 0
48
+ v = tmp[s] + result[t] * 57
49
+ else
50
+ v = 0
51
+ end
52
+
53
+ v = v + carry
54
+ carry = v >> 8
55
+ tmp[s] = v & 0xFF
56
+ end
57
+ end
58
+
59
+ result = tmp
60
+
61
+ carry = 0
62
+ 17.downto(0).each do |t|
63
+ if t == 17
64
+ v = result[t] + addval
65
+ else
66
+ v = result[t]
67
+ end
68
+
69
+ v = v + carry
70
+ carry = v >> 8
71
+ result[t] = v & 0xFF
72
+ end
73
+ end
74
+
75
+ result.pack('C*')
76
+ end
77
+
78
+ def sanitize_code!
79
+ @code.gsub!(/CSGO|\-/, '')
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,3 @@
1
+ module Overlook
2
+ VERSION = '0.2.0'.freeze
3
+ end
File without changes
@@ -0,0 +1,1382 @@
1
+ ## Generated from cstrike15_gcmessages.proto
2
+ require "beefcake"
3
+
4
+
5
+ module ECsgoGCMsg
6
+ k_EMsgGCCStrike15_v2_Base = 9100
7
+ k_EMsgGCCStrike15_v2_MatchmakingStart = 9101
8
+ k_EMsgGCCStrike15_v2_MatchmakingStop = 9102
9
+ k_EMsgGCCStrike15_v2_MatchmakingClient2ServerPing = 9103
10
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate = 9104
11
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerReserve = 9105
12
+ k_EMsgGCCStrike15_v2_MatchmakingServerReservationResponse = 9106
13
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientReserve = 9107
14
+ k_EMsgGCCStrike15_v2_MatchmakingServerRoundStats = 9108
15
+ k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello = 9109
16
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientHello = 9110
17
+ k_EMsgGCCStrike15_v2_MatchmakingServerMatchEnd = 9111
18
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon = 9112
19
+ k_EMsgGCCStrike15_v2_MatchmakingServer2GCKick = 9113
20
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm = 9114
21
+ k_EMsgGCCStrike15_v2_MatchmakingGCOperationalStats = 9115
22
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate = 9116
23
+ k_EMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate = 9117
24
+ k_EMsgGCCStrike15_v2_ServerNotificationForUserPenalty = 9118
25
+ k_EMsgGCCStrike15_v2_ClientReportPlayer = 9119
26
+ k_EMsgGCCStrike15_v2_ClientReportServer = 9120
27
+ k_EMsgGCCStrike15_v2_ClientCommendPlayer = 9121
28
+ k_EMsgGCCStrike15_v2_ClientReportResponse = 9122
29
+ k_EMsgGCCStrike15_v2_ClientCommendPlayerQuery = 9123
30
+ k_EMsgGCCStrike15_v2_ClientCommendPlayerQueryResponse = 9124
31
+ k_EMsgGCCStrike15_v2_WatchInfoUsers = 9126
32
+ k_EMsgGCCStrike15_v2_ClientRequestPlayersProfile = 9127
33
+ k_EMsgGCCStrike15_v2_PlayersProfile = 9128
34
+ k_EMsgGCCStrike15_v2_SetMyMedalsInfo = 9129
35
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate = 9131
36
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment = 9132
37
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseStatus = 9133
38
+ k_EMsgGCCStrike15_v2_GC2ClientTextMsg = 9134
39
+ k_EMsgGCCStrike15_v2_Client2GCTextMsg = 9135
40
+ k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops = 9136
41
+ k_EMsgGCCStrike15_v2_MatchEndRewardDropsNotification = 9137
42
+ k_EMsgGCCStrike15_v2_ClientRequestWatchInfoFriends2 = 9138
43
+ k_EMsgGCCStrike15_v2_MatchList = 9139
44
+ k_EMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames = 9140
45
+ k_EMsgGCCStrike15_v2_MatchListRequestRecentUserGames = 9141
46
+ k_EMsgGCCStrike15_v2_GC2ServerReservationUpdate = 9142
47
+ k_EMsgGCCStrike15_v2_ClientVarValueNotificationInfo = 9144
48
+ k_EMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification = 9145
49
+ k_EMsgGCCStrike15_v2_MatchListRequestTournamentGames = 9146
50
+ k_EMsgGCCStrike15_v2_MatchListRequestFullGameInfo = 9147
51
+ k_EMsgGCCStrike15_v2_GiftsLeaderboardRequest = 9148
52
+ k_EMsgGCCStrike15_v2_GiftsLeaderboardResponse = 9149
53
+ k_EMsgGCCStrike15_v2_ServerVarValueNotificationInfo = 9150
54
+ k_EMsgGCToGCReloadVersions = 9151
55
+ k_EMsgGCCStrike15_v2_ClientSubmitSurveyVote = 9152
56
+ k_EMsgGCCStrike15_v2_Server2GCClientValidate = 9153
57
+ k_EMsgGCCStrike15_v2_MatchListRequestLiveGameForUser = 9154
58
+ k_EMsgGCCStrike15_v2_Server2GCPureServerValidationFailure = 9155
59
+ k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest = 9156
60
+ k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse = 9157
61
+ k_EMsgGCCStrike15_v2_AccountPrivacySettings = 9158
62
+ k_EMsgGCCStrike15_v2_SetMyActivityInfo = 9159
63
+ k_EMsgGCCStrike15_v2_MatchListRequestTournamentPredictions = 9160
64
+ k_EMsgGCCStrike15_v2_MatchListUploadTournamentPredictions = 9161
65
+ k_EMsgGCCStrike15_v2_DraftSummary = 9162
66
+ k_EMsgGCCStrike15_v2_ClientRequestJoinFriendData = 9163
67
+ k_EMsgGCCStrike15_v2_ClientRequestJoinServerData = 9164
68
+ k_EMsgGCCStrike15_v2_ClientRequestNewMission = 9165
69
+ k_EMsgGCCStrike15_v2_GC2ServerNotifyXPRewarded = 9166
70
+ k_EMsgGCCStrike15_v2_GC2ClientTournamentInfo = 9167
71
+ k_EMsgGC_GlobalGame_Subscribe = 9168
72
+ k_EMsgGC_GlobalGame_Unsubscribe = 9169
73
+ k_EMsgGC_GlobalGame_Play = 9170
74
+ k_EMsgGCCStrike15_v2_AcknowledgePenalty = 9171
75
+ k_EMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin = 9172
76
+ k_EMsgGCCStrike15_v2_GC2ClientGlobalStats = 9173
77
+ k_EMsgGCCStrike15_v2_Client2GCStreamUnlock = 9174
78
+ k_EMsgGCCStrike15_v2_FantasyRequestClientData = 9175
79
+ k_EMsgGCCStrike15_v2_FantasyUpdateClientData = 9176
80
+ end
81
+
82
+ class GameServerPing
83
+ include Beefcake::Message
84
+ end
85
+
86
+ class DetailedSearchStatistic
87
+ include Beefcake::Message
88
+ end
89
+
90
+ class TournamentPlayer
91
+ include Beefcake::Message
92
+ end
93
+
94
+ class TournamentTeam
95
+ include Beefcake::Message
96
+ end
97
+
98
+ class TournamentEvent
99
+ include Beefcake::Message
100
+ end
101
+
102
+ class GlobalStatistics
103
+ include Beefcake::Message
104
+ end
105
+
106
+ class OperationalStatisticDescription
107
+ include Beefcake::Message
108
+ end
109
+
110
+ class OperationalStatisticElement
111
+ include Beefcake::Message
112
+ end
113
+
114
+ class OperationalStatisticsPacket
115
+ include Beefcake::Message
116
+ end
117
+
118
+ class PlayerRankingInfo
119
+ include Beefcake::Message
120
+ end
121
+
122
+ class PlayerCommendationInfo
123
+ include Beefcake::Message
124
+ end
125
+
126
+ class PlayerMedalsInfo
127
+ include Beefcake::Message
128
+ end
129
+
130
+ class AccountActivity
131
+ include Beefcake::Message
132
+ end
133
+
134
+ class TournamentMatchSetup
135
+ include Beefcake::Message
136
+ end
137
+
138
+ class ServerHltvInfo
139
+ include Beefcake::Message
140
+ end
141
+
142
+ class IpAddressMask
143
+ include Beefcake::Message
144
+ end
145
+
146
+ class XpProgressData
147
+ include Beefcake::Message
148
+ end
149
+
150
+ class MatchEndItemUpdates
151
+ include Beefcake::Message
152
+ end
153
+
154
+ class PlayerQuestData
155
+ include Beefcake::Message
156
+
157
+ class QuestItemData
158
+ include Beefcake::Message
159
+ end
160
+ end
161
+
162
+ class CMsgGC_ServerQuestUpdateData
163
+ include Beefcake::Message
164
+ end
165
+
166
+ class CMsgGCCStrike15_v2_MatchmakingGCOperationalStats
167
+ include Beefcake::Message
168
+ end
169
+
170
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm
171
+ include Beefcake::Message
172
+ end
173
+
174
+ class CMsgGCCStrike15_v2_GC2ServerReservationUpdate
175
+ include Beefcake::Message
176
+ end
177
+
178
+ class CMsgGCCStrike15_v2_MatchmakingStart
179
+ include Beefcake::Message
180
+ end
181
+
182
+ class CMsgGCCStrike15_v2_MatchmakingStop
183
+ include Beefcake::Message
184
+ end
185
+
186
+ class CMsgGCCStrike15_v2_MatchmakingClient2ServerPing
187
+ include Beefcake::Message
188
+ end
189
+
190
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate
191
+ include Beefcake::Message
192
+
193
+ class Note
194
+ include Beefcake::Message
195
+ end
196
+ end
197
+
198
+ class CDataGCCStrike15_v2_TournamentMatchDraft
199
+ include Beefcake::Message
200
+
201
+ class Entry
202
+ include Beefcake::Message
203
+ end
204
+ end
205
+
206
+ class CPreMatchInfoData
207
+ include Beefcake::Message
208
+
209
+ class TeamStats
210
+ include Beefcake::Message
211
+ end
212
+ end
213
+
214
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve
215
+ include Beefcake::Message
216
+ end
217
+
218
+ class CMsgGCCStrike15_v2_MatchmakingServerReservationResponse
219
+ include Beefcake::Message
220
+ end
221
+
222
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve
223
+ include Beefcake::Message
224
+ end
225
+
226
+ class CMsgGCCStrike15_v2_MatchmakingServerRoundStats
227
+ include Beefcake::Message
228
+
229
+ class DropInfo
230
+ include Beefcake::Message
231
+ end
232
+ end
233
+
234
+ class CMsgGCCStrike15_v2_MatchmakingServerMatchEnd
235
+ include Beefcake::Message
236
+ end
237
+
238
+ class CMsgGCCStrike15_v2_MatchmakingClient2GCHello
239
+ include Beefcake::Message
240
+ end
241
+
242
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientHello
243
+ include Beefcake::Message
244
+ end
245
+
246
+ class CMsgGCCStrike15_v2_AccountPrivacySettings
247
+ include Beefcake::Message
248
+
249
+ class Setting
250
+ include Beefcake::Message
251
+ end
252
+ end
253
+
254
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon
255
+ include Beefcake::Message
256
+ end
257
+
258
+ class CMsgGCCStrike15_v2_MatchmakingServer2GCKick
259
+ include Beefcake::Message
260
+ end
261
+
262
+ class CDataGCCStrike15_v2_MatchmakingLockedInMatch
263
+ include Beefcake::Message
264
+ end
265
+
266
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate
267
+ include Beefcake::Message
268
+ end
269
+
270
+ class CMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate
271
+ include Beefcake::Message
272
+ end
273
+
274
+ class CMsgGCCStrike15_v2_ServerNotificationForUserPenalty
275
+ include Beefcake::Message
276
+ end
277
+
278
+ class CMsgGCCStrike15_v2_ClientReportPlayer
279
+ include Beefcake::Message
280
+ end
281
+
282
+ class CMsgGCCStrike15_v2_ClientCommendPlayer
283
+ include Beefcake::Message
284
+ end
285
+
286
+ class CMsgGCCStrike15_v2_ClientReportServer
287
+ include Beefcake::Message
288
+ end
289
+
290
+ class CMsgGCCStrike15_v2_ClientReportResponse
291
+ include Beefcake::Message
292
+ end
293
+
294
+ class CMsgGCCStrike15_v2_ClientRequestWatchInfoFriends
295
+ include Beefcake::Message
296
+ end
297
+
298
+ class WatchableMatchInfo
299
+ include Beefcake::Message
300
+ end
301
+
302
+ class CMsgGCCStrike15_v2_ClientRequestJoinFriendData
303
+ include Beefcake::Message
304
+ end
305
+
306
+ class CMsgGCCStrike15_v2_ClientRequestJoinServerData
307
+ include Beefcake::Message
308
+ end
309
+
310
+ class CMsgGCCstrike15_v2_ClientRequestNewMission
311
+ include Beefcake::Message
312
+ end
313
+
314
+ class CMsgGCCstrike15_v2_GC2ServerNotifyXPRewarded
315
+ include Beefcake::Message
316
+ end
317
+
318
+ class CMsgGCCStrike15_v2_WatchInfoUsers
319
+ include Beefcake::Message
320
+ end
321
+
322
+ class CMsgGCCStrike15_v2_ClientRequestPlayersProfile
323
+ include Beefcake::Message
324
+ end
325
+
326
+ class CMsgGCCStrike15_v2_PlayersProfile
327
+ include Beefcake::Message
328
+ end
329
+
330
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate
331
+ include Beefcake::Message
332
+ end
333
+
334
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment
335
+ include Beefcake::Message
336
+ end
337
+
338
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseStatus
339
+ include Beefcake::Message
340
+ end
341
+
342
+ class CClientHeaderOverwatchEvidence
343
+ include Beefcake::Message
344
+ end
345
+
346
+ class CMsgGCCStrike15_v2_GC2ClientTextMsg
347
+ include Beefcake::Message
348
+ end
349
+
350
+ class CMsgGCCStrike15_v2_Client2GCTextMsg
351
+ include Beefcake::Message
352
+ end
353
+
354
+ class CMsgGCCStrike15_v2_MatchEndRunRewardDrops
355
+ include Beefcake::Message
356
+ end
357
+
358
+ class CEconItemPreviewDataBlock
359
+ include Beefcake::Message
360
+
361
+ class Sticker
362
+ include Beefcake::Message
363
+ end
364
+ end
365
+
366
+ class CMsgGCCStrike15_v2_MatchEndRewardDropsNotification
367
+ include Beefcake::Message
368
+ end
369
+
370
+ class CMsgItemAcknowledged
371
+ include Beefcake::Message
372
+ end
373
+
374
+ class CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest
375
+ include Beefcake::Message
376
+ end
377
+
378
+ class CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse
379
+ include Beefcake::Message
380
+ end
381
+
382
+ class CMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification
383
+ include Beefcake::Message
384
+ end
385
+
386
+ class CMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames
387
+ include Beefcake::Message
388
+ end
389
+
390
+ class CMsgGCCStrike15_v2_MatchListRequestLiveGameForUser
391
+ include Beefcake::Message
392
+ end
393
+
394
+ class CMsgGCCStrike15_v2_MatchListRequestRecentUserGames
395
+ include Beefcake::Message
396
+ end
397
+
398
+ class CMsgGCCStrike15_v2_MatchListRequestTournamentGames
399
+ include Beefcake::Message
400
+ end
401
+
402
+ class CMsgGCCStrike15_v2_MatchListRequestFullGameInfo
403
+ include Beefcake::Message
404
+ end
405
+
406
+ class CDataGCCStrike15_v2_MatchInfo
407
+ include Beefcake::Message
408
+ end
409
+
410
+ class CDataGCCStrike15_v2_TournamentGroupTeam
411
+ include Beefcake::Message
412
+ end
413
+
414
+ class CDataGCCStrike15_v2_TournamentGroup
415
+ include Beefcake::Message
416
+
417
+ class Picks
418
+ include Beefcake::Message
419
+ end
420
+ end
421
+
422
+ class CDataGCCStrike15_v2_TournamentSection
423
+ include Beefcake::Message
424
+ end
425
+
426
+ class CDataGCCStrike15_v2_TournamentInfo
427
+ include Beefcake::Message
428
+ end
429
+
430
+ class CMsgGCCStrike15_v2_MatchList
431
+ include Beefcake::Message
432
+ end
433
+
434
+ class CMsgGCCStrike15_v2_Predictions
435
+ include Beefcake::Message
436
+
437
+ class GroupMatchTeamPick
438
+ include Beefcake::Message
439
+ end
440
+ end
441
+
442
+ class CMsgGCCStrike15_v2_Fantasy
443
+ include Beefcake::Message
444
+
445
+ class FantasySlot
446
+ include Beefcake::Message
447
+ end
448
+
449
+ class FantasyTeam
450
+ include Beefcake::Message
451
+ end
452
+ end
453
+
454
+ class CAttribute_String
455
+ include Beefcake::Message
456
+ end
457
+
458
+ class CMsgGCToGCReloadVersions
459
+ include Beefcake::Message
460
+ end
461
+
462
+ class CMsgCStrike15Welcome
463
+ include Beefcake::Message
464
+ end
465
+
466
+ class CMsgGCCStrike15_v2_ClientVarValueNotificationInfo
467
+ include Beefcake::Message
468
+ end
469
+
470
+ class CMsgGCCStrike15_v2_ServerVarValueNotificationInfo
471
+ include Beefcake::Message
472
+ end
473
+
474
+ class CMsgGCCStrike15_v2_GiftsLeaderboardRequest
475
+ include Beefcake::Message
476
+ end
477
+
478
+ class CMsgGCCStrike15_v2_GiftsLeaderboardResponse
479
+ include Beefcake::Message
480
+
481
+ class GiftLeaderboardEntry
482
+ include Beefcake::Message
483
+ end
484
+ end
485
+
486
+ class CMsgGCCStrike15_v2_ClientSubmitSurveyVote
487
+ include Beefcake::Message
488
+ end
489
+
490
+ class CMsgGCCStrike15_v2_Server2GCClientValidate
491
+ include Beefcake::Message
492
+ end
493
+
494
+ class CMsgGCCStrike15_v2_Server2GCPureServerValidationFailure
495
+ include Beefcake::Message
496
+ end
497
+
498
+ class CMsgGCCStrike15_v2_GC2ClientTournamentInfo
499
+ include Beefcake::Message
500
+ end
501
+
502
+ class CSOEconCoupon
503
+ include Beefcake::Message
504
+ end
505
+
506
+ class CSOQuestProgress
507
+ include Beefcake::Message
508
+ end
509
+
510
+ class CSOPersonaDataPublic
511
+ include Beefcake::Message
512
+ end
513
+
514
+ class CMsgGC_GlobalGame_Subscribe
515
+ include Beefcake::Message
516
+ end
517
+
518
+ class CMsgGC_GlobalGame_Unsubscribe
519
+ include Beefcake::Message
520
+ end
521
+
522
+ class CMsgGC_GlobalGame_Play
523
+ include Beefcake::Message
524
+ end
525
+
526
+ class CMsgGCCStrike15_v2_AcknowledgePenalty
527
+ include Beefcake::Message
528
+ end
529
+
530
+ class CMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin
531
+ include Beefcake::Message
532
+ end
533
+
534
+ class CMsgGCCStrike15_v2_Client2GCStreamUnlock
535
+ include Beefcake::Message
536
+ end
537
+
538
+ class GameServerPing
539
+ optional :gameserver_id, :uint64, 1
540
+ optional :ping, :int32, 2
541
+ optional :ip, :uint32, 3
542
+ optional :port, :uint32, 4
543
+ optional :instances, :uint32, 5
544
+ end
545
+
546
+ class DetailedSearchStatistic
547
+ optional :game_type, :uint32, 1
548
+ optional :search_time_avg, :uint32, 2
549
+ optional :players_searching, :uint32, 4
550
+ end
551
+
552
+ class TournamentPlayer
553
+ optional :account_id, :uint32, 1
554
+ optional :player_nick, :string, 2
555
+ optional :player_name, :string, 3
556
+ optional :player_dob, :uint32, 4
557
+ optional :player_flag, :string, 5
558
+ optional :player_location, :string, 6
559
+ optional :player_desc, :string, 7
560
+ end
561
+
562
+ class TournamentTeam
563
+ optional :team_id, :int32, 1
564
+ optional :team_tag, :string, 2
565
+ optional :team_flag, :string, 3
566
+ optional :team_name, :string, 4
567
+ repeated :players, TournamentPlayer, 5
568
+ end
569
+
570
+ class TournamentEvent
571
+ optional :event_id, :int32, 1
572
+ optional :event_tag, :string, 2
573
+ optional :event_name, :string, 3
574
+ optional :event_time_start, :uint32, 4
575
+ optional :event_time_end, :uint32, 5
576
+ optional :event_public, :int32, 6
577
+ optional :event_stage_id, :int32, 7
578
+ optional :event_stage_name, :string, 8
579
+ optional :active_section_id, :uint32, 9
580
+ end
581
+
582
+ class GlobalStatistics
583
+ optional :players_online, :uint32, 1
584
+ optional :servers_online, :uint32, 2
585
+ optional :players_searching, :uint32, 3
586
+ optional :servers_available, :uint32, 4
587
+ optional :ongoing_matches, :uint32, 5
588
+ optional :search_time_avg, :uint32, 6
589
+ repeated :search_statistics, DetailedSearchStatistic, 7
590
+ optional :main_post_url, :string, 8
591
+ optional :required_appid_version, :uint32, 9
592
+ optional :pricesheet_version, :uint32, 10
593
+ optional :twitch_streams_version, :uint32, 11
594
+ optional :active_tournament_eventid, :uint32, 12
595
+ optional :active_survey_id, :uint32, 13
596
+ end
597
+
598
+ class OperationalStatisticDescription
599
+ optional :name, :string, 1
600
+ optional :idkey, :uint32, 2
601
+ end
602
+
603
+ class OperationalStatisticElement
604
+ optional :idkey, :uint32, 1
605
+ repeated :values, :int32, 2
606
+ end
607
+
608
+ class OperationalStatisticsPacket
609
+ optional :packetid, :int32, 1
610
+ optional :mstimestamp, :int32, 2
611
+ repeated :values, OperationalStatisticElement, 3
612
+ end
613
+
614
+ class PlayerRankingInfo
615
+ optional :account_id, :uint32, 1
616
+ optional :rank_id, :uint32, 2
617
+ optional :wins, :uint32, 3
618
+ optional :rank_change, :float, 4
619
+ end
620
+
621
+ class PlayerCommendationInfo
622
+ optional :cmd_friendly, :uint32, 1
623
+ optional :cmd_teaching, :uint32, 2
624
+ optional :cmd_leader, :uint32, 4
625
+ end
626
+
627
+ class PlayerMedalsInfo
628
+ optional :medal_team, :uint32, 1
629
+ optional :medal_combat, :uint32, 2
630
+ optional :medal_weapon, :uint32, 3
631
+ optional :medal_global, :uint32, 4
632
+ optional :medal_arms, :uint32, 5
633
+ repeated :display_items_defidx, :uint32, 7
634
+ optional :featured_display_item_defidx, :uint32, 8
635
+ end
636
+
637
+ class AccountActivity
638
+ optional :activity, :uint32, 1
639
+ optional :mode, :uint32, 2
640
+ optional :map, :uint32, 3
641
+ end
642
+
643
+ class TournamentMatchSetup
644
+ optional :event_id, :int32, 1
645
+ optional :team_id_ct, :int32, 2
646
+ optional :team_id_t, :int32, 3
647
+ optional :event_stage_id, :int32, 4
648
+ end
649
+
650
+ class ServerHltvInfo
651
+ optional :tv_udp_port, :uint32, 1
652
+ optional :tv_watch_key, :uint64, 2
653
+ optional :tv_slots, :uint32, 3
654
+ optional :tv_clients, :uint32, 4
655
+ optional :tv_proxies, :uint32, 5
656
+ optional :tv_time, :uint32, 6
657
+ optional :game_type, :uint32, 8
658
+ optional :game_mapgroup, :string, 9
659
+ optional :game_map, :string, 10
660
+ optional :tv_master_steamid, :uint64, 11
661
+ optional :tv_local_slots, :uint32, 12
662
+ optional :tv_local_clients, :uint32, 13
663
+ optional :tv_local_proxies, :uint32, 14
664
+ optional :tv_relay_slots, :uint32, 15
665
+ optional :tv_relay_clients, :uint32, 16
666
+ optional :tv_relay_proxies, :uint32, 17
667
+ optional :tv_relay_address, :uint32, 18
668
+ optional :tv_relay_port, :uint32, 19
669
+ optional :tv_relay_steamid, :uint64, 20
670
+ end
671
+
672
+ class IpAddressMask
673
+ optional :a, :uint32, 1
674
+ optional :b, :uint32, 2
675
+ optional :c, :uint32, 3
676
+ optional :d, :uint32, 4
677
+ optional :bits, :uint32, 5
678
+ optional :token, :uint32, 6
679
+ end
680
+
681
+ class XpProgressData
682
+ optional :xp_points, :uint32, 1
683
+ optional :xp_category, :int32, 2
684
+ end
685
+
686
+ class MatchEndItemUpdates
687
+ optional :item_id, :uint64, 1
688
+ optional :item_attr_defidx, :uint32, 2
689
+ optional :item_attr_delta_value, :uint32, 3
690
+ end
691
+
692
+ class PlayerQuestData
693
+
694
+ class QuestItemData
695
+ optional :quest_id, :uint64, 1
696
+ optional :quest_normal_points_earned, :int32, 2
697
+ optional :quest_bonus_points_earned, :int32, 3
698
+ end
699
+ optional :quester_account_id, :uint32, 1
700
+ repeated :quest_item_data, PlayerQuestData::QuestItemData, 2
701
+ repeated :xp_progress_data, XpProgressData, 3
702
+ optional :time_played, :uint32, 4
703
+ optional :mm_game_mode, :uint32, 5
704
+ repeated :item_updates, MatchEndItemUpdates, 6
705
+ end
706
+
707
+ class CMsgGC_ServerQuestUpdateData
708
+ repeated :player_quest_data, PlayerQuestData, 1
709
+ end
710
+
711
+ class CMsgGCCStrike15_v2_MatchmakingGCOperationalStats
712
+ optional :packetid, :int32, 1
713
+ repeated :namekeys, OperationalStatisticDescription, 2
714
+ repeated :packets, OperationalStatisticsPacket, 3
715
+ end
716
+
717
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm
718
+ optional :token, :uint32, 1
719
+ optional :stamp, :uint32, 2
720
+ optional :exchange, :uint64, 3
721
+ end
722
+
723
+ class CMsgGCCStrike15_v2_GC2ServerReservationUpdate
724
+ optional :viewers_external_total, :uint32, 1
725
+ optional :viewers_external_steam, :uint32, 2
726
+ end
727
+
728
+ class CMsgGCCStrike15_v2_MatchmakingStart
729
+ repeated :account_ids, :uint32, 1
730
+ optional :game_type, :uint32, 2
731
+ optional :ticket_data, :string, 3
732
+ optional :client_version, :uint32, 4
733
+ optional :tournament_match, TournamentMatchSetup, 5
734
+ end
735
+
736
+ class CMsgGCCStrike15_v2_MatchmakingStop
737
+ optional :abandon, :int32, 1
738
+ end
739
+
740
+ class CMsgGCCStrike15_v2_MatchmakingClient2ServerPing
741
+ repeated :gameserverpings, GameServerPing, 1
742
+ optional :offset_index, :int32, 2
743
+ optional :final_batch, :int32, 3
744
+ end
745
+
746
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate
747
+
748
+ class Note
749
+ optional :type, :int32, 1
750
+ optional :region_id, :int32, 2
751
+ optional :region_r, :float, 3
752
+ optional :distance, :float, 4
753
+ end
754
+ optional :matchmaking, :int32, 1
755
+ repeated :waiting_account_id_sessions, :uint32, 2
756
+ optional :error, :string, 3
757
+ repeated :ongoingmatch_account_id_sessions, :uint32, 6
758
+ optional :global_stats, GlobalStatistics, 7
759
+ repeated :failping_account_id_sessions, :uint32, 8
760
+ repeated :penalty_account_id_sessions, :uint32, 9
761
+ repeated :failready_account_id_sessions, :uint32, 10
762
+ repeated :vacbanned_account_id_sessions, :uint32, 11
763
+ optional :server_ipaddress_mask, IpAddressMask, 12
764
+ repeated :notes, CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate::Note, 13
765
+ repeated :penalty_account_id_sessions_green, :uint32, 14
766
+ repeated :insufficientlevel_sessions, :uint32, 15
767
+ end
768
+
769
+ class CDataGCCStrike15_v2_TournamentMatchDraft
770
+
771
+ class Entry
772
+ optional :mapid, :int32, 1
773
+ optional :team_id_ct, :int32, 2
774
+ end
775
+ optional :event_id, :int32, 1
776
+ optional :event_stage_id, :int32, 2
777
+ optional :team_id_0, :int32, 3
778
+ optional :team_id_1, :int32, 4
779
+ optional :maps_count, :int32, 5
780
+ optional :maps_current, :int32, 6
781
+ optional :team_id_start, :int32, 7
782
+ optional :team_id_veto1, :int32, 8
783
+ optional :team_id_pickn, :int32, 9
784
+ repeated :drafts, CDataGCCStrike15_v2_TournamentMatchDraft::Entry, 10
785
+ end
786
+
787
+ class CPreMatchInfoData
788
+
789
+ class TeamStats
790
+ optional :match_info_idxtxt, :int32, 1
791
+ optional :match_info_txt, :string, 2
792
+ repeated :match_info_teams, :string, 3
793
+ end
794
+ optional :predictions_pct, :int32, 1
795
+ optional :draft, CDataGCCStrike15_v2_TournamentMatchDraft, 4
796
+ repeated :stats, CPreMatchInfoData::TeamStats, 5
797
+ end
798
+
799
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve
800
+ repeated :account_ids, :uint32, 1
801
+ optional :game_type, :uint32, 2
802
+ optional :match_id, :uint64, 3
803
+ optional :server_version, :uint32, 4
804
+ repeated :rankings, PlayerRankingInfo, 5
805
+ optional :encryption_key, :uint64, 6
806
+ optional :encryption_key_pub, :uint64, 7
807
+ repeated :party_ids, :uint32, 8
808
+ repeated :whitelist, IpAddressMask, 9
809
+ optional :tv_master_steamid, :uint64, 10
810
+ optional :tournament_event, TournamentEvent, 11
811
+ repeated :tournament_teams, TournamentTeam, 12
812
+ repeated :tournament_casters_account_ids, :uint32, 13
813
+ optional :tv_relay_steamid, :uint64, 14
814
+ optional :pre_match_data, CPreMatchInfoData, 15
815
+ end
816
+
817
+ class CMsgGCCStrike15_v2_MatchmakingServerReservationResponse
818
+ optional :reservationid, :uint64, 1
819
+ optional :reservation, CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve, 2
820
+ optional :map, :string, 3
821
+ optional :gc_reservation_sent, :uint64, 4
822
+ optional :server_version, :uint32, 5
823
+ optional :tv_info, ServerHltvInfo, 6
824
+ repeated :reward_player_accounts, :uint32, 7
825
+ repeated :idle_player_accounts, :uint32, 8
826
+ optional :reward_item_attr_def_idx, :uint32, 9
827
+ optional :reward_item_attr_value, :uint32, 10
828
+ optional :reward_item_attr_reward_idx, :uint32, 11
829
+ optional :reward_drop_list, :uint32, 12
830
+ optional :tournament_tag, :string, 13
831
+ end
832
+
833
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve
834
+ optional :serverid, :uint64, 1
835
+ optional :serverip, :uint32, 2
836
+ optional :serverport, :uint32, 3
837
+ optional :reservationid, :uint64, 4
838
+ optional :reservation, CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve, 5
839
+ optional :map, :string, 6
840
+ end
841
+
842
+ class CMsgGCCStrike15_v2_MatchmakingServerRoundStats
843
+
844
+ class DropInfo
845
+ optional :account_mvp, :uint32, 1
846
+ end
847
+ optional :reservationid, :uint64, 1
848
+ optional :reservation, CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve, 2
849
+ optional :map, :string, 3
850
+ optional :round, :int32, 4
851
+ repeated :kills, :int32, 5
852
+ repeated :assists, :int32, 6
853
+ repeated :deaths, :int32, 7
854
+ repeated :scores, :int32, 8
855
+ repeated :pings, :int32, 9
856
+ optional :round_result, :int32, 10
857
+ optional :match_result, :int32, 11
858
+ repeated :team_scores, :int32, 12
859
+ optional :confirm, CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm, 13
860
+ optional :reservation_stage, :int32, 14
861
+ optional :match_duration, :int32, 15
862
+ repeated :enemy_kills, :int32, 16
863
+ repeated :enemy_headshots, :int32, 17
864
+ repeated :enemy_3ks, :int32, 18
865
+ repeated :enemy_4ks, :int32, 19
866
+ repeated :enemy_5ks, :int32, 20
867
+ repeated :mvps, :int32, 21
868
+ optional :spectators_count, :uint32, 22
869
+ optional :spectators_count_tv, :uint32, 23
870
+ optional :spectators_count_lnk, :uint32, 24
871
+ repeated :enemy_kills_agg, :int32, 25
872
+ optional :drop_info, CMsgGCCStrike15_v2_MatchmakingServerRoundStats::DropInfo, 26
873
+ end
874
+
875
+ class CMsgGCCStrike15_v2_MatchmakingServerMatchEnd
876
+ optional :stats, CMsgGCCStrike15_v2_MatchmakingServerRoundStats, 1
877
+ optional :confirm, CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm, 3
878
+ optional :rematch, :uint64, 4
879
+ optional :replay_token, :uint32, 5
880
+ optional :replay_cluster_id, :uint32, 6
881
+ optional :aborted_match, :bool, 7
882
+ optional :match_end_quest_data, CMsgGC_ServerQuestUpdateData, 8
883
+ end
884
+
885
+ class CMsgGCCStrike15_v2_MatchmakingClient2GCHello
886
+ end
887
+
888
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientHello
889
+ optional :account_id, :uint32, 1
890
+ optional :ongoingmatch, CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve, 2
891
+ optional :global_stats, GlobalStatistics, 3
892
+ optional :penalty_seconds, :uint32, 4
893
+ optional :penalty_reason, :uint32, 5
894
+ optional :vac_banned, :int32, 6
895
+ optional :ranking, PlayerRankingInfo, 7
896
+ optional :commendation, PlayerCommendationInfo, 8
897
+ optional :medals, PlayerMedalsInfo, 9
898
+ optional :my_current_event, TournamentEvent, 10
899
+ repeated :my_current_event_teams, TournamentTeam, 11
900
+ optional :my_current_team, TournamentTeam, 12
901
+ repeated :my_current_event_stages, TournamentEvent, 13
902
+ optional :survey_vote, :uint32, 14
903
+ optional :activity, AccountActivity, 15
904
+ optional :player_level, :int32, 17
905
+ optional :player_cur_xp, :int32, 18
906
+ optional :player_xp_bonus_flags, :int32, 19
907
+ end
908
+
909
+ class CMsgGCCStrike15_v2_AccountPrivacySettings
910
+
911
+ class Setting
912
+ optional :setting_type, :uint32, 1
913
+ optional :setting_value, :uint32, 2
914
+ end
915
+ repeated :settings, CMsgGCCStrike15_v2_AccountPrivacySettings::Setting, 1
916
+ end
917
+
918
+ class CMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon
919
+ optional :account_id, :uint32, 1
920
+ optional :abandoned_match, CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve, 2
921
+ optional :penalty_seconds, :uint32, 3
922
+ optional :penalty_reason, :uint32, 4
923
+ end
924
+
925
+ class CMsgGCCStrike15_v2_MatchmakingServer2GCKick
926
+ optional :account_id, :uint32, 1
927
+ optional :reservation, CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve, 2
928
+ optional :reason, :uint32, 3
929
+ end
930
+
931
+ class CDataGCCStrike15_v2_MatchmakingLockedInMatch
932
+ optional :client_reservation, CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve, 1
933
+ optional :server_stats, CMsgGCCStrike15_v2_MatchmakingServerRoundStats, 2
934
+ optional :rtime32_server_info, :uint32, 3
935
+ optional :last_round_stats_temp, CMsgGCCStrike15_v2_MatchmakingServerRoundStats, 4
936
+ end
937
+
938
+ class CMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate
939
+ repeated :rankings, PlayerRankingInfo, 1
940
+ optional :match_id, :uint64, 2
941
+ end
942
+
943
+ class CMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate
944
+ optional :main_post_url, :string, 1
945
+ end
946
+
947
+ class CMsgGCCStrike15_v2_ServerNotificationForUserPenalty
948
+ optional :account_id, :uint32, 1
949
+ optional :reason, :uint32, 2
950
+ optional :seconds, :uint32, 3
951
+ end
952
+
953
+ class CMsgGCCStrike15_v2_ClientReportPlayer
954
+ optional :account_id, :uint32, 1
955
+ optional :rpt_aimbot, :uint32, 2
956
+ optional :rpt_wallhack, :uint32, 3
957
+ optional :rpt_speedhack, :uint32, 4
958
+ optional :rpt_teamharm, :uint32, 5
959
+ optional :rpt_textabuse, :uint32, 6
960
+ optional :rpt_voiceabuse, :uint32, 7
961
+ optional :match_id, :uint64, 8
962
+ end
963
+
964
+ class CMsgGCCStrike15_v2_ClientCommendPlayer
965
+ optional :account_id, :uint32, 1
966
+ optional :match_id, :uint64, 8
967
+ optional :commendation, PlayerCommendationInfo, 9
968
+ optional :tokens, :uint32, 10
969
+ end
970
+
971
+ class CMsgGCCStrike15_v2_ClientReportServer
972
+ optional :rpt_poorperf, :uint32, 1
973
+ optional :rpt_abusivemodels, :uint32, 2
974
+ optional :rpt_badmotd, :uint32, 3
975
+ optional :rpt_listingabuse, :uint32, 4
976
+ optional :match_id, :uint64, 8
977
+ end
978
+
979
+ class CMsgGCCStrike15_v2_ClientReportResponse
980
+ optional :confirmation_id, :uint64, 1
981
+ optional :account_id, :uint32, 2
982
+ optional :server_ip, :uint32, 3
983
+ optional :response_type, :uint32, 4
984
+ optional :response_result, :uint32, 5
985
+ optional :tokens, :uint32, 6
986
+ end
987
+
988
+ class CMsgGCCStrike15_v2_ClientRequestWatchInfoFriends
989
+ optional :request_id, :uint32, 1
990
+ repeated :account_ids, :uint32, 2
991
+ optional :serverid, :uint64, 3
992
+ optional :matchid, :uint64, 4
993
+ end
994
+
995
+ class WatchableMatchInfo
996
+ optional :server_ip, :uint32, 1
997
+ optional :tv_port, :uint32, 2
998
+ optional :tv_spectators, :uint32, 3
999
+ optional :tv_time, :uint32, 4
1000
+ optional :tv_watch_password, :bytes, 5
1001
+ optional :cl_decryptdata_key, :uint64, 6
1002
+ optional :cl_decryptdata_key_pub, :uint64, 7
1003
+ optional :game_type, :uint32, 8
1004
+ optional :game_mapgroup, :string, 9
1005
+ optional :game_map, :string, 10
1006
+ optional :server_id, :uint64, 11
1007
+ optional :match_id, :uint64, 12
1008
+ optional :reservation_id, :uint64, 13
1009
+ end
1010
+
1011
+ class CMsgGCCStrike15_v2_ClientRequestJoinFriendData
1012
+ optional :version, :uint32, 1
1013
+ optional :account_id, :uint32, 2
1014
+ optional :join_token, :uint32, 3
1015
+ optional :join_ipp, :uint32, 4
1016
+ optional :res, CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve, 5
1017
+ optional :errormsg, :string, 6
1018
+ end
1019
+
1020
+ class CMsgGCCStrike15_v2_ClientRequestJoinServerData
1021
+ optional :version, :uint32, 1
1022
+ optional :account_id, :uint32, 2
1023
+ optional :serverid, :uint64, 3
1024
+ optional :server_ip, :uint32, 4
1025
+ optional :server_port, :uint32, 5
1026
+ optional :res, CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve, 6
1027
+ end
1028
+
1029
+ class CMsgGCCstrike15_v2_ClientRequestNewMission
1030
+ optional :mission_id, :uint32, 2
1031
+ optional :campaign_id, :uint32, 3
1032
+ end
1033
+
1034
+ class CMsgGCCstrike15_v2_GC2ServerNotifyXPRewarded
1035
+ repeated :xp_progress_data, XpProgressData, 1
1036
+ optional :account_id, :uint32, 2
1037
+ optional :current_xp, :uint32, 3
1038
+ optional :current_level, :uint32, 4
1039
+ optional :upgraded_defidx, :uint32, 5
1040
+ end
1041
+
1042
+ class CMsgGCCStrike15_v2_WatchInfoUsers
1043
+ optional :request_id, :uint32, 1
1044
+ repeated :account_ids, :uint32, 2
1045
+ repeated :watchable_match_infos, WatchableMatchInfo, 3
1046
+ optional :extended_timeout, :uint32, 5
1047
+ end
1048
+
1049
+ class CMsgGCCStrike15_v2_ClientRequestPlayersProfile
1050
+ optional :request_id__deprecated, :uint32, 1
1051
+ repeated :account_ids__deprecated, :uint32, 2
1052
+ optional :account_id, :uint32, 3
1053
+ optional :request_level, :uint32, 4
1054
+ end
1055
+
1056
+ class CMsgGCCStrike15_v2_PlayersProfile
1057
+ optional :request_id, :uint32, 1
1058
+ repeated :account_profiles, CMsgGCCStrike15_v2_MatchmakingGC2ClientHello, 2
1059
+ end
1060
+
1061
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate
1062
+ optional :caseid, :uint64, 1
1063
+ optional :suspectid, :uint32, 3
1064
+ optional :fractionid, :uint32, 4
1065
+ optional :rpt_aimbot, :uint32, 5
1066
+ optional :rpt_wallhack, :uint32, 6
1067
+ optional :rpt_speedhack, :uint32, 7
1068
+ optional :rpt_teamharm, :uint32, 8
1069
+ optional :reason, :uint32, 9
1070
+ end
1071
+
1072
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment
1073
+ optional :caseid, :uint64, 1
1074
+ optional :caseurl, :string, 2
1075
+ optional :verdict, :uint32, 3
1076
+ optional :timestamp, :uint32, 4
1077
+ optional :throttleseconds, :uint32, 5
1078
+ optional :suspectid, :uint32, 6
1079
+ optional :fractionid, :uint32, 7
1080
+ optional :numrounds, :uint32, 8
1081
+ optional :fractionrounds, :uint32, 9
1082
+ optional :streakconvictions, :int32, 10
1083
+ optional :reason, :uint32, 11
1084
+ end
1085
+
1086
+ class CMsgGCCStrike15_v2_PlayerOverwatchCaseStatus
1087
+ optional :caseid, :uint64, 1
1088
+ optional :statusid, :uint32, 2
1089
+ end
1090
+
1091
+ class CClientHeaderOverwatchEvidence
1092
+ optional :accountid, :uint32, 1
1093
+ optional :caseid, :uint64, 2
1094
+ end
1095
+
1096
+ class CMsgGCCStrike15_v2_GC2ClientTextMsg
1097
+ optional :id, :uint32, 1
1098
+ optional :type, :uint32, 2
1099
+ optional :payload, :bytes, 3
1100
+ end
1101
+
1102
+ class CMsgGCCStrike15_v2_Client2GCTextMsg
1103
+ optional :id, :uint32, 1
1104
+ repeated :args, :bytes, 2
1105
+ end
1106
+
1107
+ class CMsgGCCStrike15_v2_MatchEndRunRewardDrops
1108
+ optional :serverinfo, CMsgGCCStrike15_v2_MatchmakingServerReservationResponse, 3
1109
+ optional :match_end_quest_data, CMsgGC_ServerQuestUpdateData, 4
1110
+ end
1111
+
1112
+ class CEconItemPreviewDataBlock
1113
+
1114
+ class Sticker
1115
+ optional :slot, :uint32, 1
1116
+ optional :sticker_id, :uint32, 2
1117
+ optional :wear, :float, 3
1118
+ optional :scale, :float, 4
1119
+ optional :rotation, :float, 5
1120
+ end
1121
+ optional :accountid, :uint32, 1
1122
+ optional :itemid, :uint64, 2
1123
+ optional :defindex, :uint32, 3
1124
+ optional :paintindex, :uint32, 4
1125
+ optional :rarity, :uint32, 5
1126
+ optional :quality, :uint32, 6
1127
+ optional :paintwear, :uint32, 7
1128
+ optional :paintseed, :uint32, 8
1129
+ optional :killeaterscoretype, :uint32, 9
1130
+ optional :killeatervalue, :uint32, 10
1131
+ optional :customname, :string, 11
1132
+ repeated :stickers, CEconItemPreviewDataBlock::Sticker, 12
1133
+ optional :inventory, :uint32, 13
1134
+ optional :origin, :uint32, 14
1135
+ optional :questid, :uint32, 15
1136
+ optional :dropreason, :uint32, 16
1137
+ end
1138
+
1139
+ class CMsgGCCStrike15_v2_MatchEndRewardDropsNotification
1140
+ optional :iteminfo, CEconItemPreviewDataBlock, 6
1141
+ end
1142
+
1143
+ class CMsgItemAcknowledged
1144
+ optional :iteminfo, CEconItemPreviewDataBlock, 1
1145
+ end
1146
+
1147
+ class CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest
1148
+ optional :param_s, :uint64, 1
1149
+ optional :param_a, :uint64, 2
1150
+ optional :param_d, :uint64, 3
1151
+ optional :param_m, :uint64, 4
1152
+ end
1153
+
1154
+ class CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse
1155
+ optional :iteminfo, CEconItemPreviewDataBlock, 1
1156
+ end
1157
+
1158
+ class CMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification
1159
+ optional :match_id, :uint64, 1
1160
+ optional :defindex, :uint32, 2
1161
+ repeated :accountids, :uint32, 3
1162
+ end
1163
+
1164
+ class CMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames
1165
+ end
1166
+
1167
+ class CMsgGCCStrike15_v2_MatchListRequestLiveGameForUser
1168
+ optional :accountid, :uint32, 1
1169
+ end
1170
+
1171
+ class CMsgGCCStrike15_v2_MatchListRequestRecentUserGames
1172
+ optional :accountid, :uint32, 1
1173
+ end
1174
+
1175
+ class CMsgGCCStrike15_v2_MatchListRequestTournamentGames
1176
+ optional :eventid, :int32, 1
1177
+ end
1178
+
1179
+ class CMsgGCCStrike15_v2_MatchListRequestFullGameInfo
1180
+ optional :matchid, :uint64, 1
1181
+ optional :outcomeid, :uint64, 2
1182
+ optional :token, :uint32, 3
1183
+ end
1184
+
1185
+ class CDataGCCStrike15_v2_MatchInfo
1186
+ optional :matchid, :uint64, 1
1187
+ optional :matchtime, :uint32, 2
1188
+ optional :watchablematchinfo, WatchableMatchInfo, 3
1189
+ optional :roundstats_legacy, CMsgGCCStrike15_v2_MatchmakingServerRoundStats, 4
1190
+ repeated :roundstatsall, CMsgGCCStrike15_v2_MatchmakingServerRoundStats, 5
1191
+ end
1192
+
1193
+ class CDataGCCStrike15_v2_TournamentGroupTeam
1194
+ optional :team_id, :int32, 1
1195
+ optional :score, :int32, 2
1196
+ optional :correctpick, :bool, 3
1197
+ end
1198
+
1199
+ class CDataGCCStrike15_v2_TournamentGroup
1200
+
1201
+ class Picks
1202
+ repeated :pickids, :int32, 1
1203
+ end
1204
+ optional :groupid, :uint32, 1
1205
+ optional :name, :string, 2
1206
+ optional :desc, :string, 3
1207
+ optional :picks__deprecated, :uint32, 4
1208
+ repeated :teams, CDataGCCStrike15_v2_TournamentGroupTeam, 5
1209
+ repeated :stage_ids, :int32, 6
1210
+ optional :picklockuntiltime, :uint32, 7
1211
+ optional :pickableteams, :uint32, 8
1212
+ optional :points_per_pick, :uint32, 9
1213
+ repeated :picks, CDataGCCStrike15_v2_TournamentGroup::Picks, 10
1214
+ end
1215
+
1216
+ class CDataGCCStrike15_v2_TournamentSection
1217
+ optional :sectionid, :uint32, 1
1218
+ optional :name, :string, 2
1219
+ optional :desc, :string, 3
1220
+ repeated :groups, CDataGCCStrike15_v2_TournamentGroup, 4
1221
+ end
1222
+
1223
+ class CDataGCCStrike15_v2_TournamentInfo
1224
+ repeated :sections, CDataGCCStrike15_v2_TournamentSection, 1
1225
+ optional :tournament_event, TournamentEvent, 2
1226
+ repeated :tournament_teams, TournamentTeam, 3
1227
+ end
1228
+
1229
+ class CMsgGCCStrike15_v2_MatchList
1230
+ optional :msgrequestid, :uint32, 1
1231
+ optional :accountid, :uint32, 2
1232
+ optional :servertime, :uint32, 3
1233
+ repeated :matches, CDataGCCStrike15_v2_MatchInfo, 4
1234
+ repeated :streams, TournamentTeam, 5
1235
+ optional :tournamentinfo, CDataGCCStrike15_v2_TournamentInfo, 6
1236
+ end
1237
+
1238
+ class CMsgGCCStrike15_v2_Predictions
1239
+
1240
+ class GroupMatchTeamPick
1241
+ optional :sectionid, :int32, 1
1242
+ optional :groupid, :int32, 2
1243
+ optional :index, :int32, 3
1244
+ optional :teamid, :int32, 4
1245
+ optional :itemid, :uint64, 5
1246
+ end
1247
+ optional :event_id, :uint32, 1
1248
+ repeated :group_match_team_picks, CMsgGCCStrike15_v2_Predictions::GroupMatchTeamPick, 2
1249
+ end
1250
+
1251
+ class CMsgGCCStrike15_v2_Fantasy
1252
+
1253
+ class FantasySlot
1254
+ optional :type, :int32, 1
1255
+ optional :pick, :int32, 2
1256
+ optional :itemid, :uint64, 3
1257
+ end
1258
+
1259
+ class FantasyTeam
1260
+ optional :sectionid, :int32, 1
1261
+ repeated :slots, CMsgGCCStrike15_v2_Fantasy::FantasySlot, 2
1262
+ end
1263
+ optional :event_id, :uint32, 1
1264
+ repeated :teams, CMsgGCCStrike15_v2_Fantasy::FantasyTeam, 2
1265
+ end
1266
+
1267
+ class CAttribute_String
1268
+ optional :value, :string, 1
1269
+ end
1270
+
1271
+ class CMsgGCToGCReloadVersions
1272
+ end
1273
+
1274
+ class CMsgCStrike15Welcome
1275
+ optional :store_item_hash, :uint32, 5
1276
+ optional :timeplayedconsecutively, :uint32, 6
1277
+ optional :time_first_played, :uint32, 10
1278
+ optional :last_time_played, :uint32, 12
1279
+ optional :last_ip_address, :uint32, 13
1280
+ optional :gscookieid, :uint64, 18
1281
+ optional :uniqueid, :uint64, 19
1282
+ end
1283
+
1284
+ class CMsgGCCStrike15_v2_ClientVarValueNotificationInfo
1285
+ optional :value_name, :string, 1
1286
+ optional :value_int, :int32, 2
1287
+ optional :server_addr, :uint32, 3
1288
+ optional :server_port, :uint32, 4
1289
+ repeated :choked_blocks, :string, 5
1290
+ end
1291
+
1292
+ class CMsgGCCStrike15_v2_ServerVarValueNotificationInfo
1293
+ optional :accountid, :uint32, 1
1294
+ repeated :viewangles, :uint32, 2
1295
+ optional :type, :uint32, 3
1296
+ end
1297
+
1298
+ class CMsgGCCStrike15_v2_GiftsLeaderboardRequest
1299
+ end
1300
+
1301
+ class CMsgGCCStrike15_v2_GiftsLeaderboardResponse
1302
+
1303
+ class GiftLeaderboardEntry
1304
+ optional :accountid, :uint32, 1
1305
+ optional :gifts, :uint32, 2
1306
+ end
1307
+ optional :servertime, :uint32, 1
1308
+ optional :time_period_seconds, :uint32, 2
1309
+ optional :total_gifts_given, :uint32, 3
1310
+ optional :total_givers, :uint32, 4
1311
+ repeated :entries, CMsgGCCStrike15_v2_GiftsLeaderboardResponse::GiftLeaderboardEntry, 5
1312
+ end
1313
+
1314
+ class CMsgGCCStrike15_v2_ClientSubmitSurveyVote
1315
+ optional :survey_id, :uint32, 1
1316
+ optional :vote, :uint32, 2
1317
+ end
1318
+
1319
+ class CMsgGCCStrike15_v2_Server2GCClientValidate
1320
+ optional :accountid, :uint32, 1
1321
+ end
1322
+
1323
+ class CMsgGCCStrike15_v2_Server2GCPureServerValidationFailure
1324
+ optional :accountid, :uint32, 1
1325
+ optional :path, :string, 2
1326
+ optional :file, :string, 3
1327
+ optional :crc, :uint32, 4
1328
+ optional :hash, :int32, 5
1329
+ optional :len, :int32, 6
1330
+ optional :pack_number, :int32, 7
1331
+ optional :pack_file_id, :int32, 8
1332
+ end
1333
+
1334
+ class CMsgGCCStrike15_v2_GC2ClientTournamentInfo
1335
+ optional :eventid, :uint32, 1
1336
+ optional :stageid, :uint32, 2
1337
+ optional :game_type, :uint32, 3
1338
+ repeated :teamids, :uint32, 4
1339
+ end
1340
+
1341
+ class CSOEconCoupon
1342
+ optional :entryid, :uint32, 1
1343
+ optional :defidx, :uint32, 2
1344
+ optional :expiration_date, :fixed32, 3
1345
+ end
1346
+
1347
+ class CSOQuestProgress
1348
+ optional :questid, :uint32, 1
1349
+ optional :points_remaining, :uint32, 2
1350
+ optional :bonus_points, :uint32, 3
1351
+ end
1352
+
1353
+ class CSOPersonaDataPublic
1354
+ optional :player_level, :int32, 1
1355
+ optional :commendation, PlayerCommendationInfo, 2
1356
+ end
1357
+
1358
+ class CMsgGC_GlobalGame_Subscribe
1359
+ optional :ticket, :uint64, 1
1360
+ end
1361
+
1362
+ class CMsgGC_GlobalGame_Unsubscribe
1363
+ optional :timeleft, :int32, 1
1364
+ end
1365
+
1366
+ class CMsgGC_GlobalGame_Play
1367
+ optional :ticket, :uint64, 1
1368
+ optional :gametimems, :uint32, 2
1369
+ optional :msperpoint, :uint32, 3
1370
+ end
1371
+
1372
+ class CMsgGCCStrike15_v2_AcknowledgePenalty
1373
+ optional :acknowledged, :int32, 1
1374
+ end
1375
+
1376
+ class CMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin
1377
+ end
1378
+
1379
+ class CMsgGCCStrike15_v2_Client2GCStreamUnlock
1380
+ optional :ticket, :uint64, 1
1381
+ optional :os, :int32, 2
1382
+ end