]> git.lizzy.rs Git - dragonfireclient.git/blob - src/clientserver.h
Add missing files for a previous commit
[dragonfireclient.git] / src / clientserver.h
1 /*
2 Minetest-c55
3 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef CLIENTSERVER_HEADER
21 #define CLIENTSERVER_HEADER
22
23 #include "utility.h"
24
25 /*
26         changes by PROTOCOL_VERSION:
27
28         PROTOCOL_VERSION 3:
29                 Base for writing changes here
30         PROTOCOL_VERSION 4:
31                 Add TOCLIENT_TEXTURES
32                 Add TOCLIENT_TOOLDEF
33                 Add TOCLIENT_NODEDEF
34                 Add TOCLIENT_CRAFTITEMDEF
35                 Add TOSERVER_INTERACT
36                 Obsolete TOSERVER_CLICK_ACTIVEOBJECT
37                 Obsolete TOSERVER_GROUND_ACTION
38 */
39
40 #define PROTOCOL_VERSION 4
41
42 #define PROTOCOL_ID 0x4f457403
43
44 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
45                                // base64-encoded SHA-1 (27+\0).
46
47 enum ToClientCommand
48 {
49         TOCLIENT_INIT = 0x10,
50         /*
51                 Server's reply to TOSERVER_INIT.
52                 Sent second after connected.
53
54                 [0] u16 TOSERVER_INIT
55                 [2] u8 deployed version
56                 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd 
57                 [12] u64 map seed (new as of 2011-02-27)
58
59                 NOTE: The position in here is deprecated; position is
60                       explicitly sent afterwards
61         */
62
63         TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
64         TOCLIENT_ADDNODE = 0x21,
65         TOCLIENT_REMOVENODE = 0x22,
66         
67         TOCLIENT_PLAYERPOS = 0x23, // Obsolete
68         /*
69                 [0] u16 command
70                 // Followed by an arbitary number of these:
71                 // Number is determined from packet length.
72                 [N] u16 peer_id
73                 [N+2] v3s32 position*100
74                 [N+2+12] v3s32 speed*100
75                 [N+2+12+12] s32 pitch*100
76                 [N+2+12+12+4] s32 yaw*100
77         */
78
79         TOCLIENT_PLAYERINFO = 0x24,
80         /*
81                 [0] u16 command
82                 // Followed by an arbitary number of these:
83                 // Number is determined from packet length.
84                 [N] u16 peer_id
85                 [N] char[20] name
86         */
87         
88         TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
89
90         TOCLIENT_SECTORMETA = 0x26, // Obsolete
91         /*
92                 [0] u16 command
93                 [2] u8 sector count
94                 [3...] v2s16 pos + sector metadata
95         */
96
97         TOCLIENT_INVENTORY = 0x27,
98         /*
99                 [0] u16 command
100                 [2] serialized inventory
101         */
102         
103         TOCLIENT_OBJECTDATA = 0x28,
104         /*
105                 Sent as unreliable.
106
107                 u16 command
108                 u16 number of player positions
109                 for each player:
110                         u16 peer_id
111                         v3s32 position*100
112                         v3s32 speed*100
113                         s32 pitch*100
114                         s32 yaw*100
115                 u16 count of blocks
116                 for each block:
117                         v3s16 blockpos
118                         block objects
119         */
120
121         TOCLIENT_TIME_OF_DAY = 0x29,
122         /*
123                 u16 command
124                 u16 time (0-23999)
125         */
126
127         // (oops, there is some gap here)
128
129         TOCLIENT_CHAT_MESSAGE = 0x30,
130         /*
131                 u16 command
132                 u16 length
133                 wstring message
134         */
135
136         TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
137         /*
138                 u16 command
139                 u16 count of removed objects
140                 for all removed objects {
141                         u16 id
142                 }
143                 u16 count of added objects
144                 for all added objects {
145                         u16 id
146                         u8 type
147                         u32 initialization data length
148                         string initialization data
149                 }
150         */
151         
152         TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
153         /*
154                 u16 command
155                 for all objects
156                 {
157                         u16 id
158                         u16 message length
159                         string message
160                 }
161         */
162
163         TOCLIENT_HP = 0x33,
164         /*
165                 u16 command
166                 u8 hp
167         */
168
169         TOCLIENT_MOVE_PLAYER = 0x34,
170         /*
171                 u16 command
172                 v3f1000 player position
173                 f1000 player pitch
174                 f1000 player yaw
175         */
176
177         TOCLIENT_ACCESS_DENIED = 0x35,
178         /*
179                 u16 command
180                 u16 reason_length
181                 wstring reason
182         */
183
184         TOCLIENT_PLAYERITEM = 0x36,
185         /*
186                 u16 command
187                 u16 count of player items
188                 for all player items {
189                         u16 peer id
190                         u16 length of serialized item
191                         string serialized item
192                 }
193         */
194
195         TOCLIENT_DEATHSCREEN = 0x37,
196         /*
197                 u16 command
198                 u8 bool set camera point target
199                 v3f1000 camera point target (to point the death cause or whatever)
200         */
201
202         TOCLIENT_TEXTURES = 0x38,
203         /*
204                 u16 command
205                 u16 total number of texture bunches
206                 u16 index of this bunch
207                 u32 number of textures in this bunch
208                 for each texture {
209                         u16 length of name
210                         string name
211                         u32 length of data
212                         data
213                 }
214         */
215         
216         TOCLIENT_TOOLDEF = 0x39,
217         /*
218                 u16 command
219                 u32 length of the next item
220                 serialized ToolDefManager
221         */
222         
223         TOCLIENT_NODEDEF = 0x3a,
224         /*
225                 u16 command
226                 u32 length of the next item
227                 serialized NodeDefManager
228         */
229         
230         TOCLIENT_CRAFTITEMDEF = 0x3b,
231         /*
232                 u16 command
233                 u32 length of the next item
234                 serialized CraftiItemDefManager
235         */
236 };
237
238 enum ToServerCommand
239 {
240         TOSERVER_INIT=0x10,
241         /*
242                 Sent first after connected.
243
244                 [0] u16 TOSERVER_INIT
245                 [2] u8 SER_FMT_VER_HIGHEST
246                 [3] u8[20] player_name
247                 [23] u8[28] password (new in some version)
248                 [51] u16 client network protocol version (new in some version)
249         */
250
251         TOSERVER_INIT2 = 0x11,
252         /*
253                 Sent as an ACK for TOCLIENT_INIT.
254                 After this, the server can send data.
255
256                 [0] u16 TOSERVER_INIT2
257         */
258
259         TOSERVER_GETBLOCK=0x20, // Obsolete
260         TOSERVER_ADDNODE = 0x21, // Obsolete
261         TOSERVER_REMOVENODE = 0x22, // Obsolete
262
263         TOSERVER_PLAYERPOS = 0x23,
264         /*
265                 [0] u16 command
266                 [2] v3s32 position*100
267                 [2+12] v3s32 speed*100
268                 [2+12+12] s32 pitch*100
269                 [2+12+12+4] s32 yaw*100
270         */
271
272         TOSERVER_GOTBLOCKS = 0x24,
273         /*
274                 [0] u16 command
275                 [2] u8 count
276                 [3] v3s16 pos_0
277                 [3+6] v3s16 pos_1
278                 ...
279         */
280
281         TOSERVER_DELETEDBLOCKS = 0x25,
282         /*
283                 [0] u16 command
284                 [2] u8 count
285                 [3] v3s16 pos_0
286                 [3+6] v3s16 pos_1
287                 ...
288         */
289
290         TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
291         /*
292                 [0] u16 command
293                 [2] v3s16 pos
294                 [8] u16 i
295         */
296
297         TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
298         /*
299                 length: 13
300                 [0] u16 command
301                 [2] u8 button (0=left, 1=right)
302                 [3] v3s16 blockpos
303                 [9] s16 id
304                 [11] u16 item
305         */
306
307         TOSERVER_GROUND_ACTION = 0x28, // Obsolete
308         /*
309                 length: 17
310                 [0] u16 command
311                 [2] u8 action
312                 [3] v3s16 nodepos_undersurface
313                 [9] v3s16 nodepos_abovesurface
314                 [15] u16 item
315                 actions:
316                 0: start digging (from undersurface)
317                 1: place block (to abovesurface)
318                 2: stop digging (all parameters ignored)
319                 3: digging completed
320         */
321         
322         TOSERVER_RELEASE = 0x29, // Obsolete
323
324         // (oops, there is some gap here)
325
326         TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
327         /*
328                 u16 command
329                 v3s16 blockpos
330                 s16 id
331                 u16 textlen
332                 textdata
333         */
334
335         TOSERVER_INVENTORY_ACTION = 0x31,
336         /*
337                 See InventoryAction in inventory.h
338         */
339
340         TOSERVER_CHAT_MESSAGE = 0x32,
341         /*
342                 u16 command
343                 u16 length
344                 wstring message
345         */
346
347         TOSERVER_SIGNNODETEXT = 0x33,
348         /*
349                 u16 command
350                 v3s16 p
351                 u16 textlen
352                 textdata
353         */
354
355         TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
356         /*
357                 length: 7
358                 [0] u16 command
359                 [2] u8 button (0=left, 1=right)
360                 [3] u16 id
361                 [5] u16 item
362         */
363         
364         TOSERVER_DAMAGE = 0x35,
365         /*
366                 u16 command
367                 u8 amount
368         */
369
370         TOSERVER_PASSWORD=0x36,
371         /*
372                 Sent to change password.
373
374                 [0] u16 TOSERVER_PASSWORD
375                 [2] u8[28] old password
376                 [30] u8[28] new password
377         */
378
379         TOSERVER_PLAYERITEM=0x37,
380         /*
381                 Sent to change selected item.
382
383                 [0] u16 TOSERVER_PLAYERITEM
384                 [2] u16 item
385         */
386         
387         TOSERVER_RESPAWN=0x38,
388         /*
389                 u16 TOSERVER_RESPAWN
390         */
391
392         TOSERVER_INTERACT = 0x39,
393         /*
394                 [0] u16 command
395                 [2] u8 action
396                 [3] u16 item
397                 [5] u32 length of the next item
398                 [9] serialized PointedThing
399                 actions:
400                 0: start digging (from undersurface) or use
401                 1: stop digging (all parameters ignored)
402                 2: digging completed
403                 3: place block or item (to abovesurface)
404                 4: use item
405
406                 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
407         */
408         
409 };
410
411 inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time)
412 {
413         SharedBuffer<u8> data(2+2);
414         writeU16(&data[0], TOCLIENT_TIME_OF_DAY);
415         writeU16(&data[2], time);
416         return data;
417 }
418
419 #endif
420