steamd 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +4 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +6 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +21 -0
  9. data/README.md +51 -0
  10. data/Rakefile +22 -0
  11. data/bin/console +6 -0
  12. data/bin/setup +6 -0
  13. data/bin/steamd +6 -0
  14. data/grammar/class.treetop +63 -0
  15. data/grammar/enums.treetop +44 -0
  16. data/grammar/import.treetop +11 -0
  17. data/grammar/shared.treetop +62 -0
  18. data/grammar/steamd.treetop +15 -0
  19. data/language/emsg.steamd +1802 -0
  20. data/language/enums.steamd +989 -0
  21. data/language/eresult.steamd +119 -0
  22. data/language/gamecoordinator.steamd +17 -0
  23. data/language/header.steamd +37 -0
  24. data/language/netheader.steamd +62 -0
  25. data/language/steammsg.steamd +357 -0
  26. data/lib/ext/string.rb +33 -0
  27. data/lib/steamd.rb +40 -0
  28. data/lib/steamd/cli.rb +24 -0
  29. data/lib/steamd/cli_options.rb +58 -0
  30. data/lib/steamd/code_generator.rb +41 -0
  31. data/lib/steamd/generated/emsg.rb +3464 -0
  32. data/lib/steamd/generated/enums.rb +1750 -0
  33. data/lib/steamd/generated/eresult.rb +236 -0
  34. data/lib/steamd/generated/gamecoordinator.rb +119 -0
  35. data/lib/steamd/generated/header.rb +261 -0
  36. data/lib/steamd/generated/netheader.rb +315 -0
  37. data/lib/steamd/generated/steammsg.rb +2527 -0
  38. data/lib/steamd/generator.rb +6 -0
  39. data/lib/steamd/generator/generated_class.rb +128 -0
  40. data/lib/steamd/generator/generated_enum.rb +60 -0
  41. data/lib/steamd/generator/generated_import.rb +21 -0
  42. data/lib/steamd/generator/implementation.rb +83 -0
  43. data/lib/steamd/generator/ruby/class.erb +39 -0
  44. data/lib/steamd/generator/ruby/enum.erb +14 -0
  45. data/lib/steamd/generator/ruby/import.erb +1 -0
  46. data/lib/steamd/generator/ruby/ruby.rb +54 -0
  47. data/lib/steamd/generator/ruby/serializable_constant.rb +20 -0
  48. data/lib/steamd/generator/ruby/serializable_type.rb +93 -0
  49. data/lib/steamd/generator/ruby/serializable_variable.rb +85 -0
  50. data/lib/steamd/generator/ruby/steam_serializable.rb +89 -0
  51. data/lib/steamd/nodes/block_node.rb +14 -0
  52. data/lib/steamd/nodes/class_statement_node.rb +46 -0
  53. data/lib/steamd/nodes/class_type_node.rb +12 -0
  54. data/lib/steamd/nodes/enum_statement_node.rb +50 -0
  55. data/lib/steamd/nodes/enum_variable_node.rb +24 -0
  56. data/lib/steamd/nodes/import_statement_node.rb +26 -0
  57. data/lib/steamd/nodes/node.rb +3 -0
  58. data/lib/steamd/nodes/nodes.rb +10 -0
  59. data/lib/steamd/nodes/variable_node.rb +106 -0
  60. data/lib/steamd/parser.rb +157 -0
  61. data/lib/steamd/version.rb +14 -0
  62. data/steamd.gemspec +38 -0
  63. data/tasks/language.rake +11 -0
  64. metadata +220 -0
@@ -0,0 +1,119 @@
1
+ enum EResult
2
+ {
3
+ Invalid = 0;
4
+
5
+ OK = 1;
6
+ Fail = 2;
7
+ NoConnection = 3;
8
+ InvalidPassword = 5;
9
+ LoggedInElsewhere = 6;
10
+ InvalidProtocolVer = 7;
11
+ InvalidParam = 8;
12
+ FileNotFound = 9;
13
+ Busy = 10;
14
+ InvalidState = 11;
15
+ InvalidName = 12;
16
+ InvalidEmail = 13;
17
+ DuplicateName = 14;
18
+ AccessDenied = 15;
19
+ Timeout = 16;
20
+ Banned = 17;
21
+ AccountNotFound = 18;
22
+ InvalidSteamID = 19;
23
+ ServiceUnavailable = 20;
24
+ NotLoggedOn = 21;
25
+ Pending = 22;
26
+ EncryptionFailure = 23;
27
+ InsufficientPrivilege = 24;
28
+ LimitExceeded = 25;
29
+ Revoked = 26;
30
+ Expired = 27;
31
+ AlreadyRedeemed = 28;
32
+ DuplicateRequest = 29;
33
+ AlreadyOwned = 30;
34
+ IPNotFound = 31;
35
+ PersistFailed = 32;
36
+ LockingFailed = 33;
37
+ LogonSessionReplaced = 34;
38
+ ConnectFailed = 35;
39
+ HandshakeFailed = 36;
40
+ IOFailure = 37;
41
+ RemoteDisconnect = 38;
42
+ ShoppingCartNotFound = 39;
43
+ Blocked = 40;
44
+ Ignored = 41;
45
+ NoMatch = 42;
46
+ AccountDisabled = 43;
47
+ ServiceReadOnly = 44;
48
+ AccountNotFeatured = 45;
49
+ AdministratorOK = 46;
50
+ ContentVersion = 47;
51
+ TryAnotherCM = 48;
52
+ PasswordRequiredToKickSession = 49;
53
+ AlreadyLoggedInElsewhere = 50;
54
+ Suspended = 51;
55
+ Cancelled = 52;
56
+ DataCorruption = 53;
57
+ DiskFull = 54;
58
+ RemoteCallFailed = 55;
59
+ PasswordNotSet = 56; obsolete "renamed to PasswordUnset"
60
+ PasswordUnset = 56;
61
+ ExternalAccountUnlinked = 57;
62
+ PSNTicketInvalid = 58;
63
+ ExternalAccountAlreadyLinked = 59;
64
+ RemoteFileConflict = 60;
65
+ IllegalPassword = 61;
66
+ SameAsPreviousValue = 62;
67
+ AccountLogonDenied = 63;
68
+ CannotUseOldPassword = 64;
69
+ InvalidLoginAuthCode = 65;
70
+ AccountLogonDeniedNoMailSent = 66; obsolete "renamed to AccountLogonDeniedNoMail"
71
+ AccountLogonDeniedNoMail = 66;
72
+ HardwareNotCapableOfIPT = 67;
73
+ IPTInitError = 68;
74
+ ParentalControlRestricted = 69;
75
+ FacebookQueryError = 70;
76
+ ExpiredLoginAuthCode = 71;
77
+ IPLoginRestrictionFailed = 72;
78
+ AccountLocked = 73; obsolete "renamed to AccountLockedDown"
79
+ AccountLockedDown = 73;
80
+ AccountLogonDeniedVerifiedEmailRequired = 74;
81
+ NoMatchingURL = 75;
82
+ BadResponse = 76;
83
+ RequirePasswordReEntry = 77;
84
+ ValueOutOfRange = 78;
85
+ UnexpectedError = 79;
86
+ Disabled = 80;
87
+ InvalidCEGSubmission = 81;
88
+ RestrictedDevice = 82;
89
+ RegionLocked = 83;
90
+ RateLimitExceeded = 84;
91
+ AccountLogonDeniedNeedTwoFactorCode = 85; obsolete "renamed to AccountLoginDeniedNeedTwoFactor"
92
+ AccountLoginDeniedNeedTwoFactor = 85;
93
+ ItemOrEntryHasBeenDeleted = 86; obsolete "renamed to ItemDeleted"
94
+ ItemDeleted = 86;
95
+ AccountLoginDeniedThrottle = 87;
96
+ TwoFactorCodeMismatch = 88;
97
+ TwoFactorActivationCodeMismatch = 89;
98
+ AccountAssociatedToMultiplePlayers = 90; obsolete "renamed to AccountAssociatedToMultiplePartners"
99
+ AccountAssociatedToMultiplePartners = 90;
100
+ NotModified = 91;
101
+ NoMobileDeviceAvailable = 92; obsolete "renamed to NoMobileDevice"
102
+ NoMobileDevice = 92;
103
+ TimeIsOutOfSync = 93; obsolete "renamed to TimeNotSynced"
104
+ TimeNotSynced = 93;
105
+ SMSCodeFailed = 94;
106
+ TooManyAccountsAccessThisResource = 95; obsolete "renamed to AccountLimitExceeded"
107
+ AccountLimitExceeded = 95;
108
+ AccountActivityLimitExceeded = 96;
109
+ PhoneActivityLimitExceeded = 97;
110
+ RefundToWallet = 98;
111
+ EmailSendFailure = 99;
112
+ NotSettled = 100;
113
+ NeedCaptcha = 101;
114
+ GSLTDenied = 102;
115
+ GSOwnerDenied = 103;
116
+ InvalidItemType = 104;
117
+ IPBanned = 105;
118
+ GSLTExpired = 106;
119
+ };
@@ -0,0 +1,17 @@
1
+
2
+
3
+ class MsgGCHdrProtoBuf
4
+ {
5
+ protomaskgc uint msg = 0;
6
+ int headerLength;
7
+
8
+ proto<headerLength> SteamKit2.GC.Internal.CMsgProtoBufHeader proto;
9
+ };
10
+
11
+ class MsgGCHdr
12
+ {
13
+ ushort headerVersion = 1;
14
+
15
+ ulong targetJobID = ulong.MaxValue;
16
+ ulong sourceJobID = ulong.MaxValue;
17
+ };
@@ -0,0 +1,37 @@
1
+ #import "emsg.steamd"
2
+ #import "eresult.steamd"
3
+ #import "enums.steamd"
4
+ #import "netheader.steamd"
5
+
6
+ class MsgHdr
7
+ {
8
+ EMsg msg = EMsg::Invalid;
9
+
10
+ ulong targetJobID = ulong.MaxValue;
11
+ ulong sourceJobID = ulong.MaxValue;
12
+ };
13
+
14
+ class ExtendedClientMsgHdr
15
+ {
16
+ EMsg msg = EMsg::Invalid;
17
+
18
+ byte headerSize = 36;
19
+
20
+ ushort headerVersion = 2;
21
+
22
+ ulong targetJobID = ulong.MaxValue;
23
+ ulong sourceJobID = ulong.MaxValue;
24
+
25
+ byte headerCanary = 239;
26
+
27
+ steamidmarshal ulong steamID;
28
+ int sessionID;
29
+ };
30
+
31
+ class MsgHdrProtoBuf
32
+ {
33
+ protomask EMsg msg = EMsg::Invalid;
34
+ int headerLength;
35
+
36
+ proto<headerLength> SteamKit2.Internal.CMsgProtoBufHeader proto;
37
+ };
@@ -0,0 +1,62 @@
1
+ enum EUdpPacketType<byte>
2
+ {
3
+ Invalid = 0;
4
+
5
+ ChallengeReq = 1;
6
+ Challenge = 2;
7
+ Connect = 3;
8
+ Accept = 4;
9
+ Disconnect = 5;
10
+ Data = 6;
11
+ Datagram = 7;
12
+ Max = 8;
13
+ };
14
+
15
+ class UdpHeader
16
+ {
17
+ const uint MAGIC = 0x31305356;
18
+
19
+ uint magic = UdpHeader::MAGIC;
20
+
21
+ ushort payloadSize;
22
+ EUdpPacketType packetType = EUdpPacketType::Invalid;
23
+ byte flags;
24
+
25
+ uint sourceConnID = 512;
26
+ uint destConnID;
27
+
28
+ uint seqThis;
29
+ uint seqAck;
30
+
31
+ uint packetsInMsg;
32
+ uint msgStartSeq;
33
+
34
+ uint msgSize;
35
+ };
36
+
37
+ class ChallengeData
38
+ {
39
+ const uint CHALLENGE_MASK = 0xA426DF2B;
40
+
41
+ uint challengeValue;
42
+ uint serverLoad;
43
+ };
44
+
45
+ class ConnectData
46
+ {
47
+ const uint CHALLENGE_MASK = ChallengeData::CHALLENGE_MASK;
48
+
49
+ uint challengeValue;
50
+ };
51
+
52
+ class Accept
53
+ {
54
+ };
55
+
56
+ class Datagram
57
+ {
58
+ };
59
+
60
+ class Disconnect
61
+ {
62
+ };
@@ -0,0 +1,357 @@
1
+ #import "header.steamd"
2
+
3
+ #import "gamecoordinator.steamd"
4
+
5
+ class MsgClientJustStrings<EMsg::Invalid>
6
+ {
7
+ };
8
+
9
+ class MsgClientGenericResponse<EMsg::Invalid>
10
+ {
11
+ EResult result;
12
+ };
13
+
14
+ class MsgChannelEncryptRequest<EMsg::ChannelEncryptRequest>
15
+ {
16
+ const uint PROTOCOL_VERSION = 1;
17
+
18
+ uint protocolVersion = MsgChannelEncryptRequest::PROTOCOL_VERSION;
19
+ EUniverse universe = EUniverse::Invalid;
20
+ };
21
+
22
+ class MsgChannelEncryptResponse<EMsg::ChannelEncryptResponse>
23
+ {
24
+ uint protocolVersion = MsgChannelEncryptRequest::PROTOCOL_VERSION;
25
+ uint keySize = 128;
26
+ };
27
+
28
+ class MsgChannelEncryptResult<EMsg::ChannelEncryptResult>
29
+ {
30
+ EResult result = EResult::Invalid;
31
+ };
32
+
33
+ class MsgClientNewLoginKey<EMsg::ClientNewLoginKey>
34
+ {
35
+ uint uniqueID;
36
+ byte<20> loginKey;
37
+ };
38
+
39
+ class MsgClientNewLoginKeyAccepted<EMsg::ClientNewLoginKeyAccepted>
40
+ {
41
+ uint uniqueID;
42
+ };
43
+
44
+ class MsgClientLogon<EMsg::ClientLogon>
45
+ {
46
+ const uint ObfuscationMask = 0xBAADF00D;
47
+ const uint CurrentProtocol = 65579;
48
+
49
+ const uint ProtocolVerMajorMask = 0xFFFF0000;
50
+ const uint ProtocolVerMinorMask = 0xFFFF;
51
+
52
+ const ushort ProtocolVerMinorMinGameServers = 4;
53
+ const ushort ProtocolVerMinorMinForSupportingEMsgMulti = 12;
54
+ const ushort ProtocolVerMinorMinForSupportingEMsgClientEncryptPct = 14;
55
+ const ushort ProtocolVerMinorMinForExtendedMsgHdr = 17;
56
+ const ushort ProtocolVerMinorMinForCellId = 18;
57
+ const ushort ProtocolVerMinorMinForSessionIDLast = 19;
58
+ const ushort ProtocolVerMinorMinForServerAvailablityMsgs = 24;
59
+ const ushort ProtocolVerMinorMinClients = 25;
60
+ const ushort ProtocolVerMinorMinForOSType = 26;
61
+ const ushort ProtocolVerMinorMinForCegApplyPESig = 27;
62
+ const ushort ProtocolVerMinorMinForMarketingMessages2 = 27;
63
+ const ushort ProtocolVerMinorMinForAnyProtoBufMessages = 28;
64
+ const ushort ProtocolVerMinorMinForProtoBufLoggedOffMessage = 28;
65
+ const ushort ProtocolVerMinorMinForProtoBufMultiMessages = 28;
66
+ const ushort ProtocolVerMinorMinForSendingProtocolToUFS = 30;
67
+ const ushort ProtocolVerMinorMinForMachineAuth = 33;
68
+ const ushort ProtocolVerMinorMinForSessionIDLastAnon = 36;
69
+ const ushort ProtocolVerMinorMinForEnhancedAppList = 40;
70
+ const ushort ProtocolVerMinorMinForGzipMultiMessages = 43;
71
+ };
72
+
73
+ class MsgClientVACBanStatus<EMsg::ClientVACBanStatus>
74
+ {
75
+ uint numBans;
76
+ };
77
+
78
+ class MsgClientAppUsageEvent<EMsg::ClientAppUsageEvent>
79
+ {
80
+ EAppUsageEvent appUsageEvent;
81
+ gameidmarshal ulong gameID;
82
+ ushort offline;
83
+ };
84
+
85
+ class MsgClientEmailAddrInfo<EMsg::ClientEmailAddrInfo>
86
+ {
87
+ uint passwordStrength;
88
+ uint flagsAccountSecurityPolicy;
89
+ boolmarshal byte validated;
90
+ };
91
+
92
+ class MsgClientUpdateGuestPassesList<EMsg::ClientUpdateGuestPassesList>
93
+ {
94
+ EResult result;
95
+ int countGuestPassesToGive;
96
+ int countGuestPassesToRedeem;
97
+ };
98
+
99
+ class MsgClientRequestedClientStats<EMsg::ClientRequestedClientStats>
100
+ {
101
+ int countStats;
102
+ };
103
+
104
+
105
+ class MsgClientP2PIntroducerMessage<EMsg::ClientP2PIntroducerMessage>
106
+ {
107
+ steamidmarshal ulong steamID;
108
+ EIntroducerRouting routingType;
109
+ byte<1450> data;
110
+ uint dataLen;
111
+ };
112
+
113
+ class MsgClientOGSBeginSession<EMsg::ClientOGSBeginSession>
114
+ {
115
+ byte accountType;
116
+ steamidmarshal ulong accountId;
117
+ uint appId;
118
+ uint timeStarted;
119
+ };
120
+
121
+ class MsgClientOGSBeginSessionResponse<EMsg::ClientOGSBeginSessionResponse>
122
+ {
123
+ EResult result;
124
+ boolmarshal byte collectingAny;
125
+ boolmarshal byte collectingDetails;
126
+ ulong sessionId;
127
+ };
128
+
129
+ class MsgClientOGSEndSession<EMsg::ClientOGSEndSession>
130
+ {
131
+ ulong sessionId;
132
+ uint timeEnded;
133
+ int reasonCode;
134
+ int countAttributes;
135
+ };
136
+
137
+ class MsgClientOGSEndSessionResponse<EMsg::ClientOGSEndSessionResponse>
138
+ {
139
+ EResult result;
140
+ };
141
+
142
+
143
+ class MsgClientOGSWriteRow<EMsg::ClientOGSWriteRow>
144
+ {
145
+ ulong sessionId;
146
+ int countAttributes;
147
+ };
148
+
149
+ class MsgClientGetFriendsWhoPlayGame<EMsg::ClientGetFriendsWhoPlayGame>
150
+ {
151
+ gameidmarshal ulong gameId;
152
+ };
153
+
154
+ class MsgClientGetFriendsWhoPlayGameResponse<EMsg::ClientGetFriendsWhoPlayGameResponse>
155
+ {
156
+ EResult result;
157
+ gameidmarshal ulong gameId;
158
+ uint countFriends;
159
+ };
160
+
161
+ class MsgGSPerformHardwareSurvey<EMsg::GSPerformHardwareSurvey>
162
+ {
163
+ uint flags;
164
+ };
165
+
166
+ class MsgGSGetPlayStatsResponse<EMsg::GSGetPlayStatsResponse>
167
+ {
168
+ EResult result;
169
+ int rank;
170
+ uint lifetimeConnects;
171
+ uint lifetimeMinutesPlayed;
172
+ };
173
+
174
+ class MsgGSGetReputationResponse<EMsg::GSGetReputationResponse>
175
+ {
176
+ EResult result;
177
+ uint reputationScore;
178
+ boolmarshal byte banned;
179
+ uint bannedIp;
180
+ ushort bannedPort;
181
+ ulong bannedGameId;
182
+ uint timeBanExpires;
183
+ };
184
+
185
+ class MsgGSDeny<EMsg::GSDeny>
186
+ {
187
+ steamidmarshal ulong steamId;
188
+ EDenyReason denyReason;
189
+ };
190
+
191
+ class MsgGSApprove<EMsg::GSApprove>
192
+ {
193
+ steamidmarshal ulong steamId;
194
+ };
195
+
196
+ class MsgGSKick<EMsg::GSKick>
197
+ {
198
+ steamidmarshal ulong steamId;
199
+ EDenyReason denyReason;
200
+ int waitTilMapChange;
201
+ };
202
+
203
+ class MsgGSGetUserGroupStatus<EMsg::GSGetUserGroupStatus>
204
+ {
205
+ steamidmarshal ulong steamIdUser;
206
+ steamidmarshal ulong steamIdGroup;
207
+ };
208
+
209
+ class MsgGSGetUserGroupStatusResponse<EMsg::GSGetUserGroupStatusResponse>
210
+ {
211
+ steamidmarshal ulong steamIdUser;
212
+ steamidmarshal ulong steamIdGroup;
213
+ EClanRelationship clanRelationship;
214
+ EClanRank clanRank;
215
+ };
216
+
217
+ class MsgClientJoinChat<EMsg::ClientJoinChat>
218
+ {
219
+ steamidmarshal ulong steamIdChat;
220
+ boolmarshal byte isVoiceSpeaker;
221
+ };
222
+
223
+ class MsgClientChatEnter<EMsg::ClientChatEnter>
224
+ {
225
+ steamidmarshal ulong steamIdChat;
226
+ steamidmarshal ulong steamIdFriend;
227
+
228
+ EChatRoomType chatRoomType;
229
+
230
+ steamidmarshal ulong steamIdOwner;
231
+ steamidmarshal ulong steamIdClan;
232
+
233
+ byte chatFlags;
234
+
235
+ EChatRoomEnterResponse enterResponse;
236
+
237
+ int numMembers;
238
+ };
239
+
240
+ class MsgClientChatMsg<EMsg::ClientChatMsg>
241
+ {
242
+ steamidmarshal ulong steamIdChatter;
243
+ steamidmarshal ulong steamIdChatRoom;
244
+ EChatEntryType chatMsgType;
245
+ };
246
+
247
+ class MsgClientChatMemberInfo<EMsg::ClientChatMemberInfo>
248
+ {
249
+ steamidmarshal ulong steamIdChat;
250
+ EChatInfoType type;
251
+ };
252
+
253
+ class MsgClientChatAction<EMsg::ClientChatAction>
254
+ {
255
+ steamidmarshal ulong steamIdChat;
256
+ steamidmarshal ulong steamIdUserToActOn;
257
+ EChatAction chatAction;
258
+ };
259
+
260
+ class MsgClientChatActionResult<EMsg::ClientChatActionResult>
261
+ {
262
+ steamidmarshal ulong steamIdChat;
263
+ steamidmarshal ulong steamIdUserActedOn;
264
+ EChatAction chatAction;
265
+ EChatActionResult actionResult;
266
+ };
267
+
268
+ class MsgClientChatRoomInfo<EMsg::ClientChatRoomInfo>
269
+ {
270
+ steamidmarshal ulong steamIdChat;
271
+ EChatInfoType type;
272
+ };
273
+
274
+ class MsgClientSetIgnoreFriend<EMsg::ClientSetIgnoreFriend>
275
+ {
276
+ steamidmarshal ulong mySteamId;
277
+ steamidmarshal ulong steamIdFriend;
278
+
279
+ byte ignore;
280
+ };
281
+
282
+ class MsgClientSetIgnoreFriendResponse<EMsg::ClientSetIgnoreFriendResponse>
283
+ {
284
+ ulong unknown;
285
+
286
+ EResult result;
287
+ };
288
+
289
+ class MsgClientLoggedOff<EMsg::ClientLoggedOff>
290
+ {
291
+ EResult result;
292
+ int secMinReconnectHint;
293
+ int secMaxReconnectHint;
294
+ };
295
+
296
+ class MsgClientLogOnResponse<EMsg::ClientLogOnResponse>
297
+ {
298
+ EResult result;
299
+ int outOfGameHeartbeatRateSec;
300
+ int inGameHeartbeatRateSec;
301
+ steamidmarshal ulong clientSuppliedSteamId;
302
+ uint ipPublic;
303
+ uint serverRealTime;
304
+ };
305
+
306
+ class MsgClientSendGuestPass<EMsg::ClientSendGuestPass>
307
+ {
308
+ ulong giftId;
309
+ byte giftType;
310
+ uint accountId;
311
+ };
312
+
313
+ class MsgClientSendGuestPassResponse<EMsg::ClientSendGuestPassResponse>
314
+ {
315
+ EResult result;
316
+ };
317
+
318
+ class MsgClientServerUnavailable<EMsg::ClientServerUnavailable>
319
+ {
320
+ ulong jobidSent;
321
+ uint eMsgSent;
322
+ EServerType eServerTypeUnavailable;
323
+ };
324
+
325
+ class MsgClientCreateChat<EMsg::ClientCreateChat>
326
+ {
327
+ EChatRoomType chatRoomType;
328
+
329
+ gameidmarshal ulong gameId;
330
+
331
+ steamidmarshal ulong steamIdClan;
332
+
333
+ EChatPermission permissionOfficer;
334
+ EChatPermission permissionMember;
335
+ EChatPermission permissionAll;
336
+
337
+ uint membersMax;
338
+
339
+ byte chatFlags;
340
+
341
+ steamidmarshal ulong steamIdFriendChat;
342
+ steamidmarshal ulong steamIdInvited;
343
+ };
344
+
345
+ class MsgClientCreateChatResponse<EMsg::ClientCreateChatResponse>
346
+ {
347
+ EResult result;
348
+ steamidmarshal ulong steamIdChat;
349
+ EChatRoomType chatRoomType;
350
+ steamidmarshal ulong steamIdFriendChat;
351
+ };
352
+
353
+ class MsgClientMarketingMessageUpdate2<EMsg::ClientMarketingMessageUpdate2>
354
+ {
355
+ uint marketingMessageUpdateTime;
356
+ uint count;
357
+ };