]> git.lizzy.rs Git - dragonfireclient.git/blob - src/clientserver.h
Add set_breath and get_breath to lua API.
[dragonfireclient.git] / src / clientserver.h
1 /*
2 Minetest
3 Copyright (C) 2010-2013 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 Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser 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 "util/pointer.h"
24
25 SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
26
27 /*
28         changes by PROTOCOL_VERSION:
29
30         PROTOCOL_VERSION 3:
31                 Base for writing changes here
32         PROTOCOL_VERSION 4:
33                 Add TOCLIENT_MEDIA
34                 Add TOCLIENT_TOOLDEF
35                 Add TOCLIENT_NODEDEF
36                 Add TOCLIENT_CRAFTITEMDEF
37                 Add TOSERVER_INTERACT
38                 Obsolete TOSERVER_CLICK_ACTIVEOBJECT
39                 Obsolete TOSERVER_GROUND_ACTION
40         PROTOCOL_VERSION 5:
41                 Make players to be handled mostly as ActiveObjects
42         PROTOCOL_VERSION 6:
43                 Only non-cached textures are sent
44         PROTOCOL_VERSION 7:
45                 Add TOCLIENT_ITEMDEF
46                 Obsolete TOCLIENT_TOOLDEF
47                 Obsolete TOCLIENT_CRAFTITEMDEF
48                 Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
49         PROTOCOL_VERSION 8:
50                 Digging based on item groups
51                 Many things
52         PROTOCOL_VERSION 9:
53                 ContentFeatures and NodeDefManager use a different serialization
54                     format; better for future version cross-compatibility
55                 Many things
56         PROTOCOL_VERSION 10:
57                 TOCLIENT_PRIVILEGES
58                 Version raised to force 'fly' and 'fast' privileges into effect.
59                 Node metadata change (came in later; somewhat incompatible)
60         PROTOCOL_VERSION 11:
61                 TileDef in ContentFeatures
62                 Nodebox drawtype
63                 (some dev snapshot)
64                 TOCLIENT_INVENTORY_FORMSPEC
65                 (0.4.0, 0.4.1)
66         PROTOCOL_VERSION 12:
67                 TOSERVER_INVENTORY_FIELDS
68                 16-bit node ids
69                 TOCLIENT_DETACHED_INVENTORY
70         PROTOCOL_VERSION 13:
71                 InventoryList field "Width" (deserialization fails with old versions)
72         PROTOCOL_VERSION 14:
73                 Added transfer of player pressed keys to the server
74                 Added new messages for mesh and bone animation, as well as attachments
75                 GENERIC_CMD_SET_ANIMATION
76                 GENERIC_CMD_SET_BONE_POSITION
77                 GENERIC_CMD_SET_ATTACHMENT
78         PROTOCOL_VERSION 15:
79                 Serialization format changes
80         PROTOCOL_VERSION 16:
81                 TOCLIENT_SHOW_FORMSPEC
82         PROTOCOL_VERSION 17:
83                 Serialization format change: include backface_culling flag in TileDef
84                 Added rightclickable field in nodedef
85                 TOCLIENT_SPAWN_PARTICLE
86                 TOCLIENT_ADD_PARTICLESPAWNER
87                 TOCLIENT_DELETE_PARTICLESPAWNER
88         PROTOCOL_VERSION 18:
89                 damageGroups added to ToolCapabilities
90                 sound_place added to ItemDefinition
91         PROTOCOL_VERSION 19:
92                 GENERIC_CMD_SET_PHYSICS_OVERRIDE
93         PROTOCOL_VERSION 20:
94                 TOCLIENT_HUDADD
95                 TOCLIENT_HUDRM
96                 TOCLIENT_HUDCHANGE
97                 TOCLIENT_HUD_SET_FLAGS
98 */
99
100 #define LATEST_PROTOCOL_VERSION 20
101
102 // Server's supported network protocol range
103 #define SERVER_PROTOCOL_VERSION_MIN 13
104 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
105
106 // Client's supported network protocol range
107 #define CLIENT_PROTOCOL_VERSION_MIN 13
108 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
109
110 // Constant that differentiates the protocol from random data and other protocols
111 #define PROTOCOL_ID 0x4f457403
112
113 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
114                                // base64-encoded SHA-1 (27+\0).
115
116 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
117
118 enum ToClientCommand
119 {
120         TOCLIENT_INIT = 0x10,
121         /*
122                 Server's reply to TOSERVER_INIT.
123                 Sent second after connected.
124
125                 [0] u16 TOSERVER_INIT
126                 [2] u8 deployed version
127                 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd 
128                 [12] u64 map seed (new as of 2011-02-27)
129                 [20] f1000 recommended send interval (in seconds) (new as of 14)
130
131                 NOTE: The position in here is deprecated; position is
132                       explicitly sent afterwards
133         */
134
135         TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
136         TOCLIENT_ADDNODE = 0x21,
137         TOCLIENT_REMOVENODE = 0x22,
138         
139         TOCLIENT_PLAYERPOS = 0x23, // Obsolete
140         /*
141                 [0] u16 command
142                 // Followed by an arbitary number of these:
143                 // Number is determined from packet length.
144                 [N] u16 peer_id
145                 [N+2] v3s32 position*100
146                 [N+2+12] v3s32 speed*100
147                 [N+2+12+12] s32 pitch*100
148                 [N+2+12+12+4] s32 yaw*100
149         */
150
151         TOCLIENT_PLAYERINFO = 0x24, // Obsolete
152         /*
153                 [0] u16 command
154                 // Followed by an arbitary number of these:
155                 // Number is determined from packet length.
156                 [N] u16 peer_id
157                 [N] char[20] name
158         */
159         
160         TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
161
162         TOCLIENT_SECTORMETA = 0x26, // Obsolete
163         /*
164                 [0] u16 command
165                 [2] u8 sector count
166                 [3...] v2s16 pos + sector metadata
167         */
168
169         TOCLIENT_INVENTORY = 0x27,
170         /*
171                 [0] u16 command
172                 [2] serialized inventory
173         */
174         
175         TOCLIENT_OBJECTDATA = 0x28, // Obsolete
176         /*
177                 Sent as unreliable.
178
179                 u16 command
180                 u16 number of player positions
181                 for each player:
182                         u16 peer_id
183                         v3s32 position*100
184                         v3s32 speed*100
185                         s32 pitch*100
186                         s32 yaw*100
187                 u16 count of blocks
188                 for each block:
189                         v3s16 blockpos
190                         block objects
191         */
192
193         TOCLIENT_TIME_OF_DAY = 0x29,
194         /*
195                 u16 command
196                 u16 time (0-23999)
197                 Added in a later version:
198                 f1000 time_speed
199         */
200
201         // (oops, there is some gap here)
202
203         TOCLIENT_CHAT_MESSAGE = 0x30,
204         /*
205                 u16 command
206                 u16 length
207                 wstring message
208         */
209
210         TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
211         /*
212                 u16 command
213                 u16 count of removed objects
214                 for all removed objects {
215                         u16 id
216                 }
217                 u16 count of added objects
218                 for all added objects {
219                         u16 id
220                         u8 type
221                         u32 initialization data length
222                         string initialization data
223                 }
224         */
225         
226         TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
227         /*
228                 u16 command
229                 for all objects
230                 {
231                         u16 id
232                         u16 message length
233                         string message
234                 }
235         */
236
237         TOCLIENT_HP = 0x33,
238         /*
239                 u16 command
240                 u8 hp
241         */
242
243         TOCLIENT_MOVE_PLAYER = 0x34,
244         /*
245                 u16 command
246                 v3f1000 player position
247                 f1000 player pitch
248                 f1000 player yaw
249         */
250
251         TOCLIENT_ACCESS_DENIED = 0x35,
252         /*
253                 u16 command
254                 u16 reason_length
255                 wstring reason
256         */
257
258         TOCLIENT_PLAYERITEM = 0x36, // Obsolete
259         /*
260                 u16 command
261                 u16 count of player items
262                 for all player items {
263                         u16 peer id
264                         u16 length of serialized item
265                         string serialized item
266                 }
267         */
268
269         TOCLIENT_DEATHSCREEN = 0x37,
270         /*
271                 u16 command
272                 u8 bool set camera point target
273                 v3f1000 camera point target (to point the death cause or whatever)
274         */
275
276         TOCLIENT_MEDIA = 0x38,
277         /*
278                 u16 command
279                 u16 total number of texture bunches
280                 u16 index of this bunch
281                 u32 number of files in this bunch
282                 for each file {
283                         u16 length of name
284                         string name
285                         u32 length of data
286                         data
287                 }
288                 u16 length of remote media server url (if applicable)
289                 string url
290         */
291         
292         TOCLIENT_TOOLDEF = 0x39,
293         /*
294                 u16 command
295                 u32 length of the next item
296                 serialized ToolDefManager
297         */
298         
299         TOCLIENT_NODEDEF = 0x3a,
300         /*
301                 u16 command
302                 u32 length of the next item
303                 serialized NodeDefManager
304         */
305         
306         TOCLIENT_CRAFTITEMDEF = 0x3b,
307         /*
308                 u16 command
309                 u32 length of the next item
310                 serialized CraftiItemDefManager
311         */
312
313         TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
314
315         /*
316                 u16 command
317                 u32 number of files
318                 for each texture {
319                         u16 length of name
320                         string name
321                         u16 length of sha1_digest
322                         string sha1_digest
323                 }
324         */
325
326         TOCLIENT_ITEMDEF = 0x3d,
327         /*
328                 u16 command
329                 u32 length of next item
330                 serialized ItemDefManager
331         */
332         
333         TOCLIENT_PLAY_SOUND = 0x3f,
334         /*
335                 u16 command
336                 s32 sound_id
337                 u16 len
338                 u8[len] sound name
339                 s32 gain*1000
340                 u8 type (0=local, 1=positional, 2=object)
341                 s32[3] pos_nodes*10000
342                 u16 object_id
343                 u8 loop (bool)
344         */
345
346         TOCLIENT_STOP_SOUND = 0x40,
347         /*
348                 u16 command
349                 s32 sound_id
350         */
351
352         TOCLIENT_PRIVILEGES = 0x41,
353         /*
354                 u16 command
355                 u16 number of privileges
356                 for each privilege
357                         u16 len
358                         u8[len] privilege
359         */
360
361         TOCLIENT_INVENTORY_FORMSPEC = 0x42,
362         /*
363                 u16 command
364                 u32 len
365                 u8[len] formspec
366         */
367
368         TOCLIENT_DETACHED_INVENTORY = 0x43,
369         /*
370                 [0] u16 command
371                 u16 len
372                 u8[len] name
373                 [2] serialized inventory
374         */
375
376         TOCLIENT_SHOW_FORMSPEC = 0x44,
377         /*
378                 [0] u16 command
379                 u32 len
380                 u8[len] formspec
381                 u16 len
382                 u8[len] formname
383         */
384
385         TOCLIENT_MOVEMENT = 0x45,
386         /*
387                 u16 command
388                 f1000 movement_acceleration_default
389                 f1000 movement_acceleration_air
390                 f1000 movement_acceleration_fast
391                 f1000 movement_speed_walk
392                 f1000 movement_speed_crouch
393                 f1000 movement_speed_fast
394                 f1000 movement_speed_climb
395                 f1000 movement_speed_jump
396                 f1000 movement_liquid_fluidity
397                 f1000 movement_liquid_fluidity_smooth
398                 f1000 movement_liquid_sink
399                 f1000 movement_gravity
400         */
401
402         TOCLIENT_SPAWN_PARTICLE = 0x46,
403         /*
404                 u16 command
405                 v3f1000 pos
406                 v3f1000 velocity
407                 v3f1000 acceleration
408                 f1000 expirationtime
409                 f1000 size
410                 u8 bool collisiondetection
411                 u32 len
412                 u8[len] texture
413         */
414
415         TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
416         /*
417                 u16 command
418                 u16 amount
419                 f1000 spawntime
420                 v3f1000 minpos
421                 v3f1000 maxpos
422                 v3f1000 minvel
423                 v3f1000 maxvel
424                 v3f1000 minacc
425                 v3f1000 maxacc
426                 f1000 minexptime
427                 f1000 maxexptime
428                 f1000 minsize
429                 f1000 maxsize
430                 u8 bool collisiondetection
431                 u32 len
432                 u8[len] texture
433                 u32 id
434         */
435
436         TOCLIENT_DELETE_PARTICLESPAWNER = 0x48,
437         /*
438                 u16 command
439                 u32 id
440         */
441
442         TOCLIENT_HUDADD = 0x49,
443         /*
444                 u16 command
445                 u32 id
446                 u8 type
447                 v2f1000 pos
448                 u32 len
449                 u8[len] name
450                 v2f1000 scale
451                 u32 len2
452                 u8[len2] text
453                 u32 number
454                 u32 item
455                 u32 dir
456                 v2f1000 align
457                 v2f1000 offset
458         */
459
460         TOCLIENT_HUDRM = 0x4a,
461         /*
462                 u16 command
463                 u32 id
464         */
465
466         TOCLIENT_HUDCHANGE = 0x4b,
467         /*
468                 u16 command
469                 u32 id
470                 u8 stat
471                 [v2f1000 data |
472                  u32 len
473                  u8[len] data |
474                  u32 data]
475         */
476
477         TOCLIENT_HUD_SET_FLAGS = 0x4c,
478         /*
479                 u16 command
480                 u32 flags
481                 u32 mask
482         */
483
484         TOCLIENT_HUD_SET_PARAM = 0x4d,
485         /*
486                 u16 command
487                 u16 param
488                 u16 len
489                 u8[len] value
490         */
491
492         TOCLIENT_BREATH = 0x4e,
493         /*
494                 u16 command
495                 u16 breath
496         */
497 };
498
499 enum ToServerCommand
500 {
501         TOSERVER_INIT=0x10,
502         /*
503                 Sent first after connected.
504
505                 [0] u16 TOSERVER_INIT
506                 [2] u8 SER_FMT_VER_HIGHEST
507                 [3] u8[20] player_name
508                 [23] u8[28] password (new in some version)
509                 [51] u16 minimum supported network protocol version (added sometime)
510                 [53] u16 maximum supported network protocol version (added later than the previous one)
511         */
512
513         TOSERVER_INIT2 = 0x11,
514         /*
515                 Sent as an ACK for TOCLIENT_INIT.
516                 After this, the server can send data.
517
518                 [0] u16 TOSERVER_INIT2
519         */
520
521         TOSERVER_GETBLOCK=0x20, // Obsolete
522         TOSERVER_ADDNODE = 0x21, // Obsolete
523         TOSERVER_REMOVENODE = 0x22, // Obsolete
524
525         TOSERVER_PLAYERPOS = 0x23,
526         /*
527                 [0] u16 command
528                 [2] v3s32 position*100
529                 [2+12] v3s32 speed*100
530                 [2+12+12] s32 pitch*100
531                 [2+12+12+4] s32 yaw*100
532                 [2+12+12+4+4] u32 keyPressed
533         */
534
535         TOSERVER_GOTBLOCKS = 0x24,
536         /*
537                 [0] u16 command
538                 [2] u8 count
539                 [3] v3s16 pos_0
540                 [3+6] v3s16 pos_1
541                 ...
542         */
543
544         TOSERVER_DELETEDBLOCKS = 0x25,
545         /*
546                 [0] u16 command
547                 [2] u8 count
548                 [3] v3s16 pos_0
549                 [3+6] v3s16 pos_1
550                 ...
551         */
552
553         TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
554         /*
555                 [0] u16 command
556                 [2] v3s16 pos
557                 [8] u16 i
558         */
559
560         TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
561         /*
562                 length: 13
563                 [0] u16 command
564                 [2] u8 button (0=left, 1=right)
565                 [3] v3s16 blockpos
566                 [9] s16 id
567                 [11] u16 item
568         */
569
570         TOSERVER_GROUND_ACTION = 0x28, // Obsolete
571         /*
572                 length: 17
573                 [0] u16 command
574                 [2] u8 action
575                 [3] v3s16 nodepos_undersurface
576                 [9] v3s16 nodepos_abovesurface
577                 [15] u16 item
578                 actions:
579                 0: start digging (from undersurface)
580                 1: place block (to abovesurface)
581                 2: stop digging (all parameters ignored)
582                 3: digging completed
583         */
584         
585         TOSERVER_RELEASE = 0x29, // Obsolete
586
587         // (oops, there is some gap here)
588
589         TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
590         /*
591                 u16 command
592                 v3s16 blockpos
593                 s16 id
594                 u16 textlen
595                 textdata
596         */
597
598         TOSERVER_INVENTORY_ACTION = 0x31,
599         /*
600                 See InventoryAction in inventory.h
601         */
602
603         TOSERVER_CHAT_MESSAGE = 0x32,
604         /*
605                 u16 command
606                 u16 length
607                 wstring message
608         */
609
610         TOSERVER_SIGNNODETEXT = 0x33, // obsolete
611         /*
612                 u16 command
613                 v3s16 p
614                 u16 textlen
615                 textdata
616         */
617
618         TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
619         /*
620                 length: 7
621                 [0] u16 command
622                 [2] u8 button (0=left, 1=right)
623                 [3] u16 id
624                 [5] u16 item
625         */
626         
627         TOSERVER_DAMAGE = 0x35,
628         /*
629                 u16 command
630                 u8 amount
631         */
632
633         TOSERVER_PASSWORD=0x36,
634         /*
635                 Sent to change password.
636
637                 [0] u16 TOSERVER_PASSWORD
638                 [2] u8[28] old password
639                 [30] u8[28] new password
640         */
641
642         TOSERVER_PLAYERITEM=0x37,
643         /*
644                 Sent to change selected item.
645
646                 [0] u16 TOSERVER_PLAYERITEM
647                 [2] u16 item
648         */
649         
650         TOSERVER_RESPAWN=0x38,
651         /*
652                 u16 TOSERVER_RESPAWN
653         */
654
655         TOSERVER_INTERACT = 0x39,
656         /*
657                 [0] u16 command
658                 [2] u8 action
659                 [3] u16 item
660                 [5] u32 length of the next item
661                 [9] serialized PointedThing
662                 actions:
663                 0: start digging (from undersurface) or use
664                 1: stop digging (all parameters ignored)
665                 2: digging completed
666                 3: place block or item (to abovesurface)
667                 4: use item
668
669                 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
670         */
671         
672         TOSERVER_REMOVED_SOUNDS = 0x3a,
673         /*
674                 u16 command
675                 u16 len
676                 s32[len] sound_id
677         */
678
679         TOSERVER_NODEMETA_FIELDS = 0x3b,
680         /*
681                 u16 command
682                 v3s16 p
683                 u16 len
684                 u8[len] form name (reserved for future use)
685                 u16 number of fields
686                 for each field:
687                         u16 len
688                         u8[len] field name
689                         u32 len
690                         u8[len] field value
691         */
692
693         TOSERVER_INVENTORY_FIELDS = 0x3c,
694         /*
695                 u16 command
696                 u16 len
697                 u8[len] form name (reserved for future use)
698                 u16 number of fields
699                 for each field:
700                         u16 len
701                         u8[len] field name
702                         u32 len
703                         u8[len] field value
704         */
705
706         TOSERVER_REQUEST_MEDIA = 0x40,
707         /*
708                 u16 command
709                 u16 number of files requested
710                 for each file {
711                         u16 length of name
712                         string name
713                 }
714          */
715
716         TOSERVER_RECEIVED_MEDIA = 0x41,
717         /*
718                 u16 command
719         */
720
721         TOSERVER_BREATH = 0x42,
722         /*
723                 u16 command
724                 u16 breath
725         */
726 };
727
728 #endif
729