forked from Mirrorlandia_minetest/minetest
New way of determining the outcome of digging
This commit is contained in:
parent
5573142a2b
commit
00810408a8
@ -140,6 +140,7 @@ void init_mapnode()
|
|||||||
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png");
|
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_GRASS;
|
i = CONTENT_GRASS;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -148,6 +149,7 @@ void init_mapnode()
|
|||||||
f->setTexture(1, "mud.png");
|
f->setTexture(1, "mud.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(CONTENT_MUD)+" 1";
|
||||||
|
|
||||||
i = CONTENT_GRASS_FOOTSTEPS;
|
i = CONTENT_GRASS_FOOTSTEPS;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -156,18 +158,21 @@ void init_mapnode()
|
|||||||
f->setTexture(1, "mud.png");
|
f->setTexture(1, "mud.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(CONTENT_MUD)+" 1";
|
||||||
|
|
||||||
i = CONTENT_MUD;
|
i = CONTENT_MUD;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("mud.png");
|
f->setAllTextures("mud.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_SAND;
|
i = CONTENT_SAND;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("sand.png");
|
f->setAllTextures("sand.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_TREE;
|
i = CONTENT_TREE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -176,6 +181,7 @@ void init_mapnode()
|
|||||||
f->setTexture(1, "tree_top.png");
|
f->setTexture(1, "tree_top.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_LEAVES;
|
i = CONTENT_LEAVES;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -186,11 +192,13 @@ void init_mapnode()
|
|||||||
if(new_style_leaves)
|
if(new_style_leaves)
|
||||||
{
|
{
|
||||||
f->solidness = 0; // drawn separately, makes no faces
|
f->solidness = 0; // drawn separately, makes no faces
|
||||||
|
f->setInventoryTextureCube("leaves.png", "leaves.png", "leaves.png");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
f->setAllTextures("[noalpha:leaves.png");
|
f->setAllTextures("[noalpha:leaves.png");
|
||||||
}
|
}
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_COALSTONE;
|
i = CONTENT_COALSTONE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -202,16 +210,19 @@ void init_mapnode()
|
|||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("wood.png");
|
f->setAllTextures("wood.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_MESE;
|
i = CONTENT_MESE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("mese.png");
|
f->setAllTextures("mese.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_CLOUD;
|
i = CONTENT_CLOUD;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("cloud.png");
|
f->setAllTextures("cloud.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_AIR;
|
i = CONTENT_AIR;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -263,6 +274,7 @@ void init_mapnode()
|
|||||||
f->diggable = false;
|
f->diggable = false;
|
||||||
f->buildable_to = true;
|
f->buildable_to = true;
|
||||||
f->liquid_type = LIQUID_SOURCE;
|
f->liquid_type = LIQUID_SOURCE;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
i = CONTENT_TORCH;
|
i = CONTENT_TORCH;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
@ -272,6 +284,7 @@ void init_mapnode()
|
|||||||
f->solidness = 0; // drawn separately, makes no faces
|
f->solidness = 0; // drawn separately, makes no faces
|
||||||
f->walkable = false;
|
f->walkable = false;
|
||||||
f->wall_mounted = true;
|
f->wall_mounted = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,13 @@ struct ContentFeatures
|
|||||||
bool diggable;
|
bool diggable;
|
||||||
bool buildable_to;
|
bool buildable_to;
|
||||||
enum LiquidType liquid_type;
|
enum LiquidType liquid_type;
|
||||||
bool wall_mounted; // If true, param2 is set to direction when placed
|
// If true, param2 is set to direction when placed
|
||||||
|
// NOTE: the direction format is quite inefficient and should be changed
|
||||||
|
bool wall_mounted;
|
||||||
|
|
||||||
|
// Inventory item string as which the node appears in inventory when dug.
|
||||||
|
// Mineral overrides this.
|
||||||
|
std::string dug_item;
|
||||||
|
|
||||||
//TODO: Move more properties here
|
//TODO: Move more properties here
|
||||||
|
|
||||||
@ -173,6 +179,7 @@ struct ContentFeatures
|
|||||||
buildable_to = false;
|
buildable_to = false;
|
||||||
liquid_type = LIQUID_NONE;
|
liquid_type = LIQUID_NONE;
|
||||||
wall_mounted = false;
|
wall_mounted = false;
|
||||||
|
dug_item = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
~ContentFeatures();
|
~ContentFeatures();
|
||||||
|
@ -1854,6 +1854,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
0: start digging
|
0: start digging
|
||||||
1: place block
|
1: place block
|
||||||
2: stop digging (all parameters ignored)
|
2: stop digging (all parameters ignored)
|
||||||
|
3: digging completed
|
||||||
*/
|
*/
|
||||||
u8 action = readU8(&data[2]);
|
u8 action = readU8(&data[2]);
|
||||||
v3s16 p_under;
|
v3s16 p_under;
|
||||||
@ -1996,7 +1997,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Add digged item to inventory
|
Add dug item to inventory
|
||||||
*/
|
*/
|
||||||
|
|
||||||
InventoryItem *item = NULL;
|
InventoryItem *item = NULL;
|
||||||
@ -2004,15 +2005,25 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
if(mineral != MINERAL_NONE)
|
if(mineral != MINERAL_NONE)
|
||||||
item = getDiggedMineralItem(mineral);
|
item = getDiggedMineralItem(mineral);
|
||||||
|
|
||||||
|
// If not mineral
|
||||||
if(item == NULL)
|
if(item == NULL)
|
||||||
item = new MaterialItem(material, 1);
|
{
|
||||||
|
std::string &dug_s = content_features(material).dug_item;
|
||||||
|
if(dug_s != "")
|
||||||
|
{
|
||||||
|
std::istringstream is(dug_s, std::ios::binary);
|
||||||
|
item = InventoryItem::deSerialize(is);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player->inventory.addItem("main", item);
|
if(item != NULL)
|
||||||
|
{
|
||||||
|
// Add a item to inventory
|
||||||
|
player->inventory.addItem("main", item);
|
||||||
|
|
||||||
/*
|
// Send inventory
|
||||||
Send inventory
|
SendInventory(player->peer_id);
|
||||||
*/
|
}
|
||||||
SendInventory(player->peer_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user