add levels to tools, randomise mineral drop quantity with max based on tool level

This commit is contained in:
darkrose 2015-07-29 06:02:10 +10:00
parent 4ccbb18a73
commit 3acc33215c
4 changed files with 61 additions and 15 deletions

View File

@ -124,6 +124,7 @@ void content_toolitem_init()
f->type = TT_PICK;
f->hardness = 30.;
f->dig_time = 1.5;
f->level = 1;
crafting::setPickRecipe(CONTENT_WOOD,CONTENT_TOOLITEM_WPICK);
crafting::setPickRecipe(CONTENT_JUNGLEWOOD,CONTENT_TOOLITEM_WPICK);
lists::add("craftguide",i);
@ -138,6 +139,7 @@ void content_toolitem_init()
f->type = TT_PICK;
f->hardness = 100.;
f->dig_time = 0.75;
f->level = 2;
crafting::setPickRecipe(CONTENT_ROUGHSTONE,CONTENT_TOOLITEM_STPICK);
lists::add("craftguide",i);
lists::add("creative",i);
@ -151,6 +153,7 @@ void content_toolitem_init()
f->type = TT_PICK;
f->hardness = 180.;
f->dig_time = 1.2;
f->level = 2;
crafting::setPickRecipe(CONTENT_CRAFTITEM_FLINT,CONTENT_TOOLITEM_FLINTPICK);
lists::add("craftguide",i);
lists::add("creative",i);
@ -164,6 +167,7 @@ void content_toolitem_init()
f->type = TT_PICK;
f->hardness = 333.;
f->dig_time = 0.5;
f->level = 3;
crafting::setPickRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELPICK);
lists::add("craftguide",i);
lists::add("creative",i);
@ -177,6 +181,7 @@ void content_toolitem_init()
f->type = TT_PICK;
f->hardness = 1337.;
f->dig_time = 0.;
f->level = 4;
f->has_punch_effect = false;
crafting::setPickRecipe(CONTENT_MESE,CONTENT_TOOLITEM_MESEPICK);
lists::add("craftguide",i);
@ -219,6 +224,7 @@ void content_toolitem_init()
f->type = TT_SHOVEL;
f->hardness = 250.;
f->dig_time = 0.17;
f->level = 2;
crafting::setShovelRecipe(CONTENT_CRAFTITEM_FLINT,CONTENT_TOOLITEM_FLINTSHOVEL);
lists::add("craftguide",i);
lists::add("creative",i);
@ -232,6 +238,7 @@ void content_toolitem_init()
f->type = TT_SHOVEL;
f->hardness = 400.;
f->dig_time = 0.15;
f->level = 3;
crafting::setShovelRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELSHOVEL);
lists::add("craftguide",i);
lists::add("creative",i);
@ -272,6 +279,7 @@ void content_toolitem_init()
f->type = TT_AXE;
f->hardness = 180.;
f->dig_time = 0.65;
f->level = 2;
crafting::setAxeRecipe(CONTENT_CRAFTITEM_FLINT,CONTENT_TOOLITEM_FLINTAXE);
lists::add("craftguide",i);
lists::add("creative",i);
@ -285,6 +293,7 @@ void content_toolitem_init()
f->type = TT_AXE;
f->hardness = 333.;
f->dig_time = 0.5;
f->level = 3;
crafting::setAxeRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELAXE);
lists::add("craftguide",i);
lists::add("creative",i);
@ -325,6 +334,7 @@ void content_toolitem_init()
f->type = TT_SWORD;
f->hardness = 380.;
f->dig_time = 0.5;
f->level = 3;
crafting::setSwordRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELSWORD);
lists::add("craftguide",i);
lists::add("creative",i);
@ -351,6 +361,7 @@ void content_toolitem_init()
f->type = TT_SHEAR;
f->hardness = 333.;
f->dig_time = 0.5;
f->level = 2;
crafting::setShearsRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELSHEARS);
lists::add("craftguide",i);
lists::add("creative",i);
@ -381,6 +392,7 @@ void content_toolitem_init()
f->type = TT_BUCKET;
f->hardness = 50.;
f->dig_time = 0.0;
f->level = 2;
f->damaging_nodes_diggable = false;
crafting::setURecipe(CONTENT_CRAFTITEM_TIN_INGOT,CONTENT_TOOLITEM_TINBUCKET);
lists::add("craftguide",i);
@ -418,6 +430,7 @@ void content_toolitem_init()
f->type = TT_BUCKET;
f->hardness = 80.;
f->dig_time = 0.0;
f->level = 3;
crafting::setURecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELBUCKET);
lists::add("craftguide",i);
lists::add("creative",i);
@ -503,6 +516,7 @@ void content_toolitem_init()
f->type = TT_SPEAR;
f->hardness = 200.;
f->dig_time = 1.0;
f->level = 2;
crafting::setSpearRecipe(CONTENT_CRAFTITEM_FLINT,CONTENT_TOOLITEM_FLINTSPEAR);
lists::add("craftguide",i);
lists::add("creative",i);
@ -516,6 +530,7 @@ void content_toolitem_init()
f->type = TT_SPEAR;
f->hardness = 300.;
f->dig_time = 0.5;
f->level = 3;
crafting::setSpearRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_TOOLITEM_STEELSPEAR);
lists::add("craftguide",i);
lists::add("creative",i);

View File

@ -32,6 +32,35 @@ MineralFeatures & mineral_features(u8 i)
return g_mineral_features[i];
}
CraftItem *getDiggedMineralItem(u8 mineral, Player *player, InventoryItem *tool)
{
MineralFeatures m = mineral_features(mineral);
if (m.dug_item == CONTENT_IGNORE)
return NULL;
if (content_craftitem_features(m.dug_item).content == CONTENT_IGNORE)
return NULL;
if (!tool && m.min_level > 0)
return NULL;
ToolItemFeatures *t = &content_toolitem_features(tool->getContent());
if (t->content == CONTENT_IGNORE && m.min_level > 0)
return NULL;
if (t->level < m.min_level)
return NULL;
u16 count = m.dug_count_min;
if (m.dug_count_min != m.dug_count_max && t->level > count) {
count = myrand_range(m.dug_count_min,t->level);
if (count > m.dug_count_max)
count = m.dug_count_max;
}
return new CraftItem(m.dug_item, count, 0);
}
void init_mineral()
{
u8 i;
@ -41,38 +70,41 @@ void init_mineral()
f = &mineral_features(i);
f->texture = "mineral_coal.png";
f->dug_item = CONTENT_CRAFTITEM_COAL;
f->dug_count = 2;
i = MINERAL_IRON;
f = &mineral_features(i);
f->texture = "mineral_iron.png";
f->dug_item = CONTENT_CRAFTITEM_IRON;
f->dug_count = 2;
f->min_level = 2;
i = MINERAL_TIN;
f = &mineral_features(i);
f->texture = "mineral_tin.png";
f->dug_item = CONTENT_CRAFTITEM_TIN;
f->dug_count = 2;
f->min_level = 2;
i = MINERAL_COPPER;
f = &mineral_features(i);
f->texture = "mineral_copper.png";
f->dug_item = CONTENT_CRAFTITEM_COPPER;
f->dug_count = 2;
f->dug_count_max = 4;
f->min_level = 2;
i = MINERAL_SILVER;
f = &mineral_features(i);
f->texture = "mineral_silver.png";
f->dug_item = CONTENT_CRAFTITEM_SILVER;
f->min_level = 3;
i = MINERAL_GOLD;
f = &mineral_features(i);
f->texture = "mineral_gold.png";
f->dug_item = CONTENT_CRAFTITEM_GOLD;
f->min_level = 3;
i = MINERAL_QUARTZ;
f = &mineral_features(i);
f->texture = "mineral_quartz.png";
f->dug_item = CONTENT_CRAFTITEM_QUARTZ;
f->min_level = 3;
}

View File

@ -27,6 +27,7 @@
#define MINERAL_HEADER
#include "inventory.h"
#include "player.h"
#define MINERAL_NONE 0
#define MINERAL_COAL 1
@ -42,12 +43,17 @@ struct MineralFeatures {
// the dug item
content_t dug_item;
// the number of dug_items received when dug
s16 dug_count;
s16 dug_count_min;
s16 dug_count_max;
// tools below this level give no mineral
u8 min_level;
MineralFeatures():
texture(""),
dug_item(CONTENT_IGNORE),
dug_count(1)
dug_count_min(1),
dug_count_max(5),
min_level(1)
{}
};
@ -64,14 +70,7 @@ MineralFeatures & mineral_features(u8 i);
#define MINERAL_MAX 255
inline CraftItem * getDiggedMineralItem(u8 mineral)
{
MineralFeatures m = mineral_features(mineral);
if (m.dug_item == CONTENT_IGNORE)
return NULL;
return new CraftItem(content_craftitem_features(m.dug_item).name,m.dug_count, 0);
}
CraftItem *getDiggedMineralItem(u8 mineral, Player *player, InventoryItem *tool);
#endif

View File

@ -3495,7 +3495,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
item = NULL;
if (mineral != MINERAL_NONE)
item = getDiggedMineralItem(mineral);
item = getDiggedMineralItem(mineral,player,wielditem);
// If not mineral
if (item == NULL) {