diff --git a/.hgignore b/.hgignore index 964b22b..e4e0caa 100644 --- a/.hgignore +++ b/.hgignore @@ -22,3 +22,4 @@ CPackSourceConfig.cmake Makefile cmake_install.cmake src/jthread/libjthread.a +data_temp/* diff --git a/.hgtags b/.hgtags index 2911487..5244e8c 100644 --- a/.hgtags +++ b/.hgtags @@ -16,3 +16,15 @@ dd08a9b5cb84d55b7576bb3fde3068dd263bc3bc 0.2.20110618_0_dev 0000000000000000000000000000000000000000 0.2.20110704_0 0000000000000000000000000000000000000000 0.2.20110704_0 65263ec55caf526e3f3e0bdc6657ce42daee46bc 0.2.20110704_0 +06c62112b503e746d5d8cc40f951974447d590b7 0.2.20110731_0 +705a7e95b8710c8cada5524d8c7bb658f4b710d9 0.2.20110731_1 +4a6cf9491306988b24c79438ee6398885c432fce 0.2.20110731_2 +4a6cf9491306988b24c79438ee6398885c432fce 0.2.20110731_2 +0000000000000000000000000000000000000000 0.2.20110731_2 +0000000000000000000000000000000000000000 0.2.20110731_2 +8ad16fbce9a4da45b2552ad8b400a5a127722acc 0.2.20110731_2 +c87e28deaabf4a776c261b3a09b6bf5ea3e04abf 0.2.20110731_3 +c87e28deaabf4a776c261b3a09b6bf5ea3e04abf 0.2.20110731_3 +0000000000000000000000000000000000000000 0.2.20110731_3 +0000000000000000000000000000000000000000 0.2.20110731_3 +b277d01700f640b0ba2684a8ead3b7169a4a8175 0.2.20110731_3 diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b7ceac..40ecbf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ project(minetest-delta) set(VERSION_MAJOR 0) set(VERSION_MINOR 2) -set(VERSION_PATCH 20110730_rc1) +set(VERSION_PATCH 20110731_3) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") # Configuration options @@ -21,7 +21,11 @@ else() endif() set(BUILD_CLIENT 1 CACHE BOOL "Build client") -set(BUILD_SERVER 1 CACHE BOOL "Build server") +if(WIN32) + set(BUILD_SERVER 0 CACHE BOOL "Build server") +else() + set(BUILD_SERVER 1 CACHE BOOL "Build server") +endif() set(WARN_ALL 1 CACHE BOOL "Enable -Wall for Release build") @@ -60,6 +64,7 @@ elseif(UNIX) # Linux, BSD etc endif() install(FILES "doc/README.txt" DESTINATION "${DOCDIR}") +install(FILES "doc/changelog.txt" DESTINATION "${DOCDIR}") install(FILES "minetest.conf.example" DESTINATION "${DOCDIR}") # diff --git a/data/cooked_rat.png b/data/cooked_rat.png new file mode 100644 index 0000000..daad3be Binary files /dev/null and b/data/cooked_rat.png differ diff --git a/data/nc_back.png b/data/nc_back.png new file mode 100644 index 0000000..f09f416 Binary files /dev/null and b/data/nc_back.png differ diff --git a/data/nc_front.png b/data/nc_front.png new file mode 100644 index 0000000..cad9eda Binary files /dev/null and b/data/nc_front.png differ diff --git a/data/nc_rb.png b/data/nc_rb.png new file mode 100644 index 0000000..7ebc993 Binary files /dev/null and b/data/nc_rb.png differ diff --git a/data/nc_side.png b/data/nc_side.png new file mode 100644 index 0000000..f954045 Binary files /dev/null and b/data/nc_side.png differ diff --git a/data/scorched_stuff.png b/data/scorched_stuff.png new file mode 100644 index 0000000..9ced2fb Binary files /dev/null and b/data/scorched_stuff.png differ diff --git a/data/tool_steelsword.png b/data/tool_steelsword.png new file mode 100644 index 0000000..a745812 Binary files /dev/null and b/data/tool_steelsword.png differ diff --git a/data/tool_stonesword.png b/data/tool_stonesword.png new file mode 100644 index 0000000..8f8191f Binary files /dev/null and b/data/tool_stonesword.png differ diff --git a/data/tool_woodsword.png b/data/tool_woodsword.png new file mode 100644 index 0000000..d6c6be3 Binary files /dev/null and b/data/tool_woodsword.png differ diff --git a/doc/changelog.txt b/doc/changelog.txt index 58d28d2..2c577b4 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -3,6 +3,27 @@ Minetest-c55 changelog This should contain all the major changes. For minor stuff, refer to the commit log of the repository. +2011-07-31_3: +- Fixes a bug that made the server to deny non-empty passwords from players connecting the first time + +2011-07-31_2: +- Fixes a bug that caused the server to always read an empty password from the client when a client connected. + +2011-07-31: +- A number of small fixes, build system stuff and such (refer to version control log) +- Map generator no longer crashes at generation limit +- Fixed mapgen producing lots of cut-down trees +- Some minor tweaks in map generator (some contributed) +- Volumetric clouds (contributed) +- Icon added (graphic contributed) +- Key configuration menu (contributed) +- Decorative blocks and items: bookshelf, sandstone, cactus, clay, brick, papyrus, rail, paper, book (contributed) +- Jungles! +- Hotbar is a bit smaller +- Health is now enabled by default; You can now eat cooked rats to heal yourself. +- Finally added sword textures, altough sword is still of no use +- Creative mode now preserves normal mode inventory + 2011-07-04: - Many small fixes - Code reorganizing to aid further development diff --git a/minetest-icon.ico b/minetest-icon.ico new file mode 100644 index 0000000..82af67b Binary files /dev/null and b/minetest-icon.ico differ diff --git a/minetest.conf.example b/minetest.conf.example index b81cc5f..c47ac77 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -95,6 +95,8 @@ screenH# = 600 #invert_mouse = false # FarMesh thingy #enable_farmesh = false +#farmesh_trees = true +#farmesh_distance = 40 # Enable/disable clouds #enable_clouds = true # Don't draw stone (for testing) @@ -108,9 +110,8 @@ screenH# = 600 # Map directory (everything in the world is stored here) #map-#dir = /custom/map -# Set to true to enable experimental features or stuff that is tested -# (varies from version to version, usually not useful at all) -#enable_experimental = false +# Message of the Day +#motd = Welcome to this awesome Minetest server! # Set to true to enable creative mode (unlimited inventory) #creative_mode = false #enable_damage = false @@ -119,10 +120,13 @@ screenH# = 600 #default_password = # Available privileges: build, teleport, settime, privs, shout #default_privs = build, shout + +# Set to true to enable experimental features or stuff that is tested +# (varies from version to version, usually not useful at all) +#enable_experimental = false # Profiler data print interval. #0 = disable. #profiler_print_interval = 0 #enable_mapgen_debug_info = false - # Player and object positions are sent at intervals specified by this #objectdata_interval = 0.2 #active_object_range = 2 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fcdb3cc..32177f8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -129,6 +129,11 @@ set(common_SRCS base64.cpp ) +# This gives us the icon +if(WIN32 AND MSVC) + set(common_SRCS ${common_SRCS} winresource.rc) +endif() + # Client sources set(minetest_SRCS ${common_SRCS} diff --git a/src/client.cpp b/src/client.cpp index c52d3ab..02f78e2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -424,7 +424,7 @@ void Client::step(float dtime) memset((char*)&data[3], 0, PLAYERNAME_SIZE); snprintf((char*)&data[3], PLAYERNAME_SIZE, "%s", myplayer->getName()); - /*dstream<<"Client: password hash is \""<setInventoryTextureCube("stone.png", "stone.png", "stone.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(CONTENT_COBBLE)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_COBBLE)+" 1"; setStoneLikeDiggingProperties(f->digging_properties, 1.0); if(invisible_stone) f->solidness = 0; // For debugging, hides regular stone @@ -118,7 +118,7 @@ void content_mapnode_init() f->setTexture(1, "mud.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(CONTENT_MUD)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MUD)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_GRASS_FOOTSTEPS; @@ -128,7 +128,7 @@ void content_mapnode_init() f->setTexture(1, "mud.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(CONTENT_MUD)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MUD)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_MUD; @@ -137,7 +137,7 @@ void content_mapnode_init() f->setInventoryTextureCube("mud.png", "mud.png", "mud.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_SAND; @@ -146,7 +146,7 @@ void content_mapnode_init() f->setInventoryTextureCube("sand.png", "sand.png", "sand.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_GRAVEL; @@ -155,7 +155,7 @@ void content_mapnode_init() f->setInventoryTextureCube("gravel.png", "gravel.png", "gravel.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.75); i = CONTENT_SANDSTONE; @@ -164,7 +164,7 @@ void content_mapnode_init() f->setInventoryTextureCube("sandstone.png", "sandstone.png", "sandstone.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(CONTENT_SAND)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAND)+" 1"; setDirtLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_CLAY; @@ -192,7 +192,7 @@ void content_mapnode_init() f->setTexture(1, "tree_top.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setWoodLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_JUNGLETREE; @@ -202,7 +202,7 @@ void content_mapnode_init() f->setTexture(1, "jungletree_top.png"); f->param_type = CPT_MINERAL; //f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setWoodLikeDiggingProperties(f->digging_properties, 1.0); i = CONTENT_JUNGLEGRASS; @@ -212,7 +212,7 @@ void content_mapnode_init() f->param_type = CPT_LIGHT; //f->is_ground_content = true; f->air_equivalent = false; // grass grows underneath - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->solidness = 0; // drawn separately, makes no faces f->walkable = false; setWoodLikeDiggingProperties(f->digging_properties, 0.10); @@ -232,7 +232,7 @@ void content_mapnode_init() { f->setAllTextures("[noalpha:leaves.png"); } - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setWoodLikeDiggingProperties(f->digging_properties, 0.15); i = CONTENT_CACTUS; @@ -243,7 +243,7 @@ void content_mapnode_init() f->setInventoryTextureCube("cactus_top.png", "cactus_side.png", "cactus_side.png"); f->param_type = CPT_MINERAL; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setWoodLikeDiggingProperties(f->digging_properties, 0.75); i = CONTENT_PAPYRUS; @@ -252,7 +252,7 @@ void content_mapnode_init() f->light_propagates = true; f->param_type = CPT_LIGHT; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->solidness = 0; // drawn separately, makes no faces f->walkable = false; setWoodLikeDiggingProperties(f->digging_properties, 0.25); @@ -275,7 +275,7 @@ void content_mapnode_init() f->sunlight_propagates = true; f->param_type = CPT_LIGHT; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->solidness = 0; // drawn separately, makes no faces f->setInventoryTextureCube("glass.png", "glass.png", "glass.png"); setWoodLikeDiggingProperties(f->digging_properties, 0.15); @@ -285,7 +285,7 @@ void content_mapnode_init() f->light_propagates = true; f->param_type = CPT_LIGHT; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->solidness = 0; // drawn separately, makes no faces f->air_equivalent = true; // grass grows underneath f->setInventoryTexture("item_fence.png"); @@ -297,7 +297,7 @@ void content_mapnode_init() f->light_propagates = true; f->param_type = CPT_LIGHT; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->solidness = 0; // drawn separately, makes no faces f->air_equivalent = true; // grass grows underneath f->walkable = false; @@ -315,7 +315,7 @@ void content_mapnode_init() f->setAllTextures("wood.png"); f->setInventoryTextureCube("wood.png", "wood.png", "wood.png"); f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setWoodLikeDiggingProperties(f->digging_properties, 0.75); i = CONTENT_MESE; @@ -323,7 +323,7 @@ void content_mapnode_init() f->setAllTextures("mese.png"); f->setInventoryTextureCube("mese.png", "mese.png", "mese.png"); f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setStoneLikeDiggingProperties(f->digging_properties, 0.5); i = CONTENT_CLOUD; @@ -331,7 +331,7 @@ void content_mapnode_init() f->setAllTextures("cloud.png"); f->setInventoryTextureCube("cloud.png", "cloud.png", "cloud.png"); f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; i = CONTENT_AIR; f = &content_features(i); @@ -387,7 +387,7 @@ void content_mapnode_init() f->diggable = false; f->buildable_to = true; f->liquid_type = LIQUID_SOURCE; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->liquid_alternative_flowing = CONTENT_WATER; f->liquid_alternative_source = CONTENT_WATERSOURCE; @@ -401,7 +401,7 @@ void content_mapnode_init() f->walkable = false; f->wall_mounted = true; f->air_equivalent = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->light_source = LIGHT_MAX-1; f->digging_properties.set("", DiggingProperties(true, 0.0, 0)); @@ -415,7 +415,7 @@ void content_mapnode_init() f->walkable = false; f->wall_mounted = true; f->air_equivalent = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; if(f->initial_metadata == NULL) f->initial_metadata = new SignNodeMetadata("Some sign"); f->digging_properties.set("", DiggingProperties(true, 0.5, 0)); @@ -429,7 +429,7 @@ void content_mapnode_init() f->setTexture(5, "chest_front.png"); // Z- f->setInventoryTexture("chest_top.png"); //f->setInventoryTextureCube("chest_top.png", "chest_side.png", "chest_side.png"); - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; if(f->initial_metadata == NULL) f->initial_metadata = new ChestNodeMetadata(); setWoodLikeDiggingProperties(f->digging_properties, 1.0); @@ -440,8 +440,8 @@ void content_mapnode_init() f->setAllTextures("furnace_side.png"); f->setTexture(5, "furnace_front.png"); // Z- f->setInventoryTexture("furnace_front.png"); - //f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; - f->dug_item = std::string("MaterialItem ")+itos(CONTENT_COBBLE)+" 6"; + //f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_COBBLE)+" 6"; if(f->initial_metadata == NULL) f->initial_metadata = new FurnaceNodeMetadata(); setStoneLikeDiggingProperties(f->digging_properties, 3.0); @@ -452,7 +452,7 @@ void content_mapnode_init() f->setInventoryTextureCube("cobble.png", "cobble.png", "cobble.png"); f->param_type = CPT_NONE; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setStoneLikeDiggingProperties(f->digging_properties, 0.9); i = CONTENT_MOSSYCOBBLE; @@ -461,7 +461,7 @@ void content_mapnode_init() f->setInventoryTextureCube("mossycobble.png", "mossycobble.png", "mossycobble.png"); f->param_type = CPT_NONE; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setStoneLikeDiggingProperties(f->digging_properties, 0.8); i = CONTENT_STEEL; @@ -471,16 +471,33 @@ void content_mapnode_init() "steel_block.png"); f->param_type = CPT_NONE; f->is_ground_content = true; - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; setStoneLikeDiggingProperties(f->digging_properties, 5.0); + i = CONTENT_NC; + f = &content_features(i); + f->param_type = CPT_FACEDIR_SIMPLE; + f->setAllTextures("nc_side.png"); + f->setTexture(5, "nc_front.png"); // Z- + f->setTexture(4, "nc_back.png"); // Z+ + f->setInventoryTexture("nc_front.png"); + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; + setStoneLikeDiggingProperties(f->digging_properties, 3.0); + + i = CONTENT_NC_RB; + f = &content_features(i); + f->setAllTextures("nc_rb.png"); + f->setInventoryTexture("nc_rb.png"); + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; + setStoneLikeDiggingProperties(f->digging_properties, 3.0); + // NOTE: Remember to add frequently used stuff to the texture atlas in tile.cpp /* Add MesePick to everything */ - for(u16 i=0; i<256; i++) + for(u16 i=0; i<=MAX_CONTENT; i++) { content_features(i).digging_properties.set("MesePick", DiggingProperties(true, 0.0, 65535./1337)); diff --git a/src/content_mapnode.h b/src/content_mapnode.h index 5fdbf45..609df0a 100644 --- a/src/content_mapnode.h +++ b/src/content_mapnode.h @@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., void content_mapnode_init(); +extern content_t trans_table_19[21][2]; + MapNode mapnode_translate_from_internal(MapNode n_from, u8 version); MapNode mapnode_translate_to_internal(MapNode n_from, u8 version); @@ -70,6 +72,8 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version); #define CONTENT_BOOKSHELF 0x814 //29 #define CONTENT_JUNGLETREE 0x815 #define CONTENT_JUNGLEGRASS 0x816 +#define CONTENT_NC 0x817 +#define CONTENT_NC_RB 0x818 #endif diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index c1104ef..91524a6 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -77,7 +77,7 @@ void set_default_settings() g_settings.setDefault("screenshot_path", "."); // Server stuff - g_settings.setDefault("motd", ""); + g_settings.setDefault("motd", ""); g_settings.setDefault("enable_experimental", "false"); g_settings.setDefault("creative_mode", "false"); g_settings.setDefault("enable_damage", "true"); diff --git a/src/inventory.cpp b/src/inventory.cpp index ca05061..30a43e3 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -46,6 +46,18 @@ InventoryItem::~InventoryItem() { } +content_t content_translate_from_19_to_internal(content_t c_from) +{ + for(u32 i=0; i>material; + u16 count; + is>>count; + // Convert old materials + if(material <= 0xff) + { + material = content_translate_from_19_to_internal(material); + } + if(material > MAX_CONTENT) + throw SerializationError("Too large material number"); + return new MaterialItem(material, count); + } + else if(name == "MaterialItem2") + { u16 material; is>>material; u16 count; diff --git a/src/inventory.h b/src/inventory.h index 66b1cd1..53495c6 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -136,7 +136,7 @@ public: virtual void serialize(std::ostream &os) { //os.imbue(std::locale("C")); - os<setAllTextures("unknown_block.png"); - f->dug_item = std::string("MaterialItem ")+itos(i)+" 1"; + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; } /* diff --git a/src/mapnode.h b/src/mapnode.h index 3cca985..1fb84e1 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -391,6 +391,9 @@ inline v3s16 unpackDir(u8 b) facedir: CPT_FACEDIR_SIMPLE param1 value dir: The face for which stuff is wanted return value: The face from which the stuff is actually found + + NOTE: Currently this uses 2 bits for Z-,X-,Z+,X+, should there be Y+ + and Y- too? */ v3s16 facedir_rotate(u8 facedir, v3s16 dir); diff --git a/src/player.cpp b/src/player.cpp index d52d6b8..c43276e 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -29,6 +29,7 @@ Player::Player(): in_water(false), in_water_stable(false), swimming_up(false), + inventory_backup(NULL), craftresult_is_preview(true), hp(20), peer_id(PEER_ID_INEXISTENT), @@ -43,6 +44,7 @@ Player::Player(): Player::~Player() { + delete inventory_backup; } void Player::resetInventory() @@ -106,8 +108,13 @@ void Player::serialize(std::ostream &os) args.writeLines(os); os<<"PlayerArgsEnd\n"; - - inventory.serialize(os); + + // If actual inventory is backed up due to creative mode, save it + // instead of the dummy creative mode inventory + if(inventory_backup) + inventory_backup->serialize(os); + else + inventory.serialize(os); } void Player::deSerialize(std::istream &is) diff --git a/src/player.h b/src/player.h index a7a2433..29460e1 100644 --- a/src/player.h +++ b/src/player.h @@ -121,6 +121,8 @@ public: bool swimming_up; Inventory inventory; + // Actual inventory is backed up here when creative mode is used + Inventory *inventory_backup; bool craftresult_is_preview; diff --git a/src/server.cpp b/src/server.cpp index 07f9875..8a19306 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1972,20 +1972,23 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } /* - Check network protocol version + Read and check network protocol version */ + u16 net_proto_version = 0; if(datasize >= 2+1+PLAYERNAME_SIZE+PASSWORD_SIZE+2) { net_proto_version = readU16(&data[2+1+PLAYERNAME_SIZE+PASSWORD_SIZE]); } + getClient(peer->id)->net_proto_version = net_proto_version; - /*if(net_proto_version == 0) + + if(net_proto_version == 0) { SendAccessDenied(m_con, peer_id, - L"Your client is too old (network protocol)"); + L"Your client is too old. Please upgrade."); return; - }*/ + } /* Set up player @@ -2017,7 +2020,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) // Get password char password[PASSWORD_SIZE]; - if(datasize >= 2+1+PLAYERNAME_SIZE) + if(datasize < 2+1+PLAYERNAME_SIZE+PASSWORD_SIZE) { // old version - assume blank password password[0] = 0; @@ -2041,7 +2044,10 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) checkpwd = g_settings.get("default_password"); } - if(password != checkpwd && checkpwd != "") + /*dstream<<"Server: Client gave password '"<id)->net_proto_version == 0) + + // Warnings about protocol version can be issued here + /*if(getClient(peer->id)->net_proto_version == 0) { SendChatMessage(peer_id, L"# Server: NOTE: YOUR CLIENT IS OLD AND DOES NOT WORK PROPERLY WITH THIS SERVER"); - } + }*/ return; } @@ -3346,6 +3353,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) newpwd += c; } + dstream<<"Server: Client requests a password change from " + <<"'"<getName(); if(m_authmanager.exists(playername) == false) @@ -3357,7 +3367,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } std::string checkpwd = m_authmanager.getPassword(playername); - + if(oldpwd != checkpwd) { dstream<<"Server: invalid old password"<inventory_backup = new Inventory(); + *(player->inventory_backup) = player->inventory; + // Set creative inventory craft_set_creative_inventory(player); } @@ -4183,6 +4198,11 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id if(g_settings.getBool("creative_mode")) { + // Warning: double code above + // Backup actual inventory + player->inventory_backup = new Inventory(); + *(player->inventory_backup) = player->inventory; + // Set creative inventory craft_set_creative_inventory(player); } else if(g_settings.getBool("give_initial_stuff")) diff --git a/src/winresource.rc b/src/winresource.rc new file mode 100644 index 0000000..24ec445 --- /dev/null +++ b/src/winresource.rc @@ -0,0 +1,6 @@ +#include +#include +#include +LANGUAGE 0, SUBLANG_NEUTRAL +130 ICON "..\\minetest-icon.ico" +//131 BITMAP "..\\minetest-icon.bmp"