Merge remote-tracking branch 'origin/upstream'
@ -22,3 +22,4 @@ CPackSourceConfig.cmake
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
src/jthread/libjthread.a
|
||||
data_temp/*
|
||||
|
12
.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
|
||||
|
@ -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}")
|
||||
|
||||
#
|
||||
|
BIN
data/cooked_rat.png
Normal file
After Width: | Height: | Size: 239 B |
BIN
data/nc_back.png
Normal file
After Width: | Height: | Size: 303 B |
BIN
data/nc_front.png
Normal file
After Width: | Height: | Size: 410 B |
BIN
data/nc_rb.png
Normal file
After Width: | Height: | Size: 203 B |
BIN
data/nc_side.png
Normal file
After Width: | Height: | Size: 260 B |
BIN
data/scorched_stuff.png
Normal file
After Width: | Height: | Size: 233 B |
BIN
data/tool_steelsword.png
Normal file
After Width: | Height: | Size: 291 B |
BIN
data/tool_stonesword.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/tool_woodsword.png
Normal file
After Width: | Height: | Size: 255 B |
@ -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
|
||||
|
BIN
minetest-icon.ico
Normal file
After Width: | Height: | Size: 9.4 KiB |
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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 \""<<m_password<<"\""
|
||||
/*dstream<<"Client: sending initial password hash: \""<<m_password<<"\""
|
||||
<<std::endl;*/
|
||||
|
||||
memset((char*)&data[23], 0, PASSWORD_SIZE);
|
||||
|
@ -31,7 +31,7 @@ void setStoneLikeDiggingProperties(DiggingPropertiesList &list, float toughness)
|
||||
void setDirtLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
void setWoodLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
|
||||
content_t trans_table_19[][2] = {
|
||||
content_t trans_table_19[21][2] = {
|
||||
{CONTENT_GRASS, 1},
|
||||
{CONTENT_TREE, 4},
|
||||
{CONTENT_LEAVES, 5},
|
||||
@ -106,7 +106,7 @@ void content_mapnode_init()
|
||||
f->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));
|
||||
|
@ -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
|
||||
|
@ -77,7 +77,7 @@ void set_default_settings()
|
||||
g_settings.setDefault("screenshot_path", ".");
|
||||
|
||||
// Server stuff
|
||||
g_settings.setDefault("motd", "<Message of the day (motd) not set>");
|
||||
g_settings.setDefault("motd", "");
|
||||
g_settings.setDefault("enable_experimental", "false");
|
||||
g_settings.setDefault("creative_mode", "false");
|
||||
g_settings.setDefault("enable_damage", "true");
|
||||
|
@ -46,6 +46,18 @@ InventoryItem::~InventoryItem()
|
||||
{
|
||||
}
|
||||
|
||||
content_t content_translate_from_19_to_internal(content_t c_from)
|
||||
{
|
||||
for(u32 i=0; i<sizeof(trans_table_19)/sizeof(trans_table_19[0]); i++)
|
||||
{
|
||||
if(trans_table_19[i][1] == c_from)
|
||||
{
|
||||
return trans_table_19[i][0];
|
||||
}
|
||||
}
|
||||
return c_from;
|
||||
}
|
||||
|
||||
InventoryItem* InventoryItem::deSerialize(std::istream &is)
|
||||
{
|
||||
DSTACK(__FUNCTION_NAME);
|
||||
@ -58,6 +70,21 @@ InventoryItem* InventoryItem::deSerialize(std::istream &is)
|
||||
if(name == "MaterialItem")
|
||||
{
|
||||
// u16 reads directly as a number (u8 doesn't)
|
||||
u16 material;
|
||||
is>>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;
|
||||
|
@ -136,7 +136,7 @@ public:
|
||||
virtual void serialize(std::ostream &os)
|
||||
{
|
||||
//os.imbue(std::locale("C"));
|
||||
os<<getName();
|
||||
os<<"MaterialItem2";
|
||||
os<<" ";
|
||||
os<<(unsigned int)m_content;
|
||||
os<<" ";
|
||||
|
@ -1579,6 +1579,8 @@ int main(int argc, char *argv[])
|
||||
|
||||
password = translatePassword(playername, menudata.password);
|
||||
|
||||
//dstream<<"Main: password hash: '"<<password<<"'"<<std::endl;
|
||||
|
||||
address = wide_to_narrow(menudata.address);
|
||||
int newport = stoi(wide_to_narrow(menudata.port));
|
||||
if(newport != 0)
|
||||
|
@ -976,6 +976,40 @@ static void make_dungeon1(VoxelManipulator &vmanip, PseudoRandom &random)
|
||||
}
|
||||
}
|
||||
|
||||
static void make_nc(VoxelManipulator &vmanip, PseudoRandom &random)
|
||||
{
|
||||
v3s16 dir;
|
||||
u8 facedir_i = 0;
|
||||
s32 r = random.range(0, 3);
|
||||
if(r == 0){
|
||||
dir = v3s16( 1, 0, 0);
|
||||
facedir_i = 3;
|
||||
}
|
||||
if(r == 1){
|
||||
dir = v3s16(-1, 0, 0);
|
||||
facedir_i = 1;
|
||||
}
|
||||
if(r == 2){
|
||||
dir = v3s16( 0, 0, 1);
|
||||
facedir_i = 2;
|
||||
}
|
||||
if(r == 3){
|
||||
dir = v3s16( 0, 0,-1);
|
||||
facedir_i = 0;
|
||||
}
|
||||
v3s16 p = vmanip.m_area.MinEdge + v3s16(
|
||||
16+random.range(0,15),
|
||||
16+random.range(0,15),
|
||||
16+random.range(0,15));
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = MapNode(CONTENT_NC, facedir_i);
|
||||
u32 length = random.range(3,15);
|
||||
for(u32 j=0; j<length; j++)
|
||||
{
|
||||
p -= dir;
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = MapNode(CONTENT_NC_RB);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Noise functions. Make sure seed is mangled differently in each one.
|
||||
*/
|
||||
@ -1871,6 +1905,17 @@ void make_block(BlockMakeData *data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Add NC
|
||||
*/
|
||||
{
|
||||
PseudoRandom ncrandom(blockseed+9324342);
|
||||
if(ncrandom.range(0, 1000) == 0 && blockpos.Y <= -3)
|
||||
{
|
||||
make_nc(vmanip, ncrandom);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Add top and bottom side of water to transforming_liquid queue
|
||||
|
@ -150,7 +150,7 @@ void init_mapnode()
|
||||
continue;
|
||||
ContentFeatures *f = &g_content_features[i];
|
||||
f->setAllTextures("unknown_block.png");
|
||||
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 '"<<password
|
||||
<<"', the correct one is '"<<checkpwd<<"'"<<std::endl;*/
|
||||
|
||||
if(password != checkpwd && m_authmanager.exists(playername))
|
||||
{
|
||||
derr_server<<DTIME<<"Server: peer_id="<<peer_id
|
||||
<<": supplied invalid password for "
|
||||
@ -2181,11 +2187,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||
message += L" joined game";
|
||||
BroadcastChatMessage(message);
|
||||
}
|
||||
|
||||
if(getClient(peer->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 "
|
||||
<<"'"<<oldpwd<<"' to '"<<newpwd<<"'"<<std::endl;
|
||||
|
||||
std::string playername = player->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"<<std::endl;
|
||||
@ -4130,6 +4140,11 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id
|
||||
// Reset inventory to creative if in creative mode
|
||||
if(g_settings.getBool("creative_mode"))
|
||||
{
|
||||
// Warning: double code below
|
||||
// Backup actual inventory
|
||||
player->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"))
|
||||
|
6
src/winresource.rc
Normal file
@ -0,0 +1,6 @@
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <richedit.h>
|
||||
LANGUAGE 0, SUBLANG_NEUTRAL
|
||||
130 ICON "..\\minetest-icon.ico"
|
||||
//131 BITMAP "..\\minetest-icon.bmp"
|