diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml
index 049b95455b..c8ebb4f284 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml
@@ -1,14 +1,11 @@
-
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
index ec35e29b35..884e5745f3 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
@@ -39,7 +39,6 @@ public sealed partial class CP14WorkbenchRecipeControl : Control
Button.OnPressed += _ => OnSelect?.Invoke(entry, _recipePrototype);
UpdateColor();
- UpdateName();
UpdateView();
}
@@ -51,13 +50,6 @@ public sealed partial class CP14WorkbenchRecipeControl : Control
Button.ModulateSelfOverride = Color.FromHex("#302622");
}
- private void UpdateName()
- {
- var result = _prototype.Index(_recipePrototype.Result);
- var counter = _recipePrototype.ResultCount > 1 ? $" x{_recipePrototype.ResultCount}" : "";
- Name.Text = $"{Loc.GetString(result.Name)} {counter}" ;
- }
-
private void UpdateView()
{
View.SetPrototype(_recipePrototype.Result);
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
index edaffe0a33..5a92b2283a 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
@@ -12,60 +12,62 @@
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
index 5c141a9abb..6f46954778 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
@@ -3,6 +3,7 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
+using System.Linq;
using Content.Client._CP14.Skill;
using Content.Shared._CP14.Workbench;
using Content.Shared._CP14.Workbench.Prototypes;
@@ -28,7 +29,13 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
public event Action? OnCraft;
- private readonly Dictionary _categories = new();
+ ///
+ /// Used for category dropdown filtering.
+ ///
+ private readonly Dictionary _categoryIndexes = new();
+
+ private Dictionary> _categories = new();
+ private List _uncategorized = new();
private CP14WorkbenchUiRecipesState? _cachedState;
private CP14WorkbenchUiRecipesEntry? _selectedEntry;
@@ -50,15 +57,49 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
OptionCategories.OnItemSelected += OnCategoryItemSelected;
}
- public void UpdateRecipesVisibility()
+ private void UpdateRecipesVisibility()
{
if (_cachedState is null)
return;
CraftsContainer.RemoveAllChildren();
- var recipes = new List();
- foreach (var entry in _cachedState.Recipes)
+ if (_uncategorized.Count > 0 && OptionCategories.SelectedId == AllCategoryId)
+ {
+ var uncategorizedGridContainer = new GridContainer();
+ uncategorizedGridContainer.Columns = 5;
+ uncategorizedGridContainer.VerticalExpand = true;
+
+ CraftsContainer.AddChild(uncategorizedGridContainer);
+ AddRecipeListToGrid(_uncategorized, uncategorizedGridContainer);
+ }
+
+ foreach (var category in _categories)
+ {
+ if (_categoryIndexes.TryGetValue(OptionCategories.SelectedId, out var selectedCategory) &&
+ category.Key != selectedCategory)
+ continue;
+
+ var categoryLabel = new RichTextLabel();
+ categoryLabel.Margin = new Thickness(5);
+ categoryLabel.Text = Loc.GetString(category.Key);
+ CraftsContainer.AddChild(categoryLabel);
+
+ var gridContainer = new GridContainer();
+ gridContainer.Columns = 5;
+ gridContainer.VerticalExpand = true;
+ CraftsContainer.AddChild(gridContainer);
+
+ AddRecipeListToGrid(category.Value, gridContainer);
+ }
+
+ if (_selectedEntry is not null && _cachedState.Recipes.Contains(_selectedEntry.Value))
+ RecipeSelectNull();
+ }
+
+ private void AddRecipeListToGrid(List category, GridContainer gridContainer)
+ {
+ foreach (var entry in category)
{
if (!_prototype.TryIndex(entry.ProtoId, out var indexedEntry))
{
@@ -88,21 +129,11 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
continue;
}
- recipes.Add(entry);
- }
-
- recipes.Sort(CP14WorkbenchUiRecipesEntry.CompareTo);
-
- foreach (var recipe in recipes)
- {
- var control = new CP14WorkbenchRecipeControl(recipe);
+ var control = new CP14WorkbenchRecipeControl(entry);
control.OnSelect += RecipeSelect;
- CraftsContainer.AddChild(control);
+ gridContainer.AddChild(control);
}
-
- if (_selectedEntry is not null && !recipes.Contains(_selectedEntry.Value))
- RecipeSelectNull();
}
public void UpdateState(CP14WorkbenchUiRecipesState recipesState)
@@ -112,37 +143,37 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
_cachedState = recipesState;
+ _categoryIndexes.Clear();
_categories.Clear();
+ _uncategorized.Clear();
OptionCategories.Clear();
OptionCategories.AddItem(Loc.GetString("cp14-recipe-category-all"), AllCategoryId);
- var categories = new List();
- var count = 0;
-
- foreach (var entry in recipesState.Recipes)
+ foreach (var entry in recipesState.Recipes.OrderByDescending(e => e.Craftable))
{
if (!_prototype.TryIndex(entry.ProtoId, out var indexedEntry))
continue;
- // Populate categories
- if (indexedEntry.Category is null)
- continue;
-
if (!_prototype.TryIndex(indexedEntry.Category, out var indexedCategory))
+ {
+ _uncategorized.Add(entry);
continue;
+ }
- if (categories.Contains(indexedCategory.Name))
- continue;
+ if (!_categories.TryGetValue(indexedCategory.Name, out var entries))
+ {
+ entries = new List();
+ _categories[indexedCategory.Name] = entries;
+ }
- categories.Add(indexedCategory.Name);
+ entries.Add(entry);
}
- categories.Sort((a, b) => string.Compare(Loc.GetString(a), Loc.GetString(b), StringComparison.Ordinal));
-
- foreach (var category in categories)
+ var count = 0;
+ foreach (var category in _categories)
{
- OptionCategories.AddItem(Loc.GetString(category), count);
- _categories.Add(count, category);
+ OptionCategories.AddItem(Loc.GetString(category.Key), count);
+ _categoryIndexes.Add(count, category.Key);
count++;
}
@@ -188,7 +219,7 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
if (OptionCategories.SelectedId == AllCategoryId)
return true;
- if (!_categories.TryGetValue(OptionCategories.SelectedId, out var selectedCategory))
+ if (!_categoryIndexes.TryGetValue(OptionCategories.SelectedId, out var selectedCategory))
{
Sawmill.Error($"Non-existent {OptionCategories.SelectedId} category id selected. Filter skipped");
return true;
diff --git a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
index fdf10ed530..611f245d6d 100644
--- a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
+++ b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
@@ -92,11 +92,16 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
return;
}
- var resultEntities = new HashSet();
- for (int i = 0; i < recipe.ResultCount; i++)
+ //Check conditions
+ var passConditions = true;
+ foreach (var condition in recipe.Conditions)
{
- var resultEntity = Spawn(recipe.Result);
- resultEntities.Add(resultEntity);
+ if (!condition.CheckCondition(EntityManager, _proto, ent, args.User))
+ {
+ condition.FailedEffect(EntityManager, _proto, ent, args.User);
+ passConditions = false;
+ }
+ condition.PostCraft(EntityManager, _proto, ent, args.User);
}
foreach (var req in recipe.Requirements)
@@ -104,10 +109,20 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
req.PostCraft(EntityManager, _proto, placedEntities);
}
- //We teleport result to workbench AFTER craft.
- foreach (var resultEntity in resultEntities)
+ if (passConditions)
{
- _transform.SetCoordinates(resultEntity, Transform(ent).Coordinates.Offset(new Vector2(_random.NextFloat(-0.25f, 0.25f), _random.NextFloat(-0.25f, 0.25f))));
+ var resultEntities = new HashSet();
+ for (var i = 0; i < recipe.ResultCount; i++)
+ {
+ var resultEntity = Spawn(recipe.Result);
+ resultEntities.Add(resultEntity);
+ }
+
+ //We teleport result to workbench AFTER craft.
+ foreach (var resultEntity in resultEntities)
+ {
+ _transform.SetCoordinates(resultEntity, Transform(ent).Coordinates.Offset(new Vector2(_random.NextFloat(-0.25f, 0.25f), _random.NextFloat(-0.25f, 0.25f))));
+ }
}
UpdateUIRecipes(ent);
diff --git a/Content.Shared/_CP14/Workbench/Conditions/MagicInWorkbench.cs b/Content.Shared/_CP14/Workbench/Conditions/MagicInWorkbench.cs
new file mode 100644
index 0000000000..11fb78b883
--- /dev/null
+++ b/Content.Shared/_CP14/Workbench/Conditions/MagicInWorkbench.cs
@@ -0,0 +1,61 @@
+using Content.Shared._CP14.MagicEnergy;
+using Content.Shared._CP14.MagicEnergy.Components;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Workbench.Conditions;
+
+public sealed partial class MagicInWorkbench : CP14WorkbenchCraftCondition
+{
+ [DataField]
+ public FixedPoint2 Energy = 10;
+
+ public override bool CheckCondition(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+ if (!entManager.TryGetComponent(workbench, out var energyContainer))
+ return false;
+
+ return energyContainer.Energy >= Energy;
+ }
+
+ public override void PostCraft(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+ var magicSys = entManager.System();
+
+ magicSys.ChangeEnergy(workbench, -Energy, out _, out _);
+ }
+
+ public override void FailedEffect(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+ var magicSys = entManager.System();
+ magicSys.ChangeEnergy(workbench, -Energy, out _, out _);
+
+ if (entManager.TryGetComponent(workbench, out var xform))
+ entManager.SpawnAtPosition("CP14SkyLightning", xform.Coordinates);
+ }
+
+ public override string GetConditionTitle(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+ if (!entManager.TryGetComponent(workbench, out var energyContainer))
+ return string.Empty;
+ var manaProcent = Energy / energyContainer.MaxEnergy * 100;
+
+ return Loc.GetString("cp14-workbench-condition-mana-in-w", ("count", manaProcent));
+ }
+}
diff --git a/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs b/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
index b22efb28a2..a964920c78 100644
--- a/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
+++ b/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
@@ -17,7 +17,7 @@ public sealed class CP14WorkbenchRecipePrototype : IPrototype
public string ID { get; private set; } = default!;
[DataField(required: true)]
- public ProtoId Tag = default!;
+ public ProtoId Tag;
[DataField]
public TimeSpan CraftTime = TimeSpan.FromSeconds(1f);
@@ -25,9 +25,23 @@ public sealed class CP14WorkbenchRecipePrototype : IPrototype
[DataField]
public SoundSpecifier? OverrideCraftSound;
+ ///
+ /// Mandatory conditions, without which the craft button will not even be active
+ ///
[DataField(required: true)]
public List Requirements = new();
+ ///
+ /// Mandatory conditions for completion, but not blocking the craft button.
+ /// Players must monitor compliance themselves.
+ /// If the conditions are not met, negative effects occur.
+ ///
+ [DataField]
+ public List Conditions = new();
+
+ ///
+ /// What skills do you need to know to see this recipe in the interface?
+ ///
[DataField]
public HashSet> RequiredSkills = new();
diff --git a/Content.Shared/_CP14/Workbench/WorkbenchCraftCondition.cs b/Content.Shared/_CP14/Workbench/WorkbenchCraftCondition.cs
new file mode 100644
index 0000000000..37fbfdd1c9
--- /dev/null
+++ b/Content.Shared/_CP14/Workbench/WorkbenchCraftCondition.cs
@@ -0,0 +1,51 @@
+using JetBrains.Annotations;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._CP14.Workbench;
+
+[ImplicitDataDefinitionForInheritors]
+[MeansImplicitUse]
+public abstract partial class CP14WorkbenchCraftCondition
+{
+ public abstract bool CheckCondition(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user);
+
+ public virtual void PostCraft(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+
+ }
+
+ public abstract void FailedEffect(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user);
+
+ ///
+ /// This text will be displayed in the description of the craft conditions. Write something like ‘The workbench must be filled to 100% mana.’ here
+ ///
+ public virtual string GetConditionTitle(
+ EntityManager entManager,
+ IPrototypeManager protoManager,
+ EntityUid workbench,
+ EntityUid user)
+ {
+ return string.Empty;
+ }
+
+ ///
+ /// You can specify the texture directly. Return null to disable.
+ ///
+ public virtual SpriteSpecifier? GetConditionTexture(IPrototypeManager protoManager)
+ {
+ return null;
+ }
+}
diff --git a/Resources/Locale/en-US/_CP14/workbench/categories.ftl b/Resources/Locale/en-US/_CP14/workbench/categories.ftl
index eea1eb7c02..37c65c5f29 100644
--- a/Resources/Locale/en-US/_CP14/workbench/categories.ftl
+++ b/Resources/Locale/en-US/_CP14/workbench/categories.ftl
@@ -1,6 +1,10 @@
cp14-recipe-category-all = All
+cp14-recipe-category-materials = Materials
cp14-recipe-category-tile = Floor
cp14-recipe-category-tool = Tools
cp14-recipe-category-weapon = Weapon
-cp14-recipe-category-armor = Armor
\ No newline at end of file
+cp14-recipe-category-armor = Armor
+cp14-recipe-category-carpet = Carpets
+cp14-recipe-category-wallpaper = Wallpapers
+cp14-recipe-category-clothing = Clothing
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_CP14/workbench/conditions.ftl b/Resources/Locale/en-US/_CP14/workbench/conditions.ftl
new file mode 100644
index 0000000000..1562705286
--- /dev/null
+++ b/Resources/Locale/en-US/_CP14/workbench/conditions.ftl
@@ -0,0 +1 @@
+cp14-workbench-condition-mana-in-w = The station must be full of mana at {$count}%.
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/workbench/categories.ftl b/Resources/Locale/ru-RU/_CP14/workbench/categories.ftl
index a4ec31bb24..ee9121617a 100644
--- a/Resources/Locale/ru-RU/_CP14/workbench/categories.ftl
+++ b/Resources/Locale/ru-RU/_CP14/workbench/categories.ftl
@@ -1,6 +1,10 @@
cp14-recipe-category-all = Все
+cp14-recipe-category-materials = Материалы
cp14-recipe-category-tile = Пол
cp14-recipe-category-tool = Инструменты
cp14-recipe-category-weapon = Оружие
-cp14-recipe-category-armor = Броня
\ No newline at end of file
+cp14-recipe-category-armor = Броня
+cp14-recipe-category-carpet = Ковры
+cp14-recipe-category-wallpaper = Обои
+cp14-recipe-category-clothing = Одежда
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/workbench/conditions.ftl b/Resources/Locale/ru-RU/_CP14/workbench/conditions.ftl
new file mode 100644
index 0000000000..c2bde8135f
--- /dev/null
+++ b/Resources/Locale/ru-RU/_CP14/workbench/conditions.ftl
@@ -0,0 +1 @@
+cp14-workbench-condition-mana-in-w = Станция должна быть полна маной на {$count}%
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/categories.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/categories.yml
index 0472242376..01926d3c53 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/categories.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/categories.yml
@@ -6,6 +6,10 @@
id: Tools
name: cp14-recipe-category-tool
+- type: CP14RecipeCategory
+ id: Materials
+ name: cp14-recipe-category-materials
+
- type: CP14RecipeCategory
id: Weapon
name: cp14-recipe-category-weapon
@@ -14,3 +18,14 @@
id: Armor
name: cp14-recipe-category-armor
+- type: CP14RecipeCategory
+ id: Carpet
+ name: cp14-recipe-category-carpet
+
+- type: CP14RecipeCategory
+ id: Wallpaper
+ name: cp14-recipe-category-wallpaper
+
+- type: CP14RecipeCategory
+ id: Clothing
+ name: cp14-recipe-category-clothing
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
index f75a969415..22795b4000 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
@@ -2,6 +2,7 @@
id: CP14CopperBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ category: Materials
requiredSkills:
- CopperMelting
requirements:
@@ -14,6 +15,7 @@
id: CP14IronBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ category: Materials
requiredSkills:
- IronMelting
requirements:
@@ -26,6 +28,7 @@
id: CP14GoldBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ category: Materials
requiredSkills:
- GoldMelting
requirements:
@@ -38,6 +41,7 @@
id: CP14MithrilBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ category: Materials
requiredSkills:
- MithrilMelting
requirements:
@@ -50,6 +54,7 @@
id: CP14GlassSheet1
tag: CP14RecipeMeltingFurnace
craftTime: 2
+ category: Materials
requiredSkills:
- GlassMelting
requirements:
@@ -62,6 +67,7 @@
id: CP14GlassSheetShard1
tag: CP14RecipeMeltingFurnace
craftTime: 2
+ category: Materials
requiredSkills:
- GlassMelting
requirements:
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/sewing_table.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/sewing_table.yml
index e658f73085..105e9a69c8 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/sewing_table.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/sewing_table.yml
@@ -2,6 +2,7 @@
id: CP14ClothMaterialCotton
tag: CP14RecipeSewing
craftTime: 2
+ category: Materials
requirements:
- !type:ProtoIdResource
protoId: CP14Cotton
@@ -22,6 +23,7 @@
id: CP14ClothMaterialString
tag: CP14RecipeSewing
craftTime: 1
+ category: Materials
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -32,6 +34,7 @@
id: CP14StringFromWeb
tag: CP14RecipeSewing
craftTime: 1
+ category: Materials
requirements:
- !type:ProtoIdResource
protoId: CP14Web
@@ -42,6 +45,7 @@
id: CP14StringCottonCloth
tag: CP14RecipeSewing
craftTime: 1
+ category: Materials
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -53,6 +57,7 @@
id: CP14ClothingShirtCottonBlue
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -67,6 +72,7 @@
id: CP14ClothingShirtCottonBlack
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -81,6 +87,7 @@
id: CP14ClothingShirtCottonPurple
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -95,6 +102,7 @@
id: CP14ClothingShirtCottonRed
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -109,6 +117,7 @@
id: CP14ClothingShirtCottonWhite
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -121,6 +130,7 @@
id: CP14ClothingShirtCottonYellow
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -135,6 +145,7 @@
id: CP14ClothingShirtBlackDress
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -149,6 +160,7 @@
id: CP14ClothingPantsTrouserWhite
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -161,6 +173,7 @@
id: CP14ClothingPantsTrouserDarkBlue
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -175,6 +188,7 @@
id: CP14ClothingHeadHuntersHat
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -189,6 +203,7 @@
id: CP14ClothingShirtMercenary
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -205,6 +220,7 @@
id: CP14ClothingYellowWizardDress
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -223,6 +239,7 @@
id: CP14ClothingHeadBeretMercenary
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -239,6 +256,7 @@
id: CP14ClothingPantsMercenaryTrousers
tag: CP14RecipeSewing
craftTime: 2
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14String
@@ -255,6 +273,7 @@
id: CP14ClothingOuterClothingFish
tag: CP14RecipeSewing
craftTime: 4
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14FoodMeatFlemTorso
@@ -269,6 +288,7 @@
id: CP14ClothingHeadFishMask
tag: CP14RecipeSewing
craftTime: 5
+ category: Clothing
requirements:
- !type:ProtoIdResource
protoId: CP14FoodMeatFlemHead
@@ -311,6 +331,7 @@
id: CP14WallpaperBlack
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -323,6 +344,7 @@
id: CP14WallpaperGreen
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -335,6 +357,7 @@
id: CP14WallpaperPurple
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -347,6 +370,7 @@
id: CP14WallpaperRed
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -359,6 +383,7 @@
id: CP14WallpaperWhite
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -369,6 +394,7 @@
id: CP14WallpaperWhite2
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -379,6 +405,7 @@
id: CP14WallpaperYellow
tag: CP14RecipeSewing
craftTime: 2
+ category: Wallpaper
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -550,6 +577,7 @@
id: CP14FloorCarpetItemBlue10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -564,6 +592,7 @@
id: CP14FloorCarpetItemRed10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -578,6 +607,7 @@
id: CP14FloorCarpetItemCyan10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -594,6 +624,7 @@
id: CP14FloorCarpetItemGreen10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -608,6 +639,7 @@
id: CP14FloorCarpetItemOrange10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -624,6 +656,7 @@
id: CP14FloorCarpetItemPurple10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -638,6 +671,7 @@
id: CP14FloorCarpetItemBlack10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth
@@ -652,6 +686,7 @@
id: CP14FloorCarpetItemYellow10
tag: CP14RecipeSewing
craftTime: 2
+ category: Carpet
requirements:
- !type:StackResource
stack: CP14Cloth