Merge remote-tracking branch 'origin/upstream'

master
Nils Dagsson Moskopp 2011-07-31 20:04:04 +02:00
commit 7ece67727d
30 changed files with 233 additions and 52 deletions

View File

@ -22,3 +22,4 @@ CPackSourceConfig.cmake
Makefile
cmake_install.cmake
src/jthread/libjthread.a
data_temp/*

12
.hgtags
View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

BIN
data/nc_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

BIN
data/nc_front.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

BIN
data/nc_rb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

BIN
data/nc_side.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

BIN
data/scorched_stuff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

BIN
data/tool_steelsword.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

BIN
data/tool_stonesword.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

BIN
data/tool_woodsword.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -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

View File

@ -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}

View File

@ -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);

View File

@ -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));

View File

@ -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

View File

@ -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");

View File

@ -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;

View File

@ -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<<" ";

View File

@ -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)

View File

@ -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

View File

@ -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";
}
/*

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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
View 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"