Statistics
| Branch: | Tag: | Revision:

root / Client / UPackets.pas @ 0:95bd93c28625

History | View | Annotate | Download (7.6 kB)

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 2007 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
  { TInsertStaticPacket }
77
78
  TInsertStaticPacket = class(TPacket)
79
    constructor Create(AX, AY: Word; AZ: ShortInt; ATileID: Word; AHue: Word);
80
  end;
81
  
82
  { TDeleteStaticPacket }
83
84
  TDeleteStaticPacket = class(TPacket)
85
    constructor Create(AStaticItem: TStaticItem);
86
  end;
87
  
88
  { TElevateStaticPacket }
89
90
  TElevateStaticPacket = class(TPacket)
91
    constructor Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
92
  end;
93
  
94
  { TMoveStaticPacket }
95
96
  TMoveStaticPacket = class(TPacket)
97
    constructor Create(AStaticItem: TStaticItem; ANewX, ANewY: Word);
98
  end;
99
  
100
  { THueStaticPacket }
101
102
  THueStaticPacket = class(TPacket)
103
    constructor Create(AStaticItem: TStaticItem; ANewHue: Word);
104
  end;
105
  
106
  { TUpdateClientPosPacket }
107
108
  TUpdateClientPosPacket = class(TPacket)
109
    constructor Create(AX, AY: Word);
110
  end;
111
  
112
  { TChatMessagePacket }
113
114
  TChatMessagePacket = class(TPacket)
115
    constructor Create(AMessage: string);
116
  end;
117
  
118
  { TGotoClientPosPacket }
119
120
  TGotoClientPosPacket = class(TPacket)
121
    constructor Create(AUsername: string);
122
  end;
123
  
124
  { TRequestRadarChecksumPacket }
125
126
  TRequestRadarChecksumPacket = class(TPacket)
127
    constructor Create;
128
  end;
129
  
130
  { TRequestRadarMapPacket }
131
132
  TRequestRadarMapPacket = class(TPacket)
133
    constructor Create;
134
  end;
135
  
136
  { TNoOpPacket }
137
138
  TNoOpPacket = class(TPacket)
139
    constructor Create;
140
  end;
141
142
implementation
143
144
{ TCompressedPacket }
145
146
constructor TCompressedPacket.Create(APacket: TPacket);
147
var
148
  compBuffer: TEnhancedMemoryStream;
149
  compStream: TCompressionStream;
150
  sourceStream: TStream;
151
begin
152
  inherited Create($01, 0);
153
  compBuffer := TEnhancedMemoryStream.Create;
154
  compStream := TCompressionStream.Create(clMax, compBuffer);
155
  sourceStream := APacket.Stream;  
156
  compStream.CopyFrom(sourceStream, 0);
157
  compStream.Free;  
158
  FStream.WriteCardinal(sourceStream.Size);
159
  FStream.CopyFrom(compBuffer, 0);
160
  compBuffer.Free;
161
  APacket.Free;
162
end;
163
164
{ TLoginRequestPacket }
165
166
constructor TLoginRequestPacket.Create(AUsername, APassword: string);
167
begin
168
  inherited Create($02, 0);
169
  FStream.WriteByte($03);
170
  FStream.WriteStringNull(AUsername);
171
  FStream.WriteStringNull(APassword);
172
end;
173
174
{ TQuitPacket }
175
176
constructor TQuitPacket.Create;
177
begin
178
  inherited Create($02, 0);
179
  FStream.WriteByte($05);
180
end;
181
182
{ TRequestBlocksPacket }
183
184
constructor TRequestBlocksPacket.Create(ACoords: TBlockCoordsArray);
185
var
186
  i: Integer;
187
begin
188
  inherited Create($04, 0);
189
  FStream.Write(ACoords[0], Length(ACoords) * SizeOf(TBlockCoords));
190
end;
191
192
{ TFreeBlockPacket }
193
194
constructor TFreeBlockPacket.Create(AX, AY: Word);
195
begin
196
  inherited Create($05, 5);
197
  FStream.WriteWord(AX);
198
  FStream.WriteWord(AY);
199
end;
200
201
{ TDrawMapPacket }
202
203
constructor TDrawMapPacket.Create(AX, AY: Word; AZ: ShortInt; ATileID: Word);
204
begin
205
  inherited Create($06, 8);
206
  FStream.WriteWord(AX);
207
  FStream.WriteWord(AY);
208
  FStream.WriteShortInt(AZ);
209
  FStream.WriteWord(ATileID);
210
end;
211
212
{ TInsertStaticPacket }
213
214
constructor TInsertStaticPacket.Create(AX, AY: Word; AZ: ShortInt;
215
  ATileID: Word; AHue: Word);
216
begin
217
  inherited Create($07, 10);
218
  FStream.WriteWord(AX);
219
  FStream.WriteWord(AY);
220
  FStream.WriteShortInt(AZ);
221
  FStream.WriteWord(ATileID);
222
  FStream.WriteWord(AHue);
223
end;
224
225
{ TDeleteStaticPacket }
226
227
constructor TDeleteStaticPacket.Create(AStaticItem: TStaticItem);
228
begin
229
  inherited Create($08, 10);
230
  FStream.WriteWord(AStaticItem.X);
231
  FStream.WriteWord(AStaticItem.Y);
232
  FStream.WriteShortInt(AStaticItem.Z);
233
  FStream.WriteWord(AStaticItem.TileID);
234
  FStream.WriteWord(AStaticItem.Hue);
235
end;
236
237
{ TElevateStaticPacket }
238
239
constructor TElevateStaticPacket.Create(AStaticItem: TStaticItem; ANewZ: ShortInt);
240
begin
241
  inherited Create($09, 11);
242
  FStream.WriteWord(AStaticItem.X);
243
  FStream.WriteWord(AStaticItem.Y);
244
  FStream.WriteShortInt(AStaticItem.Z);
245
  FStream.WriteWord(AStaticItem.TileID);
246
  FStream.WriteWord(AStaticItem.Hue);
247
  FStream.WriteShortInt(ANewZ);
248
end;
249
250
{ TMoveStaticPacket }
251
252
constructor TMoveStaticPacket.Create(AStaticItem: TStaticItem; ANewX,
253
  ANewY: Word);
254
begin
255
  inherited Create($0A, 14);
256
  FStream.WriteWord(AStaticItem.X);
257
  FStream.WriteWord(AStaticItem.Y);
258
  FStream.WriteShortInt(AStaticItem.Z);
259
  FStream.WriteWord(AStaticItem.TileID);
260
  FStream.WriteWord(AStaticItem.Hue);
261
  FStream.WriteWord(ANewX);
262
  FStream.WriteWord(ANewY);
263
end;
264
265
{ THueStaticPacket }
266
267
constructor THueStaticPacket.Create(AStaticItem: TStaticItem; ANewHue: Word);
268
begin
269
  inherited Create($0B, 12);
270
  FStream.WriteWord(AStaticItem.X);
271
  FStream.WriteWord(AStaticItem.Y);
272
  FStream.WriteShortInt(AStaticItem.Z);
273
  FStream.WriteWord(AStaticItem.TileID);
274
  FStream.WriteWord(AStaticItem.Hue);
275
  FStream.WriteWord(ANewHue);
276
end;
277
278
{ TUpdateClientPosPacket }
279
280
constructor TUpdateClientPosPacket.Create(AX, AY: Word);
281
begin
282
  inherited Create($0C, 0);
283
  FStream.WriteByte($04);
284
  FStream.WriteWord(AX);
285
  FStream.WriteWord(AY);
286
end;
287
288
{ TChatMessagePacket }
289
290
constructor TChatMessagePacket.Create(AMessage: string);
291
begin
292
  inherited Create($0C, 0);
293
  FStream.WriteByte($05);
294
  FStream.WriteStringNull(AMessage);
295
end;
296
297
{ TGotoClientPosPacket }
298
299
constructor TGotoClientPosPacket.Create(AUsername: string);
300
begin
301
  inherited Create($0C, 0);
302
  FStream.WriteByte($06);
303
  FStream.WriteStringNull(AUsername);
304
end;
305
306
{ TRequestRadarChecksumPacket }
307
308
constructor TRequestRadarChecksumPacket.Create;
309
begin
310
  inherited Create($0D, 2);
311
  FStream.WriteByte($01);
312
end;
313
314
{ TRequestRadarMapPacket }
315
316
constructor TRequestRadarMapPacket.Create;
317
begin
318
  inherited Create($0D, 2);
319
  FStream.WriteByte($02);
320
end;
321
322
{ TNoOpPacket }
323
324
constructor TNoOpPacket.Create;
325
begin
326
  inherited Create($FF, 1);
327
end;
328
329
end.
330