]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/clientserver.h
Add disable_jump and fall_damage_add_percent node groups
[dragonfireclient.git] / src / clientserver.h
index cd54fe239749a9836641f9a975d2148ad3923b21..a6ba8fe45c82d837404024f7b407b5c2928aada3 100644 (file)
@@ -3,16 +3,16 @@ Minetest-c55
 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
@@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef CLIENTSERVER_HEADER
 #define CLIENTSERVER_HEADER
 
-#include "utility.h"
+#include "util/serialize.h"
 
 /*
        changes by PROTOCOL_VERSION:
@@ -28,18 +28,54 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        PROTOCOL_VERSION 3:
                Base for writing changes here
        PROTOCOL_VERSION 4:
+               Add TOCLIENT_MEDIA
                Add TOCLIENT_TOOLDEF
-               Add TOCLIENT_TEXTURES
                Add TOCLIENT_NODEDEF
+               Add TOCLIENT_CRAFTITEMDEF
+               Add TOSERVER_INTERACT
+               Obsolete TOSERVER_CLICK_ACTIVEOBJECT
+               Obsolete TOSERVER_GROUND_ACTION
+       PROTOCOL_VERSION 5:
+               Make players to be handled mostly as ActiveObjects
+       PROTOCOL_VERSION 6:
+               Only non-cached textures are sent
+       PROTOCOL_VERSION 7:
+               Add TOCLIENT_ITEMDEF
+               Obsolete TOCLIENT_TOOLDEF
+               Obsolete TOCLIENT_CRAFTITEMDEF
+               Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
+       PROTOCOL_VERSION 8:
+               Digging based on item groups
+               Many things
+       PROTOCOL_VERSION 9:
+               ContentFeatures and NodeDefManager use a different serialization
+                   format; better for future version cross-compatibility
+               Many things
+       PROTOCOL_VERSION 10:
+               TOCLIENT_PRIVILEGES
+               Version raised to force 'fly' and 'fast' privileges into effect.
+               Node metadata change (came in later; somewhat incompatible)
+       PROTOCOL_VERSION 11:
+               TileDef in ContentFeatures
+               Nodebox drawtype
+               (some dev snapshot)
+               TOCLIENT_INVENTORY_FORMSPEC
+               (0.4.0, 0.4.1)
+       PROTOCOL_VERSION 12:
+               TOSERVER_INVENTORY_FIELDS
+               16-bit node ids
+               TOCLIENT_DETACHED_INVENTORY
 */
 
-#define PROTOCOL_VERSION 4
+#define PROTOCOL_VERSION 12
 
 #define PROTOCOL_ID 0x4f457403
 
 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
                                // base64-encoded SHA-1 (27+\0).
 
+#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
+
 enum ToClientCommand
 {
        TOCLIENT_INIT = 0x10,
@@ -72,7 +108,7 @@ enum ToClientCommand
                [N+2+12+12+4] s32 yaw*100
        */
 
-       TOCLIENT_PLAYERINFO = 0x24,
+       TOCLIENT_PLAYERINFO = 0x24, // Obsolete
        /*
                [0] u16 command
                // Followed by an arbitary number of these:
@@ -96,7 +132,7 @@ enum ToClientCommand
                [2] serialized inventory
        */
        
-       TOCLIENT_OBJECTDATA = 0x28,
+       TOCLIENT_OBJECTDATA = 0x28, // Obsolete
        /*
                Sent as unreliable.
 
@@ -118,6 +154,8 @@ enum ToClientCommand
        /*
                u16 command
                u16 time (0-23999)
+               Added in a later version:
+               f1000 time_speed
        */
 
        // (oops, there is some gap here)
@@ -177,7 +215,7 @@ enum ToClientCommand
                wstring reason
        */
 
-       TOCLIENT_PLAYERITEM = 0x36,
+       TOCLIENT_PLAYERITEM = 0x36, // Obsolete
        /*
                u16 command
                u16 count of player items
@@ -195,36 +233,102 @@ enum ToClientCommand
                v3f1000 camera point target (to point the death cause or whatever)
        */
 
-       TOCLIENT_TOOLDEF = 0x38,
+       TOCLIENT_MEDIA = 0x38,
+       /*
+               u16 command
+               u16 total number of texture bunches
+               u16 index of this bunch
+               u32 number of files in this bunch
+               for each file {
+                       u16 length of name
+                       string name
+                       u32 length of data
+                       data
+               }
+       */
+       
+       TOCLIENT_TOOLDEF = 0x39,
        /*
                u16 command
                u32 length of the next item
                serialized ToolDefManager
        */
        
-       TOCLIENT_TEXTURES = 0x39,
+       TOCLIENT_NODEDEF = 0x3a,
        /*
                u16 command
-               u32 number of textures
+               u32 length of the next item
+               serialized NodeDefManager
+       */
+       
+       TOCLIENT_CRAFTITEMDEF = 0x3b,
+       /*
+               u16 command
+               u32 length of the next item
+               serialized CraftiItemDefManager
+       */
+
+       TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
+
+       /*
+               u16 command
+               u32 number of files
                for each texture {
                        u16 length of name
                        string name
-                       u32 length of data
-                       data
+                       u16 length of sha1_digest
+                       string sha1_digest
                }
        */
-       
-       TOCLIENT_NODEDEF = 0x3a,
+
+       TOCLIENT_ITEMDEF = 0x3d,
        /*
                u16 command
-               u32 length of the next item
-               serialized NodeDefManager
+               u32 length of next item
+               serialized ItemDefManager
        */
        
-       //TOCLIENT_CONTENT_SENDING_MODE = 0x38,
+       TOCLIENT_PLAY_SOUND = 0x3f,
+       /*
+               u16 command
+               s32 sound_id
+               u16 len
+               u8[len] sound name
+               s32 gain*1000
+               u8 type (0=local, 1=positional, 2=object)
+               s32[3] pos_nodes*10000
+               u16 object_id
+               u8 loop (bool)
+       */
+
+       TOCLIENT_STOP_SOUND = 0x40,
+       /*
+               u16 command
+               s32 sound_id
+       */
+
+       TOCLIENT_PRIVILEGES = 0x41,
+       /*
+               u16 command
+               u16 number of privileges
+               for each privilege
+                       u16 len
+                       u8[len] privilege
+       */
+
+       TOCLIENT_INVENTORY_FORMSPEC = 0x42,
        /*
                u16 command
-               u8 mode (0 = off, 1 = on)
+               u32 len
+               u8[len] formspec
+       */
+
+       TOCLIENT_DETACHED_INVENTORY = 0x43,
+       /*
+               [0] u16 command
+               u16 len
+               u8[len] name
+               [2] serialized inventory
        */
 };
 
@@ -287,7 +391,7 @@ enum ToServerCommand
                [8] u16 i
        */
 
-       TOSERVER_CLICK_OBJECT = 0x27,
+       TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
        /*
                length: 13
                [0] u16 command
@@ -297,7 +401,7 @@ enum ToServerCommand
                [11] u16 item
        */
 
-       TOSERVER_GROUND_ACTION = 0x28,
+       TOSERVER_GROUND_ACTION = 0x28, // Obsolete
        /*
                length: 17
                [0] u16 command
@@ -316,7 +420,7 @@ enum ToServerCommand
 
        // (oops, there is some gap here)
 
-       TOSERVER_SIGNTEXT = 0x30, // Old signs
+       TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
        /*
                u16 command
                v3s16 blockpos
@@ -337,7 +441,7 @@ enum ToServerCommand
                wstring message
        */
 
-       TOSERVER_SIGNNODETEXT = 0x33,
+       TOSERVER_SIGNNODETEXT = 0x33, // obsolete
        /*
                u16 command
                v3s16 p
@@ -345,7 +449,7 @@ enum ToServerCommand
                textdata
        */
 
-       TOSERVER_CLICK_ACTIVEOBJECT = 0x34,
+       TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
        /*
                length: 7
                [0] u16 command
@@ -381,13 +485,76 @@ enum ToServerCommand
        /*
                u16 TOSERVER_RESPAWN
        */
+
+       TOSERVER_INTERACT = 0x39,
+       /*
+               [0] u16 command
+               [2] u8 action
+               [3] u16 item
+               [5] u32 length of the next item
+               [9] serialized PointedThing
+               actions:
+               0: start digging (from undersurface) or use
+               1: stop digging (all parameters ignored)
+               2: digging completed
+               3: place block or item (to abovesurface)
+               4: use item
+
+               (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
+       */
+       
+       TOSERVER_REMOVED_SOUNDS = 0x3a,
+       /*
+               u16 command
+               u16 len
+               s32[len] sound_id
+       */
+
+       TOSERVER_NODEMETA_FIELDS = 0x3b,
+       /*
+               u16 command
+               v3s16 p
+               u16 len
+               u8[len] form name (reserved for future use)
+               u16 number of fields
+               for each field:
+                       u16 len
+                       u8[len] field name
+                       u32 len
+                       u8[len] field value
+       */
+
+       TOSERVER_INVENTORY_FIELDS = 0x3c,
+       /*
+               u16 command
+               u16 len
+               u8[len] form name (reserved for future use)
+               u16 number of fields
+               for each field:
+                       u16 len
+                       u8[len] field name
+                       u32 len
+                       u8[len] field value
+       */
+
+       TOSERVER_REQUEST_MEDIA = 0x40,
+       /*
+               u16 command
+               u16 number of files requested
+               for each file {
+                       u16 length of name
+                       string name
+               }
+        */
+
 };
 
-inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time)
+inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed)
 {
-       SharedBuffer<u8> data(2+2);
+       SharedBuffer<u8> data(2+2+4);
        writeU16(&data[0], TOCLIENT_TIME_OF_DAY);
        writeU16(&data[2], time);
+       writeF1000(&data[4], time_speed);
        return data;
 }