Revision 119:66352054ce4d Client/UPackets.pas

b/Client/UPackets.pas
1
(*
2
 * CDDL HEADER START
3
 *
4
 * The contents of this file are subject to the terms of the
5
 * Common Development and Distribution License, Version 1.0 only
6
 * (the "License").  You may not use this file except in compliance
7
 * with the License.
8
 *
9
 * You can obtain a copy of the license at
10
 * http://www.opensource.org/licenses/cddl1.php.
11
 * See the License for the specific language governing permissions
12
 * and limitations under the License.
13
 *
14
 * When distributing Covered Code, include this CDDL HEADER in each
15
 * file and include the License file at
16
 * http://www.opensource.org/licenses/cddl1.php.  If applicable,
17
 * add the following below this CDDL HEADER, with the fields enclosed
18
 * by brackets "[]" replaced with your own identifying * information:
19
 *      Portions Copyright [yyyy] [name of copyright owner]
20
 *
21
 * CDDL HEADER END
22
 *
23
 *
24
 *      Portions Copyright 2009 Andreas Schneider
25
 *)
26
unit UPackets;
27

  
28
interface
29

  
30
uses
31
  Classes, dzlib, UEnhancedMemoryStream, UPacket, UMap, UStatics;
32

  
33
type
34
  TBlockCoords = packed record
35
    X: Word;
36
    Y: Word;
37
  end;
38
  TBlockCoordsArray = array of TBlockCoords;
39
  
40
  { TCompressedPacket }
41

  
42
  TCompressedPacket = class(TPacket)
43
    constructor Create(APacket: TPacket);
44
  end;
45
  
46
  { TLoginRequestPacket }
47

  
48
  TLoginRequestPacket = class(TPacket)
49
    constructor Create(AUsername, APassword: string);
50
  end;
51
  
52
  { TQuitPacket }
53

  
54
  TQuitPacket = class(TPacket)
55
    constructor Create;
56
  end;
57
    
58
  { TRequestBlocksPacket }
59

  
60
  TRequestBlocksPacket = class(TPacket)
61
    constructor Create(ACoords: TBlockCoordsArray);
62
  end;
63
  
64
  { TFreeBlockPacket }
65

  
66
  TFreeBlockPacket = class(TPacket)
67
    constructor Create(AX, AY: Word);
68
  end;
69
  
70
  { TDrawMapPacket }
71

  
72
  TDrawMapPacket = class(TPacket)
73
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word);
74
  end;
75

  
76
  { TStaticPacket }
77

  
78
  TStaticPacket = class(TPacket)
79
  protected
80
    procedure WriteStaticItem(AStaticItem: TStaticItem);
81
  end;
82
  
83
  { TInsertStaticPacket }
84

  
85
  TInsertStaticPacket = class(TPacket)
86
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word);
87
  end;
88
  
89
  { TDeleteStaticPacket }
90

  
91
  TDeleteStaticPacket = class(TStaticPacket)
92
    constructor Create(AStaticItem: TStaticItem);
93
  end;
94
  
95
  { TElevateStaticPacket }
96

  
97
  TElevateStaticPacket = class(TStaticPacket)
98
    constructor Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
99
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
100
      ANewZ: Word);
101
  end;
102
  
103
  { TMoveStaticPacket }
104

  
105
  TMoveStaticPacket = class(TStaticPacket)
106
    constructor Create(AStaticItem: TStaticItem; ANewX, ANewY: Word);
107
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
108
      ANewX, ANewY: Word);
109
  end;
110
  
111
  { THueStaticPacket }
112

  
113
  THueStaticPacket = class(TStaticPacket)
114
    constructor Create(AStaticItem: TStaticItem; ANewHue: Word);
115
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
116
      ANewHue: Word);
117
  end;
118
  
119
  { TUpdateClientPosPacket }
120

  
121
  TUpdateClientPosPacket = class(TPacket)
122
    constructor Create(AX, AY: Word);
123
  end;
124
  
125
  { TChatMessagePacket }
126

  
127
  TChatMessagePacket = class(TPacket)
128
    constructor Create(AMessage: string);
129
  end;
130
  
131
  { TGotoClientPosPacket }
132

  
133
  TGotoClientPosPacket = class(TPacket)
134
    constructor Create(AUsername: string);
135
  end;
136
  
137
  { TRequestRadarChecksumPacket }
138

  
139
  TRequestRadarChecksumPacket = class(TPacket)
140
    constructor Create;
141
  end;
142
  
143
  { TRequestRadarMapPacket }
144

  
145
  TRequestRadarMapPacket = class(TPacket)
146
    constructor Create;
147
  end;
148
  
149
  { TNoOpPacket }
150

  
151
  TNoOpPacket = class(TPacket)
152
    constructor Create;
153
  end;
154

  
155
implementation
156

  
157
{ TCompressedPacket }
158

  
159
constructor TCompressedPacket.Create(APacket: TPacket);
160
var
161
  compBuffer: TEnhancedMemoryStream;
162
  compStream: TCompressionStream;
163
  sourceStream: TStream;
164
begin
165
  inherited Create($01, 0);
166
  compBuffer := TEnhancedMemoryStream.Create;
167
  compStream := TCompressionStream.Create(clMax, compBuffer);
168
  sourceStream := APacket.Stream;  
169
  compStream.CopyFrom(sourceStream, 0);
170
  compStream.Free;  
171
  FStream.WriteCardinal(sourceStream.Size);
172
  FStream.CopyFrom(compBuffer, 0);
173
  compBuffer.Free;
174
  APacket.Free;
175
end;
176

  
177
{ TLoginRequestPacket }
178

  
179
constructor TLoginRequestPacket.Create(AUsername, APassword: string);
180
begin
181
  inherited Create($02, 0);
182
  FStream.WriteByte($03);
183
  FStream.WriteStringNull(AUsername);
184
  FStream.WriteStringNull(APassword);
185
end;
186

  
187
{ TQuitPacket }
188

  
189
constructor TQuitPacket.Create;
190
begin
191
  inherited Create($02, 0);
192
  FStream.WriteByte($05);
193
end;
194

  
195
{ TRequestBlocksPacket }
196

  
197
constructor TRequestBlocksPacket.Create(ACoords: TBlockCoordsArray);
198
var
199
  i: Integer;
200
begin
201
  inherited Create($04, 0);
202
  FStream.Write(ACoords[0], Length(ACoords) * SizeOf(TBlockCoords));
203
end;
204

  
205
{ TFreeBlockPacket }
206

  
207
constructor TFreeBlockPacket.Create(AX, AY: Word);
208
begin
209
  inherited Create($05, 5);
210
  FStream.WriteWord(AX);
211
  FStream.WriteWord(AY);
212
end;
213

  
214
{ TDrawMapPacket }
215

  
216
constructor TDrawMapPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word);
217
begin
218
  inherited Create($06, 8);
219
  FStream.WriteWord(AX);
220
  FStream.WriteWord(AY);
221
  FStream.WriteShortInt(AZ);
222
  FStream.WriteWord(ATileID);
223
end;
224

  
225
{ TStaticPacket }
226

  
227
procedure TStaticPacket.WriteStaticItem(AStaticItem: TStaticItem);
228
begin
229
  FStream.WriteWord(AStaticItem.X);
230
  FStream.WriteWord(AStaticItem.Y);
231
  FStream.WriteShortInt(AStaticItem.Z);
232
  FStream.WriteWord(AStaticItem.TileID);
233
  FStream.WriteWord(AStaticItem.Hue);
234
end;
235

  
236
{ TInsertStaticPacket }
237

  
238
constructor TInsertStaticPacket.Create(AX, AY: Word; AZ: ShortInt;
239
  ATileID: Word; AHue: Word);
240
begin
241
  inherited Create($07, 10);
242
  FStream.WriteWord(AX);
243
  FStream.WriteWord(AY);
244
  FStream.WriteShortInt(AZ);
245
  FStream.WriteWord(ATileID);
246
  FStream.WriteWord(AHue);
247
end;
248

  
249
{ TDeleteStaticPacket }
250

  
251
constructor TDeleteStaticPacket.Create(AStaticItem: TStaticItem);
252
begin
253
  inherited Create($08, 10);
254
  WriteStaticItem(AStaticItem);
255
end;
256

  
257
{ TElevateStaticPacket }
258

  
259
constructor TElevateStaticPacket.Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
260
begin
261
  inherited Create($09, 11);
262
  WriteStaticItem(AStaticItem);
263
  FStream.WriteShortInt(ANewZ);
264
end;
265

  
266
constructor TElevateStaticPacket.Create(AX, AY: Word; AZ: ShortInt;
267
  ATileID: Word; AHue: Word; ANewZ: Word);
268
begin
269
  inherited Create($09, 11);
270
  FStream.WriteWord(AX);
271
  FStream.WriteWord(AY);
272
  FStream.WriteShortInt(AZ);
273
  FStream.WriteWord(ATileID);
274
  FStream.WriteWord(AHue);
275
  FStream.WriteShortInt(ANewZ);
276
end;
277

  
278
{ TMoveStaticPacket }
279

  
280
constructor TMoveStaticPacket.Create(AStaticItem: TStaticItem; ANewX,
281
  ANewY: Word);
282
begin
283
  inherited Create($0A, 14);
284
  WriteStaticItem(AStaticItem);
285
  FStream.WriteWord(ANewX);
286
  FStream.WriteWord(ANewY);
287
end;
288

  
289
constructor TMoveStaticPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word;
290
  AHue: Word; ANewX, ANewY: Word);
291
begin
292
  inherited Create($0A, 14);
293
  FStream.WriteWord(AX);
294
  FStream.WriteWord(AY);
295
  FStream.WriteShortInt(AZ);
296
  FStream.WriteWord(ATileID);
297
  FStream.WriteWord(AHue);
298
  FStream.WriteWord(ANewX);
299
  FStream.WriteWord(ANewY);
300
end;
301

  
302
{ THueStaticPacket }
303

  
304
constructor THueStaticPacket.Create(AStaticItem: TStaticItem; ANewHue: Word);
305
begin
306
  inherited Create($0B, 12);
307
  WriteStaticItem(AStaticItem);
308
  FStream.WriteWord(ANewHue);
309
end;
310

  
311
constructor THueStaticPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word;
312
  AHue: Word; ANewHue: Word);
313
begin
314
  inherited Create($0B, 12);
315
  FStream.WriteWord(AX);
316
  FStream.WriteWord(AY);
317
  FStream.WriteShortInt(AZ);
318
  FStream.WriteWord(ATileID);
319
  FStream.WriteWord(AHue);
320
  FStream.WriteWord(ANewHue);
321
end;
322

  
323
{ TUpdateClientPosPacket }
324

  
325
constructor TUpdateClientPosPacket.Create(AX, AY: Word);
326
begin
327
  inherited Create($0C, 0);
328
  FStream.WriteByte($04);
329
  FStream.WriteWord(AX);
330
  FStream.WriteWord(AY);
331
end;
332

  
333
{ TChatMessagePacket }
334

  
335
constructor TChatMessagePacket.Create(AMessage: string);
336
begin
337
  inherited Create($0C, 0);
338
  FStream.WriteByte($05);
339
  FStream.WriteStringNull(AMessage);
340
end;
341

  
342
{ TGotoClientPosPacket }
343

  
344
constructor TGotoClientPosPacket.Create(AUsername: string);
345
begin
346
  inherited Create($0C, 0);
347
  FStream.WriteByte($06);
348
  FStream.WriteStringNull(AUsername);
349
end;
350

  
351
{ TRequestRadarChecksumPacket }
352

  
353
constructor TRequestRadarChecksumPacket.Create;
354
begin
355
  inherited Create($0D, 2);
356
  FStream.WriteByte($01);
357
end;
358

  
359
{ TRequestRadarMapPacket }
360

  
361
constructor TRequestRadarMapPacket.Create;
362
begin
363
  inherited Create($0D, 2);
364
  FStream.WriteByte($02);
365
end;
366

  
367
{ TNoOpPacket }
368

  
369
constructor TNoOpPacket.Create;
370
begin
371
  inherited Create($FF, 1);
372
end;
373

  
374
end.
375

  
1
(*
2
 * CDDL HEADER START
3
 *
4
 * The contents of this file are subject to the terms of the
5
 * Common Development and Distribution License, Version 1.0 only
6
 * (the "License").  You may not use this file except in compliance
7
 * with the License.
8
 *
9
 * You can obtain a copy of the license at
10
 * http://www.opensource.org/licenses/cddl1.php.
11
 * See the License for the specific language governing permissions
12
 * and limitations under the License.
13
 *
14
 * When distributing Covered Code, include this CDDL HEADER in each
15
 * file and include the License file at
16
 * http://www.opensource.org/licenses/cddl1.php.  If applicable,
17
 * add the following below this CDDL HEADER, with the fields enclosed
18
 * by brackets "[]" replaced with your own identifying * information:
19
 *      Portions Copyright [yyyy] [name of copyright owner]
20
 *
21
 * CDDL HEADER END
22
 *
23
 *
24
 *      Portions Copyright 2009 Andreas Schneider
25
 *)
26
unit UPackets;
27

  
28
interface
29

  
30
uses
31
  Classes, dzlib, UEnhancedMemoryStream, UPacket, UStatics;
32

  
33
type
34
  TBlockCoords = packed record
35
    X: Word;
36
    Y: Word;
37
  end;
38
  TBlockCoordsArray = array of TBlockCoords;
39
  
40
  { TCompressedPacket }
41

  
42
  TCompressedPacket = class(TPacket)
43
    constructor Create(APacket: TPacket);
44
  end;
45
  
46
  { TLoginRequestPacket }
47

  
48
  TLoginRequestPacket = class(TPacket)
49
    constructor Create(AUsername, APassword: string);
50
  end;
51
  
52
  { TQuitPacket }
53

  
54
  TQuitPacket = class(TPacket)
55
    constructor Create;
56
  end;
57
    
58
  { TRequestBlocksPacket }
59

  
60
  TRequestBlocksPacket = class(TPacket)
61
    constructor Create(ACoords: TBlockCoordsArray);
62
  end;
63
  
64
  { TFreeBlockPacket }
65

  
66
  TFreeBlockPacket = class(TPacket)
67
    constructor Create(AX, AY: Word);
68
  end;
69
  
70
  { TDrawMapPacket }
71

  
72
  TDrawMapPacket = class(TPacket)
73
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word);
74
  end;
75

  
76
  { TStaticPacket }
77

  
78
  TStaticPacket = class(TPacket)
79
  protected
80
    procedure WriteStaticItem(AStaticItem: TStaticItem);
81
  end;
82
  
83
  { TInsertStaticPacket }
84

  
85
  TInsertStaticPacket = class(TPacket)
86
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word);
87
  end;
88
  
89
  { TDeleteStaticPacket }
90

  
91
  TDeleteStaticPacket = class(TStaticPacket)
92
    constructor Create(AStaticItem: TStaticItem);
93
  end;
94
  
95
  { TElevateStaticPacket }
96

  
97
  TElevateStaticPacket = class(TStaticPacket)
98
    constructor Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
99
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
100
      ANewZ: Word);
101
  end;
102
  
103
  { TMoveStaticPacket }
104

  
105
  TMoveStaticPacket = class(TStaticPacket)
106
    constructor Create(AStaticItem: TStaticItem; ANewX, ANewY: Word);
107
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
108
      ANewX, ANewY: Word);
109
  end;
110
  
111
  { THueStaticPacket }
112

  
113
  THueStaticPacket = class(TStaticPacket)
114
    constructor Create(AStaticItem: TStaticItem; ANewHue: Word);
115
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word;
116
      ANewHue: Word);
117
  end;
118
  
119
  { TUpdateClientPosPacket }
120

  
121
  TUpdateClientPosPacket = class(TPacket)
122
    constructor Create(AX, AY: Word);
123
  end;
124
  
125
  { TChatMessagePacket }
126

  
127
  TChatMessagePacket = class(TPacket)
128
    constructor Create(AMessage: string);
129
  end;
130
  
131
  { TGotoClientPosPacket }
132

  
133
  TGotoClientPosPacket = class(TPacket)
134
    constructor Create(AUsername: string);
135
  end;
136
  
137
  { TRequestRadarChecksumPacket }
138

  
139
  TRequestRadarChecksumPacket = class(TPacket)
140
    constructor Create;
141
  end;
142
  
143
  { TRequestRadarMapPacket }
144

  
145
  TRequestRadarMapPacket = class(TPacket)
146
    constructor Create;
147
  end;
148
  
149
  { TNoOpPacket }
150

  
151
  TNoOpPacket = class(TPacket)
152
    constructor Create;
153
  end;
154

  
155
implementation
156

  
157
{ TCompressedPacket }
158

  
159
constructor TCompressedPacket.Create(APacket: TPacket);
160
var
161
  compBuffer: TEnhancedMemoryStream;
162
  compStream: TCompressionStream;
163
  sourceStream: TStream;
164
begin
165
  inherited Create($01, 0);
166
  compBuffer := TEnhancedMemoryStream.Create;
167
  compStream := TCompressionStream.Create(clMax, compBuffer);
168
  sourceStream := APacket.Stream;  
169
  compStream.CopyFrom(sourceStream, 0);
170
  compStream.Free;  
171
  FStream.WriteCardinal(sourceStream.Size);
172
  FStream.CopyFrom(compBuffer, 0);
173
  compBuffer.Free;
174
  APacket.Free;
175
end;
176

  
177
{ TLoginRequestPacket }
178

  
179
constructor TLoginRequestPacket.Create(AUsername, APassword: string);
180
begin
181
  inherited Create($02, 0);
182
  FStream.WriteByte($03);
183
  FStream.WriteStringNull(AUsername);
184
  FStream.WriteStringNull(APassword);
185
end;
186

  
187
{ TQuitPacket }
188

  
189
constructor TQuitPacket.Create;
190
begin
191
  inherited Create($02, 0);
192
  FStream.WriteByte($05);
193
end;
194

  
195
{ TRequestBlocksPacket }
196

  
197
constructor TRequestBlocksPacket.Create(ACoords: TBlockCoordsArray);
198
begin
199
  inherited Create($04, 0);
200
  FStream.Write(ACoords[0], Length(ACoords) * SizeOf(TBlockCoords));
201
end;
202

  
203
{ TFreeBlockPacket }
204

  
205
constructor TFreeBlockPacket.Create(AX, AY: Word);
206
begin
207
  inherited Create($05, 5);
208
  FStream.WriteWord(AX);
209
  FStream.WriteWord(AY);
210
end;
211

  
212
{ TDrawMapPacket }
213

  
214
constructor TDrawMapPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word);
215
begin
216
  inherited Create($06, 8);
217
  FStream.WriteWord(AX);
218
  FStream.WriteWord(AY);
219
  FStream.WriteShortInt(AZ);
220
  FStream.WriteWord(ATileID);
221
end;
222

  
223
{ TStaticPacket }
224

  
225
procedure TStaticPacket.WriteStaticItem(AStaticItem: TStaticItem);
226
begin
227
  FStream.WriteWord(AStaticItem.X);
228
  FStream.WriteWord(AStaticItem.Y);
229
  FStream.WriteShortInt(AStaticItem.Z);
230
  FStream.WriteWord(AStaticItem.TileID);
231
  FStream.WriteWord(AStaticItem.Hue);
232
end;
233

  
234
{ TInsertStaticPacket }
235

  
236
constructor TInsertStaticPacket.Create(AX, AY: Word; AZ: ShortInt;
237
  ATileID: Word; AHue: Word);
238
begin
239
  inherited Create($07, 10);
240
  FStream.WriteWord(AX);
241
  FStream.WriteWord(AY);
242
  FStream.WriteShortInt(AZ);
243
  FStream.WriteWord(ATileID);
244
  FStream.WriteWord(AHue);
245
end;
246

  
247
{ TDeleteStaticPacket }
248

  
249
constructor TDeleteStaticPacket.Create(AStaticItem: TStaticItem);
250
begin
251
  inherited Create($08, 10);
252
  WriteStaticItem(AStaticItem);
253
end;
254

  
255
{ TElevateStaticPacket }
256

  
257
constructor TElevateStaticPacket.Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
258
begin
259
  inherited Create($09, 11);
260
  WriteStaticItem(AStaticItem);
261
  FStream.WriteShortInt(ANewZ);
262
end;
263

  
264
constructor TElevateStaticPacket.Create(AX, AY: Word; AZ: ShortInt;
265
  ATileID: Word; AHue: Word; ANewZ: Word);
266
begin
267
  inherited Create($09, 11);
268
  FStream.WriteWord(AX);
269
  FStream.WriteWord(AY);
270
  FStream.WriteShortInt(AZ);
271
  FStream.WriteWord(ATileID);
272
  FStream.WriteWord(AHue);
273
  FStream.WriteShortInt(ANewZ);
274
end;
275

  
276
{ TMoveStaticPacket }
277

  
278
constructor TMoveStaticPacket.Create(AStaticItem: TStaticItem; ANewX,
279
  ANewY: Word);
280
begin
281
  inherited Create($0A, 14);
282
  WriteStaticItem(AStaticItem);
283
  FStream.WriteWord(ANewX);
284
  FStream.WriteWord(ANewY);
285
end;
286

  
287
constructor TMoveStaticPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word;
288
  AHue: Word; ANewX, ANewY: Word);
289
begin
290
  inherited Create($0A, 14);
291
  FStream.WriteWord(AX);
292
  FStream.WriteWord(AY);
293
  FStream.WriteShortInt(AZ);
294
  FStream.WriteWord(ATileID);
295
  FStream.WriteWord(AHue);
296
  FStream.WriteWord(ANewX);
297
  FStream.WriteWord(ANewY);
298
end;
299

  
300
{ THueStaticPacket }
301

  
302
constructor THueStaticPacket.Create(AStaticItem: TStaticItem; ANewHue: Word);
303
begin
304
  inherited Create($0B, 12);
305
  WriteStaticItem(AStaticItem);
306
  FStream.WriteWord(ANewHue);
307
end;
308

  
309
constructor THueStaticPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word;
310
  AHue: Word; ANewHue: Word);
311
begin
312
  inherited Create($0B, 12);
313
  FStream.WriteWord(AX);
314
  FStream.WriteWord(AY);
315
  FStream.WriteShortInt(AZ);
316
  FStream.WriteWord(ATileID);
317
  FStream.WriteWord(AHue);
318
  FStream.WriteWord(ANewHue);
319
end;
320

  
321
{ TUpdateClientPosPacket }
322

  
323
constructor TUpdateClientPosPacket.Create(AX, AY: Word);
324
begin
325
  inherited Create($0C, 0);
326
  FStream.WriteByte($04);
327
  FStream.WriteWord(AX);
328
  FStream.WriteWord(AY);
329
end;
330

  
331
{ TChatMessagePacket }
332

  
333
constructor TChatMessagePacket.Create(AMessage: string);
334
begin
335
  inherited Create($0C, 0);
336
  FStream.WriteByte($05);
337
  FStream.WriteStringNull(AMessage);
338
end;
339

  
340
{ TGotoClientPosPacket }
341

  
342
constructor TGotoClientPosPacket.Create(AUsername: string);
343
begin
344
  inherited Create($0C, 0);
345
  FStream.WriteByte($06);
346
  FStream.WriteStringNull(AUsername);
347
end;
348

  
349
{ TRequestRadarChecksumPacket }
350

  
351
constructor TRequestRadarChecksumPacket.Create;
352
begin
353
  inherited Create($0D, 2);
354
  FStream.WriteByte($01);
355
end;
356

  
357
{ TRequestRadarMapPacket }
358

  
359
constructor TRequestRadarMapPacket.Create;
360
begin
361
  inherited Create($0D, 2);
362
  FStream.WriteByte($02);
363
end;
364

  
365
{ TNoOpPacket }
366

  
367
constructor TNoOpPacket.Create;
368
begin
369
  inherited Create($FF, 1);
370
end;
371

  
372
end.
373

  

Also available in: Unified diff