overlook-csgo 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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