]> git.lizzy.rs Git - dragonfireclient.git/blob - src/clientserver.h
8ac0aa8772fd61d86658e2e3ddf9de7294ca927b
[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_MEDIA
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         PROTOCOL_VERSION 5:
39                 Make players to be handled mostly as ActiveObjects
40         PROTOCOL_VERSION 6:
41                 Only non-cached textures are sent
42         PROTOCOL_VERSION 7:
43                 Add TOCLIENT_ITEMDEF
44                 Obsolete TOCLIENT_TOOLDEF
45                 Obsolete TOCLIENT_CRAFTITEMDEF
46                 Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
47         PROTOCOL_VERSION 8:
48                 Digging based on item groups
49                 Many things
50 */
51
52 #define PROTOCOL_VERSION 8
53
54 #define PROTOCOL_ID 0x4f457403
55
56 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
57                                // base64-encoded SHA-1 (27+\0).
58
59 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
60
61 enum ToClientCommand
62 {
63         TOCLIENT_INIT = 0x10,
64         /*
65                 Server's reply to TOSERVER_INIT.
66                 Sent second after connected.
67
68                 [0] u16 TOSERVER_INIT
69                 [2] u8 deployed version
70                 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd 
71                 [12] u64 map seed (new as of 2011-02-27)
72
73                 NOTE: The position in here is deprecated; position is
74                       explicitly sent afterwards
75         */
76
77         TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
78         TOCLIENT_ADDNODE = 0x21,
79         TOCLIENT_REMOVENODE = 0x22,
80         
81         TOCLIENT_PLAYERPOS = 0x23, // Obsolete
82         /*
83                 [0] u16 command
84                 // Followed by an arbitary number of these:
85                 // Number is determined from packet length.
86                 [N] u16 peer_id
87                 [N+2] v3s32 position*100
88                 [N+2+12] v3s32 speed*100
89                 [N+2+12+12] s32 pitch*100
90                 [N+2+12+12+4] s32 yaw*100
91         */
92
93         TOCLIENT_PLAYERINFO = 0x24, // Obsolete
94         /*
95                 [0] u16 command
96                 // Followed by an arbitary number of these:
97                 // Number is determined from packet length.
98                 [N] u16 peer_id
99                 [N] char[20] name
100         */
101         
102         TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
103
104         TOCLIENT_SECTORMETA = 0x26, // Obsolete
105         /*
106                 [0] u16 command
107                 [2] u8 sector count
108                 [3...] v2s16 pos + sector metadata
109         */
110
111         TOCLIENT_INVENTORY = 0x27,
112         /*
113                 [0] u16 command
114                 [2] serialized inventory
115         */
116         
117         TOCLIENT_OBJECTDATA = 0x28, // Obsolete
118         /*
119                 Sent as unreliable.
120
121                 u16 command
122                 u16 number of player positions
123                 for each player:
124                         u16 peer_id
125                         v3s32 position*100
126                         v3s32 speed*100
127                         s32 pitch*100
128                         s32 yaw*100
129                 u16 count of blocks
130                 for each block:
131                         v3s16 blockpos
132                         block objects
133         */
134
135         TOCLIENT_TIME_OF_DAY = 0x29,
136         /*
137                 u16 command
138                 u16 time (0-23999)
139                 Added in a later version:
140                 f1000 time_speed
141         */
142
143         // (oops, there is some gap here)
144
145         TOCLIENT_CHAT_MESSAGE = 0x30,
146         /*
147                 u16 command
148                 u16 length
149                 wstring message
150         */
151
152         TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
153         /*
154                 u16 command
155                 u16 count of removed objects
156                 for all removed objects {
157                         u16 id
158                 }
159                 u16 count of added objects
160                 for all added objects {
161                         u16 id
162                         u8 type
163                         u32 initialization data length
164                         string initialization data
165                 }
166         */
167         
168         TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
169         /*
170                 u16 command
171                 for all objects
172                 {
173                         u16 id
174                         u16 message length
175                         string message
176                 }
177         */
178
179         TOCLIENT_HP = 0x33,
180         /*
181                 u16 command
182                 u8 hp
183         */
184
185         TOCLIENT_MOVE_PLAYER = 0x34,
186         /*
187                 u16 command
188                 v3f1000 player position
189                 f1000 player pitch
190                 f1000 player yaw
191         */
192
193         TOCLIENT_ACCESS_DENIED = 0x35,
194         /*
195                 u16 command
196                 u16 reason_length
197                 wstring reason
198         */
199
200         TOCLIENT_PLAYERITEM = 0x36,
201         /*
202                 u16 command
203                 u16 count of player items
204                 for all player items {
205                         u16 peer id
206                         u16 length of serialized item
207                         string serialized item
208                 }
209         */
210
211         TOCLIENT_DEATHSCREEN = 0x37,
212         /*
213                 u16 command
214                 u8 bool set camera point target
215                 v3f1000 camera point target (to point the death cause or whatever)
216         */
217
218         TOCLIENT_MEDIA = 0x38,
219         /*
220                 u16 command
221                 u16 total number of texture bunches
222                 u16 index of this bunch
223                 u32 number of files in this bunch
224                 for each file {
225                         u16 length of name
226                         string name
227                         u32 length of data
228                         data
229                 }
230         */
231         
232         TOCLIENT_TOOLDEF = 0x39,
233         /*
234                 u16 command
235                 u32 length of the next item
236                 serialized ToolDefManager
237         */
238         
239         TOCLIENT_NODEDEF = 0x3a,
240         /*
241                 u16 command
242                 u32 length of the next item
243                 serialized NodeDefManager
244         */
245         
246         TOCLIENT_CRAFTITEMDEF = 0x3b,
247         /*
248                 u16 command
249                 u32 length of the next item
250                 serialized CraftiItemDefManager
251         */
252
253         TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
254
255         /*
256                 u16 command
257                 u32 number of files
258                 for each texture {
259                         u16 length of name
260                         string name
261                         u16 length of sha1_digest
262                         string sha1_digest
263                 }
264         */
265
266         TOCLIENT_ITEMDEF = 0x3d,
267         /*
268                 u16 command
269                 u32 length of next item
270                 serialized ItemDefManager
271         */
272         
273         TOCLIENT_PLAY_SOUND = 0x3f,
274         /*
275                 u16 command
276                 s32 sound_id
277                 u16 len
278                 u8[len] sound name
279                 s32 gain*1000
280                 u8 type (0=local, 1=positional, 2=object)
281                 s32[3] pos_nodes*10000
282                 u16 object_id
283                 u8 loop (bool)
284         */
285
286         TOCLIENT_STOP_SOUND = 0x40,
287         /*
288                 u16 command
289                 s32 sound_id
290         */
291 };
292
293 enum ToServerCommand
294 {
295         TOSERVER_INIT=0x10,
296         /*
297                 Sent first after connected.
298
299                 [0] u16 TOSERVER_INIT
300                 [2] u8 SER_FMT_VER_HIGHEST
301                 [3] u8[20] player_name
302                 [23] u8[28] password (new in some version)
303                 [51] u16 client network protocol version (new in some version)
304         */
305
306         TOSERVER_INIT2 = 0x11,
307         /*
308                 Sent as an ACK for TOCLIENT_INIT.
309                 After this, the server can send data.
310
311                 [0] u16 TOSERVER_INIT2
312         */
313
314         TOSERVER_GETBLOCK=0x20, // Obsolete
315         TOSERVER_ADDNODE = 0x21, // Obsolete
316         TOSERVER_REMOVENODE = 0x22, // Obsolete
317
318         TOSERVER_PLAYERPOS = 0x23,
319         /*
320                 [0] u16 command
321                 [2] v3s32 position*100
322                 [2+12] v3s32 speed*100
323                 [2+12+12] s32 pitch*100
324                 [2+12+12+4] s32 yaw*100
325         */
326
327         TOSERVER_GOTBLOCKS = 0x24,
328         /*
329                 [0] u16 command
330                 [2] u8 count
331                 [3] v3s16 pos_0
332                 [3+6] v3s16 pos_1
333                 ...
334         */
335
336         TOSERVER_DELETEDBLOCKS = 0x25,
337         /*
338                 [0] u16 command
339                 [2] u8 count
340                 [3] v3s16 pos_0
341                 [3+6] v3s16 pos_1
342                 ...
343         */
344
345         TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
346         /*
347                 [0] u16 command
348                 [2] v3s16 pos
349                 [8] u16 i
350         */
351
352         TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
353         /*
354                 length: 13
355                 [0] u16 command
356                 [2] u8 button (0=left, 1=right)
357                 [3] v3s16 blockpos
358                 [9] s16 id
359                 [11] u16 item
360         */
361
362         TOSERVER_GROUND_ACTION = 0x28, // Obsolete
363         /*
364                 length: 17
365                 [0] u16 command
366                 [2] u8 action
367                 [3] v3s16 nodepos_undersurface
368                 [9] v3s16 nodepos_abovesurface
369                 [15] u16 item
370                 actions:
371                 0: start digging (from undersurface)
372                 1: place block (to abovesurface)
373                 2: stop digging (all parameters ignored)
374                 3: digging completed
375         */
376         
377         TOSERVER_RELEASE = 0x29, // Obsolete
378
379         // (oops, there is some gap here)
380
381         TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
382         /*
383                 u16 command
384                 v3s16 blockpos
385                 s16 id
386                 u16 textlen
387                 textdata
388         */
389
390         TOSERVER_INVENTORY_ACTION = 0x31,
391         /*
392                 See InventoryAction in inventory.h
393         */
394
395         TOSERVER_CHAT_MESSAGE = 0x32,
396         /*
397                 u16 command
398                 u16 length
399                 wstring message
400         */
401
402         TOSERVER_SIGNNODETEXT = 0x33,
403         /*
404                 u16 command
405                 v3s16 p
406                 u16 textlen
407                 textdata
408         */
409
410         TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
411         /*
412                 length: 7
413                 [0] u16 command
414                 [2] u8 button (0=left, 1=right)
415                 [3] u16 id
416                 [5] u16 item
417         */
418         
419         TOSERVER_DAMAGE = 0x35,
420         /*
421                 u16 command
422                 u8 amount
423         */
424
425         TOSERVER_PASSWORD=0x36,
426         /*
427                 Sent to change password.
428
429                 [0] u16 TOSERVER_PASSWORD
430                 [2] u8[28] old password
431                 [30] u8[28] new password
432         */
433
434         TOSERVER_PLAYERITEM=0x37,
435         /*
436                 Sent to change selected item.
437
438                 [0] u16 TOSERVER_PLAYERITEM
439                 [2] u16 item
440         */
441         
442         TOSERVER_RESPAWN=0x38,
443         /*
444                 u16 TOSERVER_RESPAWN
445         */
446
447         TOSERVER_INTERACT = 0x39,
448         /*
449                 [0] u16 command
450                 [2] u8 action
451                 [3] u16 item
452                 [5] u32 length of the next item
453                 [9] serialized PointedThing
454                 actions:
455                 0: start digging (from undersurface) or use
456                 1: stop digging (all parameters ignored)
457                 2: digging completed
458                 3: place block or item (to abovesurface)
459                 4: use item
460
461                 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
462         */
463         
464         TOSERVER_REMOVED_SOUNDS = 0x3a,
465         /*
466                 u16 command
467                 u16 len
468                 s32[len] sound_id
469         */
470
471         TOSERVER_REQUEST_MEDIA = 0x40,
472         /*
473                 u16 command
474                 u16 number of files requested
475                 for each file {
476                         u16 length of name
477                         string name
478                 }
479          */
480
481 };
482
483 inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed)
484 {
485         SharedBuffer<u8> data(2+2+4);
486         writeU16(&data[0], TOCLIENT_TIME_OF_DAY);
487         writeU16(&data[2], time);
488         writeF1000(&data[4], time_speed);
489         return data;
490 }
491
492 #endif
493