diff --git a/assets/common/repair_recipe_book.ron b/assets/common/repair_recipe_book.ron index 53baab7b96..640498f2af 100644 --- a/assets/common/repair_recipe_book.ron +++ b/assets/common/repair_recipe_book.ron @@ -186,7 +186,7 @@ recipes: { // ARMOR/HIDE/CARAPACE ItemDefId("common.items.armor.hide.carapace.back"): ( inputs: [ - (Item("common.items.crafting_ing.lhide.carapace"), 1), + (Item("common.items.crafting_ing.hide.carapace"), 1), (Item("common.items.mineral.ore.veloritefrag"), 2), ], ), @@ -832,20 +832,20 @@ recipes: { ItemDefId("common.items.armor.misc.head.crown"): ( inputs: [ (Item("common.items.crafting_ing.cloth.linen_red"), 3), - (item("common.items.mineral.ingot.gold"), 1), + (Item("common.items.mineral.ingot.gold"), 1), (Item("common.items.mineral.ore.veloritefrag"), 3), ], ), ItemDefId("common.items.armor.pirate.hat"): ( inputs: [ - (Item("common.items.crafting_ing.hide.rigid_leather"), 1), + (Item("common.items.crafting_ing.leather.rigid_leather"), 1), (Item("common.items.mineral.ore.veloritefrag"), 3), ], ), ItemDefId("common.items.armor.witch.hat"): ( inputs: [ - (Item("common.items.crafting_ing.hide.rigid_leather"), 1), - (Item("common.items.crafting_ing.animal_misc.grim_eyeball"), 1) + (Item("common.items.crafting_ing.leather.rigid_leather"), 1), + (Item("common.items.crafting_ing.animal_misc.grim_eyeball"), 1), (Item("common.items.mineral.ore.veloritefrag"), 3), ], ), @@ -859,7 +859,7 @@ recipes: { }, fallback: ( inputs: [ - (Item("common.items.utility.coins"), 1000), + (Item("common.items.mineral.ore.veloritefrag"), 25), ], ), ) \ No newline at end of file diff --git a/common/src/lib.rs b/common/src/lib.rs index a2f7dc1c10..215ab90f8b 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -11,7 +11,8 @@ trait_alias, type_alias_impl_trait, extend_one, - arbitrary_self_types + arbitrary_self_types, + int_roundings )] #![feature(hash_drain_filter)] diff --git a/common/src/recipe.rs b/common/src/recipe.rs index 0f6dbe1079..060d257067 100644 --- a/common/src/recipe.rs +++ b/common/src/recipe.rs @@ -14,7 +14,7 @@ use crate::{ }; use hashbrown::HashMap; use serde::{Deserialize, Serialize}; -use std::{borrow::Cow, sync::Arc}; +use std::{borrow::Cow, ops::Mul, sync::Arc}; #[derive(Clone, Debug, Serialize, Deserialize)] pub enum RecipeInput { @@ -973,13 +973,18 @@ impl RepairRecipe { /// are missing. pub fn inventory_contains_ingredients( &self, + item: &Item, inv: &Inventory, ) -> Result, Vec<(&RecipeInput, u32)>> { - inventory_contains_ingredients(self.inputs(), inv, 1) + inventory_contains_ingredients(self.inputs(item), inv, 1) } - pub fn inputs(&self) -> impl ExactSizeIterator { - self.inputs.iter().map(|(input, amount)| (input, *amount)) + pub fn inputs(&self, item: &Item) -> impl ExactSizeIterator { + let item_durability = item.durability().unwrap_or(0); + self.inputs.iter().map(move |(input, amount)| { + let amount = amount.mul(item_durability).div_ceil(Item::MAX_DURABILITY); + (input, amount) + }) } } @@ -1014,8 +1019,7 @@ impl RepairRecipeBook { } { if let Some(repair_recipe) = self.repair_recipe(item) { repair_recipe - .inputs - .iter() + .inputs(item) .enumerate() .for_each(|(i, (input, amount))| { // Gets all slots provided for this input by the frontend @@ -1025,7 +1029,7 @@ impl RepairRecipeBook { .copied(); // Checks if requirement is met, and if not marks it as unsatisfied input.handle_requirement( - *amount, + amount, &mut slot_claims, &mut unsatisfied_requirements, inv, diff --git a/voxygen/src/session/mod.rs b/voxygen/src/session/mod.rs index 8ef2af6e6e..e18a7ec0cb 100644 --- a/voxygen/src/session/mod.rs +++ b/voxygen/src/session/mod.rs @@ -1788,7 +1788,9 @@ impl PlayState for SessionState { }?; let repair_recipe = client.repair_recipe_book().repair_recipe(item)?; - repair_recipe.inventory_contains_ingredients(inventory).ok() + repair_recipe + .inventory_contains_ingredients(item, inventory) + .ok() } else { None } diff --git a/voxygen/src/ui/widgets/item_tooltip.rs b/voxygen/src/ui/widgets/item_tooltip.rs index c45868afa7..e6db678eb8 100644 --- a/voxygen/src/ui/widgets/item_tooltip.rs +++ b/voxygen/src/ui/widgets/item_tooltip.rs @@ -669,22 +669,17 @@ impl<'a> Widget for ItemTooltip<'a> { 6, ); - // Durability - if let Some(durability) = item.durability() { - const MAX_DURABILITY: u32 = 8; - let durability = MAX_DURABILITY - durability.min(MAX_DURABILITY); - widget::Text::new(&format!( - "{} : {}/{}", - i18n.get_msg("common-stats-durability"), - durability, - MAX_DURABILITY - )) - .graphics_for(id) - .parent(id) - .with_style(self.style.desc) - .color(text_color) - .down_from(state.ids.stats[6], V_PAD_STATS) - .set(state.ids.stats[7], ui); + if item.has_durability() { + let durability = Item::MAX_DURABILITY - item.durability().unwrap_or(0); + stat_text( + format!( + "{} : {}/{}", + i18n.get_msg("common-stats-durability"), + durability, + Item::MAX_DURABILITY + ), + 7, + ) } if let Some(equipped_item) = equipped_item {