From 14b0fc5b4ad337dc699524f295d932085b782196 Mon Sep 17 00:00:00 2001
From: Red <96445749+TheShuEd@users.noreply.github.com>
Date: Sat, 5 Jul 2025 20:44:38 +0300
Subject: [PATCH] Workbench and crystals (#1502)
* solutionResource
* fuck research system + QoL workbench update
* colorful quartz returns
* Refactor workbench skill requirements handling
Replaces the SkillRequired requirement with a direct RequiredSkills field on CP14WorkbenchRecipePrototype. Updates client and server logic to check skills directly, simplifying recipe skill checks and related UI logic.
* Initial commit
Add initial project files and setup.
---
.../CP14ResearchRecipeControl.xaml | 14 -
.../CP14ResearchRecipeControl.xaml.cs | 60 ----
.../CP14ResearchTableBoundUserInterface.cs | 34 ---
.../CP14ResearchTableWindow.xaml | 72 -----
.../CP14ResearchTableWindow.xaml.cs | 235 ---------------
.../CP14WorkbenchRequirementControl.cs | 2 +
.../Workbench/CP14WorkbenchWindow.xaml.cs | 26 ++
.../_CP14/ResearchTable/CP14ResearchSystem.cs | 199 -------------
.../Trading/CP14TradingPlatformSystem.cs | 2 +-
.../_CP14/Workbench/CP14WorkbenchSystem.UI.cs | 20 +-
.../_CP14/Workbench/CP14WorkbenchSystem.cs | 39 ++-
.../CP14ResearchTableComponent.cs | 17 --
.../ResearchTable/CP14SharedResearchSystem.cs | 19 --
.../_CP14/Skill/CP14ResearchTableUI.cs | 61 ----
.../Components/CP14SkillStorageComponent.cs | 3 +-
.../_CP14/Skill/Effects/UnlockRecipes.cs | 16 +-
.../CP14SharedTradingPlatformSystem.cs | 2 +-
.../_CP14/Workbench/CP14WorkbenchUI.cs | 32 +-
.../CP14WorkbenchRecipePrototype.cs | 4 +
.../Requirements/MaterialResource.cs | 12 +-
.../Workbench/Requirements/ProtoIdResource.cs | 12 +-
.../Workbench/Requirements/SkillRequired.cs | 63 ----
.../Requirements/SolutionResource.cs | 116 ++++++++
.../Requirements/StackGroupResource.cs | 20 +-
.../Workbench/Requirements/StackResource.cs | 14 +-
.../Workbench/Requirements/TagResource.cs | 19 +-
.../Workbench/WorkbenchCraftRequirement.cs | 47 ++-
.../en-US/_CP14/workbench/workbench.ftl | 4 +-
.../ru-RU/_CP14/workbench/workbench.ftl | 4 +-
.../_CP14/Entities/Effects/visual_effect.yml | 8 +
.../_CP14/Entities/Objects/Materials/misc.yml | 34 ---
.../Entities/Objects/Materials/quartz.yml | 148 +++++++++
.../Structures/Flora/Crystal/elemental.yml | 189 ++++++++++++
.../Structures/Furniture/research_table.yml | 58 ----
.../Structures/Furniture/workbenchs.yml | 26 +-
.../Demiplane/Modifiers/Reward/crystals.yml | 117 +++++++-
.../_CP14/Recipes/Workbench/Anvil/misc.yml | 179 +++++------
.../Workbench/Anvil/modular_aventail.yml | 40 +--
.../Recipes/Workbench/Anvil/modular_blade.yml | 280 +++++++-----------
.../Workbench/Anvil/modular_breastplate.yml | 60 ++--
.../Workbench/Anvil/modular_cuisses.yml | 40 +--
.../Recipes/Workbench/Anvil/modular_garde.yml | 40 +--
.../Workbench/Anvil/modular_greave.yml | 40 +--
.../Workbench/Anvil/modular_helmet.yml | 40 +--
.../Recipes/Workbench/Anvil/modular_tip.yml | 20 +-
.../Recipes/Workbench/Anvil/modular_visor.yml | 40 +--
.../_CP14/Recipes/Workbench/furnace.yml | 75 ++---
47 files changed, 1074 insertions(+), 1528 deletions(-)
delete mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
delete mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
delete mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
delete mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
delete mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
delete mode 100644 Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
delete mode 100644 Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
delete mode 100644 Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
delete mode 100644 Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
delete mode 100644 Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
create mode 100644 Content.Shared/_CP14/Workbench/Requirements/SolutionResource.cs
create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Materials/quartz.yml
delete mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
deleted file mode 100644
index de13384bfd..0000000000
--- a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
deleted file mode 100644
index 99b9de4a7d..0000000000
--- a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using Content.Shared._CP14.Skill;
-using Content.Shared._CP14.Skill.Prototypes;
-using Robust.Client.AutoGenerated;
-using Robust.Client.GameObjects;
-using Robust.Client.UserInterface;
-using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Prototypes;
-
-namespace Content.Client._CP14.ResearchTable;
-
-[GenerateTypedNameReferences]
-public sealed partial class CP14ResearchRecipeControl : Control
-{
- [Dependency] private readonly IEntityManager _entity = default!;
- [Dependency] private readonly IPrototypeManager _prototype = default!;
-
- public event Action? OnResearch;
-
- private readonly SpriteSystem _sprite;
- private readonly CP14SharedSkillSystem _skillSystem;
-
- private readonly CP14SkillPrototype _skillPrototype;
- private readonly bool _craftable;
-
- public CP14ResearchRecipeControl(CP14ResearchUiEntry entry)
- {
- RobustXamlLoader.Load(this);
- IoCManager.InjectDependencies(this);
-
- _sprite = _entity.System();
- _skillSystem = _entity.System();
-
- _skillPrototype = _prototype.Index(entry.ProtoId);
- _craftable = entry.Craftable;
-
- Button.OnPressed += _ => OnResearch?.Invoke(entry, _skillPrototype);
-
- UpdateColor();
- UpdateName();
- UpdateView();
- }
-
- private void UpdateColor()
- {
- if (_craftable)
- return;
-
- Button.ModulateSelfOverride = Color.FromHex("#302622");
- }
-
- private void UpdateName()
- {
- Name.Text = $"{Loc.GetString(_skillSystem.GetSkillName(_skillPrototype))}" ;
- }
-
- private void UpdateView()
- {
- View.Texture =_sprite.Frame0(_skillPrototype.Icon);
- }
-}
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
deleted file mode 100644
index 119e5d6063..0000000000
--- a/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Content.Shared._CP14.Skill;
-using Robust.Client.UserInterface;
-
-namespace Content.Client._CP14.ResearchTable;
-
-public sealed class CP14ResearchTableBoundUserInterface : BoundUserInterface
-{
- private CP14ResearchTableWindow? _window;
-
- public CP14ResearchTableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
- {
- }
-
- protected override void Open()
- {
- base.Open();
-
- _window = this.CreateWindow();
-
- _window.OnResearch += entry => SendMessage(new CP14ResearchMessage(entry.ProtoId));
- }
-
- protected override void UpdateState(BoundUserInterfaceState state)
- {
- base.UpdateState(state);
-
- switch (state)
- {
- case CP14ResearchTableUiState recipesState:
- _window?.UpdateState(recipesState);
- break;
- }
- }
-}
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
deleted file mode 100644
index 59a2e789bb..0000000000
--- a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
deleted file mode 100644
index 0e606753ea..0000000000
--- a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-using Content.Client._CP14.Workbench;
-using Content.Shared._CP14.Skill;
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared._CP14.Skill.Restrictions;
-using Robust.Client.AutoGenerated;
-using Robust.Client.GameObjects;
-using Robust.Client.UserInterface.Controls;
-using Robust.Client.UserInterface.CustomControls;
-using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Prototypes;
-
-namespace Content.Client._CP14.ResearchTable;
-
-[GenerateTypedNameReferences]
-public sealed partial class CP14ResearchTableWindow : DefaultWindow
-{
- private const int AllCategoryId = -1;
-
- [Dependency] private readonly IPrototypeManager _prototype = default!;
- [Dependency] private readonly ILogManager _log = default!;
- [Dependency] private readonly IEntityManager _entity = default!;
-
- private readonly SpriteSystem _sprite;
- private readonly CP14SharedSkillSystem _skillSystem;
-
- public event Action? OnResearch;
-
- private readonly Dictionary _categories = new();
-
- private CP14ResearchTableUiState? _cachedState;
- private CP14ResearchUiEntry? _selectedEntry;
- private string _searchFilter = string.Empty;
-
- private ISawmill Sawmill { get; init; }
-
- public CP14ResearchTableWindow()
- {
- RobustXamlLoader.Load(this);
- IoCManager.InjectDependencies(this);
-
- _sprite = _entity.System();
- _skillSystem = _entity.System();
-
- Sawmill = _log.GetSawmill("cp14_research_table_window");
-
- SearchBar.OnTextChanged += OnSearchChanged;
- CraftButton.OnPressed += OnCraftPressed;
- OptionCategories.OnItemSelected += OnCategoryItemSelected;
- }
-
- public void UpdateRecipesVisibility()
- {
- if (_cachedState is null)
- return;
-
- CraftsContainer.RemoveAllChildren();
-
- var recipes = new List();
- foreach (var entry in _cachedState.Skills)
- {
- if (!_prototype.TryIndex(entry.ProtoId, out var indexedEntry))
- {
- Sawmill.Error($"No recipe prototype {entry.ProtoId} retrieved from cache found");
- continue;
- }
-
- if (!ProcessSearchFilter(indexedEntry))
- continue;
-
- if (!ProcessSearchCategoryFilter(indexedEntry))
- continue;
-
- recipes.Add(entry);
- }
-
- recipes.Sort(CP14ResearchUiEntry.CompareTo);
-
- foreach (var recipe in recipes)
- {
- var control = new CP14ResearchRecipeControl(recipe);
- control.OnResearch += RecipeSelect;
-
- CraftsContainer.AddChild(control);
- }
-
- if (_selectedEntry is not null && !recipes.Contains(_selectedEntry.Value))
- RecipeSelectNull();
- }
-
- public void UpdateState(CP14ResearchTableUiState recipesState)
- {
- _cachedState = recipesState;
-
- _categories.Clear();
- OptionCategories.Clear();
- OptionCategories.AddItem(Loc.GetString("cp14-recipe-category-all"), AllCategoryId);
-
- var categories = new List();
- var count = 0;
-
- foreach (var skill in recipesState.Skills)
- {
- if (!_prototype.TryIndex(skill.ProtoId, out var indexedSkill))
- continue;
-
- if (!_prototype.TryIndex(indexedSkill.Tree, out var indexedTree))
- continue;
-
- if (categories.Contains(indexedTree.Name))
- continue;
-
- categories.Add(indexedTree.Name);
- }
-
- categories.Sort((a, b) => string.Compare(Loc.GetString(a), Loc.GetString(b), StringComparison.Ordinal));
-
- foreach (var category in categories)
- {
- OptionCategories.AddItem(Loc.GetString(category), count);
- _categories.Add(count, category);
- count++;
- }
-
- UpdateRecipesVisibility();
- }
-
- private void OnSearchChanged(LineEdit.LineEditEventArgs _)
- {
- _searchFilter = SearchBar.Text.Trim().ToLowerInvariant();
- UpdateRecipesVisibility();
- }
-
- private void OnCraftPressed(BaseButton.ButtonEventArgs _)
- {
- if (_selectedEntry is null)
- return;
-
- OnResearch?.Invoke(_selectedEntry.Value);
- }
-
- private void OnCategoryItemSelected(OptionButton.ItemSelectedEventArgs obj)
- {
- OptionCategories.SelectId(obj.Id);
- UpdateRecipesVisibility();
- }
-
- private bool ProcessSearchFilter(CP14SkillPrototype indexedEntry)
- {
- if (_searchFilter == string.Empty)
- return true;
-
- return Loc.GetString(_skillSystem.GetSkillName(indexedEntry)).Contains(_searchFilter);
- }
-
- private bool ProcessSearchCategoryFilter(CP14SkillPrototype indexedEntry)
- {
- // If we are searching through all categories, we simply skip the current filter
- if (OptionCategories.SelectedId == AllCategoryId)
- return true;
-
- if (!_categories.TryGetValue(OptionCategories.SelectedId, out var selectedCategory))
- {
- Sawmill.Error($"Non-existent {OptionCategories.SelectedId} category id selected. Filter skipped");
- return true;
- }
-
- if (!_prototype.TryIndex(indexedEntry.Tree, out var indexedTree))
- {
- Sawmill.Error($"Non-existent {indexedEntry.Tree} category prototype id. Filter skipped");
- return true;
- }
-
- return indexedTree.Name == selectedCategory;
- }
-
- private void RecipeSelect(CP14ResearchTableUiState recipesState)
- {
- foreach (var skill in recipesState.Skills)
- {
- RecipeSelect(skill, _prototype.Index(skill.ProtoId));
- break;
- }
- }
-
- private void RecipeSelect(CP14ResearchUiEntry cachedEntry)
- {
- if (_cachedState is null)
- return;
-
- if (_cachedState.Skills.Contains(cachedEntry))
- {
- Sawmill.Warning($"The selected cache option {cachedEntry} isn't found in recipes");
- return;
- }
-
- RecipeSelect(cachedEntry, _prototype.Index(cachedEntry.ProtoId));
- }
-
- private void RecipeSelect(CP14ResearchUiEntry entry, CP14SkillPrototype skill)
- {
- _selectedEntry = entry;
-
- ItemView.Texture = _sprite.Frame0(skill.Icon);
- ItemName.Text = _skillSystem.GetSkillName(skill);
- ItemDescription.Text = _skillSystem.GetSkillDescription(skill);
- ItemRequirements.RemoveAllChildren();
-
- foreach (var restriction in skill.Restrictions)
- {
- switch (restriction)
- {
- case Researched researched:
- foreach (var requirement in researched.Requirements)
- {
- ItemRequirements.AddChild(new CP14WorkbenchRequirementControl(requirement));
- }
-
- break;
- }
- }
-
- CraftButton.Disabled = !entry.Craftable;
- }
-
- private void RecipeSelectNull()
- {
- _selectedEntry = null;
-
- ItemView.Texture = null;
- ItemName.Text = string.Empty;
- ItemDescription.Text = string.Empty;
- ItemRequirements.RemoveAllChildren();
- CraftButton.Disabled = true;
- }
-}
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
index 8adf468ace..c10c76766a 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
@@ -37,12 +37,14 @@ public sealed partial class CP14WorkbenchRequirementControl : Control
{
View.Visible = true;
View.Texture = _sprite.Frame0(texture);
+ View.Modulate = requirement.GetRequirementColor(_proto);
}
var entityView = requirement.GetRequirementEntityView(_proto);
if (entityView is not null)
{
EntityView.Visible = true;
+ EntityView.Modulate = requirement.GetRequirementColor(_proto);
EntityView.SetPrototype(entityView);
}
}
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
index 7ee52d2568..6787850c5b 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
@@ -3,9 +3,11 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
+using Content.Client._CP14.Skill;
using Content.Shared._CP14.Workbench;
using Content.Shared._CP14.Workbench.Prototypes;
using Robust.Client.AutoGenerated;
+using Robust.Client.Player;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
@@ -18,8 +20,11 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
{
private const int AllCategoryId = -1;
+ [Dependency] private readonly IPlayerManager _player = default!;
+ [Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly ILogManager _log = default!;
+ private CP14ClientSkillSystem _skill;
public event Action? OnCraft;
@@ -36,6 +41,8 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
+ _skill = _entManager.System();
+
Sawmill = _log.GetSawmill("cp14_workbench_window");
SearchBar.OnTextChanged += OnSearchChanged;
@@ -65,6 +72,22 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
if (!ProcessSearchCategoryFilter(indexedEntry))
continue;
+ if (_player.LocalEntity is not null)
+ {
+ var skilled = true;
+ foreach (var skill in indexedEntry.RequiredSkills)
+ {
+ if (!_skill.HaveSkill(_player.LocalEntity.Value, skill))
+ {
+ skilled = false;
+ break;
+ }
+ }
+
+ if (!skilled)
+ continue;
+ }
+
recipes.Add(entry);
}
@@ -84,6 +107,9 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
public void UpdateState(CP14WorkbenchUiRecipesState recipesState)
{
+ if (_player.LocalEntity is null)
+ return;
+
_cachedState = recipesState;
_categories.Clear();
diff --git a/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs b/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
deleted file mode 100644
index 3646a2c0d3..0000000000
--- a/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using Content.Server.DoAfter;
-using Content.Shared._CP14.ResearchTable;
-using Content.Shared._CP14.Skill;
-using Content.Shared._CP14.Skill.Components;
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared._CP14.Skill.Restrictions;
-using Content.Shared.DoAfter;
-using Content.Shared.UserInterface;
-using Robust.Server.Audio;
-using Robust.Server.GameObjects;
-using Robust.Shared.Prototypes;
-
-namespace Content.Server._CP14.ResearchTable;
-
-public sealed class CP14ResearchSystem : CP14SharedResearchSystem
-{
- [Dependency] private readonly EntityLookupSystem _lookup = default!;
- [Dependency] private readonly IPrototypeManager _proto = default!;
- [Dependency] private readonly UserInterfaceSystem _userInterface = default!;
- [Dependency] private readonly DoAfterSystem _doAfter = default!;
- [Dependency] private readonly AudioSystem _audio = default!;
-
- private IEnumerable _allSkills = [];
-
- public override void Initialize()
- {
- base.Initialize();
-
- _allSkills = _proto.EnumeratePrototypes();
-
- SubscribeLocalEvent(OnBeforeUIOpen);
- SubscribeLocalEvent(OnResearch);
- SubscribeLocalEvent(OnResearchEnd);
-
- SubscribeLocalEvent(OnReloadPrototypes);
- }
-
- private void OnReloadPrototypes(PrototypesReloadedEventArgs ev)
- {
- _allSkills = _proto.EnumeratePrototypes();
- }
-
- private void OnResearchEnd(Entity table, ref CP14ResearchDoAfterEvent args)
- {
- if (args.Cancelled || args.Handled)
- return;
-
- if (!_proto.TryIndex(args.Skill, out var indexedSkill))
- return;
-
- var placedEntities = _lookup.GetEntitiesInRange(Transform(table).Coordinates,
- table.Comp.ResearchRadius,
- LookupFlags.Uncontained);
-
- if (!CanResearch(indexedSkill, placedEntities, args.User))
- return;
-
- if (!TryComp(args.User, out var storage))
- return;
- if (storage.ResearchedSkills.Contains(args.Skill) || storage.LearnedSkills.Contains(args.Skill))
- return;
- storage.ResearchedSkills.Add(args.Skill);
- Dirty(args.User, storage);
-
- foreach (var restriction in indexedSkill.Restrictions)
- {
- switch (restriction)
- {
- case Researched researched:
- foreach (var req in researched.Requirements)
- {
- req.PostCraft(EntityManager, _proto, placedEntities, args.User);
- }
- break;
- }
- }
-
- _audio.PlayPvs(table.Comp.ResearchSound, table);
- UpdateUI(table, args.User);
- args.Handled = true;
- }
-
- private void OnResearch(Entity ent, ref CP14ResearchMessage args)
- {
- if (!TryComp(args.Actor, out var storage))
- return;
-
- if (storage.ResearchedSkills.Contains(args.Skill) || storage.LearnedSkills.Contains(args.Skill))
- return;
-
- if (!_proto.TryIndex(args.Skill, out var indexedSkill))
- return;
-
- StartResearch(ent, args.Actor, indexedSkill);
- }
-
- private void OnBeforeUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args)
- {
- UpdateUI(ent, args.User);
- }
-
- private void UpdateUI(Entity entity, EntityUid user)
- {
- var placedEntities = _lookup.GetEntitiesInRange(Transform(entity).Coordinates, entity.Comp.ResearchRadius);
-
- if (!TryComp(user, out var storage))
- return;
-
- var researches = new List();
- foreach (var skill in _allSkills)
- {
- var researchable = false;
- var canCraft = true;
- var hidden = false;
-
- foreach (var restriction in skill.Restrictions)
- {
- if (storage.ResearchedSkills.Contains(skill) || storage.LearnedSkills.Contains(skill))
- continue;
-
- switch (restriction)
- {
- case SpeciesWhitelist speciesWhitelist: //We cant change species of our character, so hide it
- if (!speciesWhitelist.Check(EntityManager, user, skill))
- hidden = true;
- break;
-
- case NeedPrerequisite prerequisite:
- if (!storage.ResearchedSkills.Contains(prerequisite.Prerequisite))
- hidden = true;
- break;
-
- case Researched researched:
- researchable = true;
-
- foreach (var req in researched.Requirements)
- {
- if (!req.CheckRequirement(EntityManager, _proto, placedEntities, user))
- {
- canCraft = false;
- }
- }
- break;
- }
- }
-
- if (!researchable || hidden)
- continue;
-
- var entry = new CP14ResearchUiEntry(skill, canCraft);
-
- researches.Add(entry);
- }
-
- _userInterface.SetUiState(entity.Owner, CP14ResearchTableUiKey.Key, new CP14ResearchTableUiState(researches));
- }
-
- private void StartResearch(Entity table, EntityUid user, CP14SkillPrototype skill)
- {
- var researchDoAfter = new CP14ResearchDoAfterEvent()
- {
- Skill = skill
- };
-
- var doAfterArgs = new DoAfterArgs(EntityManager,
- user,
- TimeSpan.FromSeconds(table.Comp.ResearchSpeed),
- researchDoAfter,
- table,
- table)
- {
- BreakOnMove = true,
- BreakOnDamage = true,
- NeedHand = true,
- };
-
- _doAfter.TryStartDoAfter(doAfterArgs);
- _audio.PlayPvs(table.Comp.ResearchSound, table);
- }
-
- private bool CanResearch(CP14SkillPrototype skill, HashSet entities, EntityUid user)
- {
- foreach (var restriction in skill.Restrictions)
- {
- switch (restriction)
- {
- case Researched researched:
- foreach (var req in researched.Requirements)
- {
- if (!req.CheckRequirement(EntityManager, _proto, entities, user))
- return false;
- }
- break;
- }
- }
-
- return true;
- }
-}
diff --git a/Content.Server/_CP14/Trading/CP14TradingPlatformSystem.cs b/Content.Server/_CP14/Trading/CP14TradingPlatformSystem.cs
index bb7e212d81..7e8a2d13e5 100644
--- a/Content.Server/_CP14/Trading/CP14TradingPlatformSystem.cs
+++ b/Content.Server/_CP14/Trading/CP14TradingPlatformSystem.cs
@@ -87,7 +87,7 @@ public sealed partial class CP14TradingPlatformSystem : CP14SharedTradingPlatfor
foreach (var req in indexedRequest.Requirements)
{
- req.PostCraft(EntityManager, Proto, itemPlacer.PlacedEntities, null);
+ req.PostCraft(EntityManager, Proto, itemPlacer.PlacedEntities);
}
_audio.PlayPvs(ent.Comp.SellSound, Transform(ent).Coordinates);
diff --git a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
index f1511805b9..7708cfa761 100644
--- a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
+++ b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
@@ -3,12 +3,16 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
+using Content.Shared._CP14.Skill;
using Content.Shared._CP14.Workbench;
+using Content.Shared.Placeable;
namespace Content.Server._CP14.Workbench;
public sealed partial class CP14WorkbenchSystem
{
+ [Dependency] private readonly CP14SharedSkillSystem _skill = default!;
+
private void OnCraft(Entity entity, ref CP14WorkbenchUiCraftMessage args)
{
if (!entity.Comp.Recipes.Contains(args.Recipe))
@@ -20,9 +24,12 @@ public sealed partial class CP14WorkbenchSystem
StartCraft(entity, args.Actor, prototype);
}
- private void UpdateUIRecipes(Entity entity, EntityUid user)
+ private void UpdateUIRecipes(Entity entity)
{
- var placedEntities = _lookup.GetEntitiesInRange(Transform(entity).Coordinates, entity.Comp.WorkbenchRadius);
+ if (!TryComp(entity.Owner, out var placer))
+ return;
+
+ var placedEntities = placer.PlacedEntities;
var recipes = new List();
foreach (var recipeId in entity.Comp.Recipes)
@@ -31,21 +38,16 @@ public sealed partial class CP14WorkbenchSystem
continue;
var canCraft = true;
- var hidden = false;
foreach (var requirement in indexedRecipe.Requirements)
{
- if (!requirement.CheckRequirement(EntityManager, _proto, placedEntities, user))
+ if (!requirement.CheckRequirement(EntityManager, _proto, placedEntities))
{
canCraft = false;
- if (requirement.HideRecipe)
- hidden = true;
+ break;
}
}
- if (hidden)
- continue;
-
var entry = new CP14WorkbenchUiRecipesEntry(recipeId, canCraft);
recipes.Add(entry);
diff --git a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
index 4ccc6dc517..fdf10ed530 100644
--- a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
+++ b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
@@ -6,12 +6,11 @@
using System.Numerics;
using Content.Server.DoAfter;
using Content.Server.Popups;
-using Content.Server.Stack;
+using Content.Shared._CP14.Skill;
using Content.Shared._CP14.Workbench;
using Content.Shared._CP14.Workbench.Prototypes;
-using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.DoAfter;
-using Content.Shared.Stacks;
+using Content.Shared.Placeable;
using Content.Shared.UserInterface;
using Robust.Server.Audio;
using Robust.Server.GameObjects;
@@ -25,26 +24,21 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly DoAfterSystem _doAfter = default!;
- [Dependency] private readonly StackSystem _stack = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly UserInterfaceSystem _userInterface = default!;
- [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IRobustRandom _random = default!;
- private EntityQuery _metaQuery;
- private EntityQuery _stackQuery;
-
public override void Initialize()
{
base.Initialize();
- _metaQuery = GetEntityQuery();
- _stackQuery = GetEntityQuery();
-
SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnItemPlaced);
+ SubscribeLocalEvent(OnItemRemoved);
+
SubscribeLocalEvent(OnBeforeUIOpen);
SubscribeLocalEvent(OnCraft);
@@ -65,9 +59,19 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
}
}
+ private void OnItemRemoved(Entity ent, ref ItemRemovedEvent args)
+ {
+ UpdateUIRecipes(ent);
+ }
+
+ private void OnItemPlaced(Entity ent, ref ItemPlacedEvent args)
+ {
+ UpdateUIRecipes(ent);
+ }
+
private void OnBeforeUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args)
{
- UpdateUIRecipes(ent, args.User);
+ UpdateUIRecipes(ent);
}
private void OnCraftFinished(Entity ent, ref CP14CraftDoAfterEvent args)
@@ -97,7 +101,7 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
foreach (var req in recipe.Requirements)
{
- req.PostCraft(EntityManager, _proto, placedEntities, args.User);
+ req.PostCraft(EntityManager, _proto, placedEntities);
}
//We teleport result to workbench AFTER craft.
@@ -106,7 +110,7 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
_transform.SetCoordinates(resultEntity, Transform(ent).Coordinates.Offset(new Vector2(_random.NextFloat(-0.25f, 0.25f), _random.NextFloat(-0.25f, 0.25f))));
}
- UpdateUIRecipes(ent, args.User);
+ UpdateUIRecipes(ent);
args.Handled = true;
}
@@ -137,9 +141,14 @@ public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
private bool CanCraftRecipe(CP14WorkbenchRecipePrototype recipe, HashSet entities, EntityUid user)
{
+ foreach (var skill in recipe.RequiredSkills)
+ {
+ if (!_skill.HaveSkill(user, skill))
+ return false;
+ }
foreach (var req in recipe.Requirements)
{
- if (!req.CheckRequirement(EntityManager, _proto, entities, user))
+ if (!req.CheckRequirement(EntityManager, _proto, entities))
return false;
}
diff --git a/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs b/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
deleted file mode 100644
index 6cb4016a13..0000000000
--- a/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Robust.Shared.Audio;
-using Robust.Shared.GameStates;
-
-namespace Content.Shared._CP14.ResearchTable;
-
-[RegisterComponent, NetworkedComponent]
-public sealed partial class CP14ResearchTableComponent : Component
-{
- [DataField]
- public float ResearchSpeed = 3f;
-
- [DataField]
- public float ResearchRadius = 0.5f;
-
- [DataField]
- public SoundSpecifier ResearchSound = new SoundCollectionSpecifier("PaperScribbles");
-}
diff --git a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
deleted file mode 100644
index 04c032a6ea..0000000000
--- a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared.DoAfter;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization;
-
-namespace Content.Shared._CP14.ResearchTable;
-
-public abstract class CP14SharedResearchSystem : EntitySystem
-{
-}
-
-[Serializable, NetSerializable]
-public sealed partial class CP14ResearchDoAfterEvent : DoAfterEvent
-{
- [DataField(required: true)]
- public ProtoId Skill = default!;
-
- public override DoAfterEvent Clone() => this;
-}
diff --git a/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs b/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
deleted file mode 100644
index e3f41a59bc..0000000000
--- a/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using Content.Shared._CP14.Skill.Prototypes;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization;
-
-namespace Content.Shared._CP14.Skill;
-
-[Serializable, NetSerializable]
-public enum CP14ResearchTableUiKey
-{
- Key,
-}
-
-[Serializable, NetSerializable]
-public sealed class CP14ResearchMessage(ProtoId skill) : BoundUserInterfaceMessage
-{
- public readonly ProtoId Skill = skill;
-}
-
-
-[Serializable, NetSerializable]
-public sealed class CP14ResearchTableUiState(List skills) : BoundUserInterfaceState
-{
- public readonly List Skills = skills;
-}
-
-[Serializable, NetSerializable]
-public readonly struct CP14ResearchUiEntry(ProtoId protoId, bool craftable) : IEquatable
-{
- public readonly ProtoId ProtoId = protoId;
- public readonly bool Craftable = craftable;
-
- public int CompareTo(CP14ResearchUiEntry other)
- {
- return Craftable.CompareTo(other.Craftable);
- }
-
- public override bool Equals(object? obj)
- {
- return obj is CP14ResearchUiEntry other && Equals(other);
- }
-
- public bool Equals(CP14ResearchUiEntry other)
- {
- return ProtoId.Id == other.ProtoId.Id;
- }
-
- public override int GetHashCode()
- {
- return HashCode.Combine(ProtoId, Craftable);
- }
-
- public override string ToString()
- {
- return $"{ProtoId} ({Craftable})";
- }
-
- public static int CompareTo(CP14ResearchUiEntry left, CP14ResearchUiEntry right)
- {
- return right.CompareTo(left);
- }
-}
diff --git a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
index 12b8c47bd6..3b12fea1f6 100644
--- a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
+++ b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
@@ -1,4 +1,3 @@
-using Content.Shared._CP14.ResearchTable;
using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.FixedPoint;
using Robust.Shared.GameStates;
@@ -11,7 +10,7 @@ namespace Content.Shared._CP14.Skill.Components;
/// Component that stores the skills learned by a player and their progress in the skill trees.
///
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
-[Access(typeof(CP14SharedSkillSystem), typeof(CP14SharedResearchSystem))]
+[Access(typeof(CP14SharedSkillSystem))]
public sealed partial class CP14SkillStorageComponent : Component
{
///
diff --git a/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs b/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
index 0d77836b49..aabd955367 100644
--- a/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
+++ b/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
@@ -36,20 +36,12 @@ public sealed partial class UnlockRecipes : CP14SkillEffect
var affectedRecipes = new List();
foreach (var recipe in allRecipes)
{
- foreach (var req in recipe.Requirements)
+ foreach (var req in recipe.RequiredSkills)
{
- switch (req)
+ if (req == skill)
{
- case SkillRequired skillReq:
- foreach (var skillReqSkill in skillReq.Skills)
- {
- if (skillReqSkill == skill)
- {
- affectedRecipes.Add(recipe);
- break;
- }
- }
- break;
+ affectedRecipes.Add(recipe);
+ break;
}
}
}
diff --git a/Content.Shared/_CP14/Trading/Systems/CP14SharedTradingPlatformSystem.cs b/Content.Shared/_CP14/Trading/Systems/CP14SharedTradingPlatformSystem.cs
index c5179cd9c1..fce4231bfc 100644
--- a/Content.Shared/_CP14/Trading/Systems/CP14SharedTradingPlatformSystem.cs
+++ b/Content.Shared/_CP14/Trading/Systems/CP14SharedTradingPlatformSystem.cs
@@ -97,7 +97,7 @@ public abstract partial class CP14SharedTradingPlatformSystem : EntitySystem
foreach (var requirement in indexedRequest.Requirements)
{
- if (!requirement.CheckRequirement(EntityManager, Proto, itemPlacer.PlacedEntities, null))
+ if (!requirement.CheckRequirement(EntityManager, Proto, itemPlacer.PlacedEntities))
return false;
}
diff --git a/Content.Shared/_CP14/Workbench/CP14WorkbenchUI.cs b/Content.Shared/_CP14/Workbench/CP14WorkbenchUI.cs
index 9a8e38be7a..4d8fb8b2a3 100644
--- a/Content.Shared/_CP14/Workbench/CP14WorkbenchUI.cs
+++ b/Content.Shared/_CP14/Workbench/CP14WorkbenchUI.cs
@@ -16,39 +16,25 @@ public enum CP14WorkbenchUiKey
}
[Serializable, NetSerializable]
-public sealed class CP14WorkbenchUiCraftMessage : BoundUserInterfaceMessage
+public sealed class CP14WorkbenchUiCraftMessage(ProtoId recipe)
+ : BoundUserInterfaceMessage
{
- public readonly ProtoId Recipe;
-
- public CP14WorkbenchUiCraftMessage(ProtoId recipe)
- {
- Recipe = recipe;
- }
+ public readonly ProtoId Recipe = recipe;
}
[Serializable, NetSerializable]
-public sealed class CP14WorkbenchUiRecipesState : BoundUserInterfaceState
+public sealed class CP14WorkbenchUiRecipesState(List recipes) : BoundUserInterfaceState
{
- public readonly List Recipes;
-
- public CP14WorkbenchUiRecipesState(List recipes)
- {
- Recipes = recipes;
- }
+ public readonly List Recipes = recipes;
}
[Serializable, NetSerializable]
-public readonly struct CP14WorkbenchUiRecipesEntry : IEquatable
+public readonly struct CP14WorkbenchUiRecipesEntry(ProtoId protoId, bool craftable)
+ : IEquatable
{
- public readonly ProtoId ProtoId;
- public readonly bool Craftable;
-
- public CP14WorkbenchUiRecipesEntry(ProtoId protoId, bool craftable)
- {
- ProtoId = protoId;
- Craftable = craftable;
- }
+ public readonly ProtoId ProtoId = protoId;
+ public readonly bool Craftable = craftable;
public int CompareTo(CP14WorkbenchUiRecipesEntry other)
{
diff --git a/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs b/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
index 03c37317e9..b22efb28a2 100644
--- a/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
+++ b/Content.Shared/_CP14/Workbench/Prototypes/CP14WorkbenchRecipePrototype.cs
@@ -3,6 +3,7 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
+using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.Tag;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
@@ -27,6 +28,9 @@ public sealed class CP14WorkbenchRecipePrototype : IPrototype
[DataField(required: true)]
public List Requirements = new();
+ [DataField]
+ public HashSet> RequiredSkills = new();
+
[DataField(required: true)]
public EntProtoId Result;
diff --git a/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs b/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
index 69620f64a5..2b251a471d 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
@@ -12,8 +12,6 @@ namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
{
- public override bool HideRecipe { get; set; } = false;
-
[DataField(required: true)]
public ProtoId Material;
@@ -23,8 +21,7 @@ public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(
EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var count = 0;
foreach (var ent in placedEntities)
@@ -56,7 +53,7 @@ public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
return true;
}
- public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities, EntityUid? user)
+ public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities)
{
var stackSystem = entManager.System();
@@ -118,11 +115,6 @@ public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
return $"{Loc.GetString(indexedMaterial.Name)} x{Count}";
}
- public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
- {
- return null;
- }
-
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
return !protoManager.TryIndex(Material, out var indexedMaterial) ? null : indexedMaterial.Icon;
diff --git a/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs b/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
index be78891b83..cd11ab6eec 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
@@ -11,8 +11,6 @@ namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class ProtoIdResource : CP14WorkbenchCraftRequirement
{
- public override bool HideRecipe { get; set; } = false;
-
[DataField(required: true)]
public EntProtoId ProtoId;
@@ -21,15 +19,14 @@ public sealed partial class ProtoIdResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var indexedIngredients = IndexIngredients(entManager, placedEntities);
return indexedIngredients.TryGetValue(ProtoId, out var availableQuantity) && availableQuantity >= Count;
}
- public override void PostCraft(EntityManager entManager,IPrototypeManager protoManager, HashSet placedEntities, EntityUid? user)
+ public override void PostCraft(EntityManager entManager,IPrototypeManager protoManager, HashSet placedEntities)
{
var requiredCount = Count;
@@ -77,11 +74,6 @@ public sealed partial class ProtoIdResource : CP14WorkbenchCraftRequirement
return indexedProto;
}
- public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
- {
- return null;
- }
-
private Dictionary IndexIngredients(EntityManager entManager, HashSet ingredients)
{
var indexedIngredients = new Dictionary();
diff --git a/Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs b/Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
deleted file mode 100644
index 48206f98aa..0000000000
--- a/Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using Content.Shared._CP14.Skill;
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared._CP14.Workbench.Prototypes;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Utility;
-
-namespace Content.Shared._CP14.Workbench.Requirements;
-
-public sealed partial class SkillRequired : CP14WorkbenchCraftRequirement
-{
- public override bool HideRecipe { get; set; } = true;
-
- [DataField(required: true)]
- public List> Skills = new();
-
- public override bool CheckRequirement(EntityManager entManager,
- IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
- {
- if (user is null)
- return false;
-
- var knowledgeSystem = entManager.System();
-
- var haveAllSkills = true;
- foreach (var skill in Skills)
- {
- if (!knowledgeSystem.HaveSkill(user.Value, skill))
- {
- haveAllSkills = false;
- break;
- }
- }
-
- return haveAllSkills;
- }
-
- public override double GetPrice(EntityManager entManager,
- IPrototypeManager protoManager)
- {
- return 0;
- }
-
- public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities, EntityUid? user)
- {
- }
-
- public override string GetRequirementTitle(IPrototypeManager protoManager)
- {
- return string.Empty;
- }
-
- public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
- {
- return null;
- }
-
- public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
- {
- return null;
- }
-}
diff --git a/Content.Shared/_CP14/Workbench/Requirements/SolutionResource.cs b/Content.Shared/_CP14/Workbench/Requirements/SolutionResource.cs
new file mode 100644
index 0000000000..0cc25f194b
--- /dev/null
+++ b/Content.Shared/_CP14/Workbench/Requirements/SolutionResource.cs
@@ -0,0 +1,116 @@
+using Content.Shared.Chemistry.EntitySystems;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Workbench.Requirements;
+
+public sealed partial class SolutionResource : CP14WorkbenchCraftRequirement
+{
+ [DataField(required: true)]
+ public ProtoId Reagent = default!;
+
+ ///
+ /// How much impurity from other reagents is allowed?
+ ///
+ [DataField(required: true)]
+ public float Purity = 1f;
+
+ [DataField(required: true)]
+ public FixedPoint2 Amount = 1f;
+
+ [DataField]
+ public EntProtoId DummyEntityIcon = "CP14LiquidDropDummy";
+
+ public override bool CheckRequirement(EntityManager entManager,
+ IPrototypeManager protoManager,
+ HashSet placedEntities)
+ {
+ var solutionSys = entManager.System();
+ foreach (var ent in placedEntities)
+ {
+ if (!solutionSys.TryGetDrawableSolution(ent, out var soln, out var solution))
+ continue;
+
+ var volume = solution.Volume;
+ foreach (var (id, quantity) in solution.Contents)
+ {
+ if (id.Prototype != Reagent)
+ continue;
+
+ if (quantity < Amount)
+ continue;
+
+ //Purity check
+ if (quantity / volume < Purity)
+ continue;
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities)
+ {
+ var solutionSys = entManager.System();
+ foreach (var ent in placedEntities)
+ {
+ if (!solutionSys.TryGetDrawableSolution(ent, out var soln, out var solution))
+ continue;
+
+
+ var volume = solution.Volume;
+ foreach (var (id, quantity) in solution.Contents)
+ {
+ if (id.Prototype != Reagent)
+ continue;
+
+ if (quantity < Amount)
+ continue;
+
+ //Purity check
+ if (quantity / volume < Purity)
+ continue;
+
+ solutionSys.RemoveEachReagent(soln.Value, Amount);
+ return;
+ }
+ }
+ }
+
+ public override double GetPrice(EntityManager entManager, IPrototypeManager protoManager)
+ {
+ if (!protoManager.TryIndex(Reagent, out var indexedReagent))
+ return 0;
+
+ return indexedReagent.PricePerUnit * (double)Amount;
+ }
+
+ public override string GetRequirementTitle(IPrototypeManager protoManager)
+ {
+ if (!protoManager.TryIndex(Reagent, out var indexedReagent))
+ return string.Empty;
+
+ return Loc.GetString("cp14-workbench-reagent-req",
+ ("reagent", indexedReagent.LocalizedName),
+ ("count", Amount),
+ ("purity", Purity * 100));
+ }
+
+ public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
+ {
+ if (!protoManager.TryIndex(DummyEntityIcon, out var indexedEnt))
+ return null;
+ return indexedEnt;
+ }
+
+ public override Color GetRequirementColor(IPrototypeManager protoManager)
+ {
+ if (!protoManager.TryIndex(Reagent, out var indexedReagent))
+ return Color.White;
+
+ return indexedReagent.SubstanceColor;
+ }
+}
diff --git a/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs b/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
index 1c265ee85c..f85d3c8dc9 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
@@ -12,8 +12,6 @@ namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
{
- public override bool HideRecipe { get; set; } = false;
-
[DataField(required: true)]
public ProtoId Group;
@@ -22,8 +20,7 @@ public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
if (!protoManager.TryIndex(Group, out var indexedGroup))
return false;
@@ -47,8 +44,7 @@ public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
}
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var stackSystem = entManager.System();
@@ -75,13 +71,6 @@ public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
}
}
- public override double GetPrice(EntityManager entManager,
- IPrototypeManager protoManager)
- {
- //Idk how to price this, so we just return 0.
- return 0;
- }
-
public override string GetRequirementTitle(IPrototypeManager protoManager)
{
var indexedGroup = protoManager.Index(Group);
@@ -89,11 +78,6 @@ public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
return $"{Loc.GetString(indexedGroup.Name)} x{Count}";
}
- public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
- {
- return null;
- }
-
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
var indexedGroup = protoManager.Index(Group);
diff --git a/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs b/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
index d4e54f423a..b99e2b3f73 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
@@ -4,7 +4,6 @@
*/
using Content.Shared._CP14.Trading.Systems;
-using Content.Shared._CP14.Workbench.Prototypes;
using Content.Shared.Stacks;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@@ -13,8 +12,6 @@ namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class StackResource : CP14WorkbenchCraftRequirement
{
- public override bool HideRecipe { get; set; } = false;
-
[DataField(required: true)]
public ProtoId Stack;
@@ -23,8 +20,7 @@ public sealed partial class StackResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var count = 0;
foreach (var ent in placedEntities)
@@ -45,8 +41,7 @@ public sealed partial class StackResource : CP14WorkbenchCraftRequirement
}
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var stackSystem = entManager.System();
@@ -92,11 +87,6 @@ public sealed partial class StackResource : CP14WorkbenchCraftRequirement
return $"{Loc.GetString(indexedStack.Name)} x{Count}";
}
- public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
- {
- return null;
- }
-
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
return !protoManager.TryIndex(Stack, out var indexedStack) ? null : indexedStack.Icon;
diff --git a/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
index f8ab5403ed..9eaadc20ef 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
@@ -3,7 +3,6 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
-using Content.Shared._CP14.Workbench.Prototypes;
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@@ -12,8 +11,6 @@ namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class TagResource : CP14WorkbenchCraftRequirement
{
- public override bool HideRecipe { get; set; } = false;
-
[DataField(required: true)]
public ProtoId Tag;
@@ -29,8 +26,7 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(
EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user)
+ HashSet placedEntities)
{
var tagSystem = entManager.System();
@@ -49,7 +45,7 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
return true;
}
- public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities, EntityUid? user)
+ public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities)
{
var tagSystem = entManager.System();
@@ -66,12 +62,6 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
entManager.DeleteEntity(placedEntity);
}
}
- public override double GetPrice(EntityManager entManager,
- IPrototypeManager protoManager)
- {
- //Idk how to price tags, so just return 0 for now.
- return 0;
- }
public override string GetRequirementTitle(IPrototypeManager protoManager)
{
@@ -81,11 +71,6 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
return $"{Loc.GetString(Title)} x{Count}";
}
- public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
- {
- return null;
- }
-
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
return Texture;
diff --git a/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs b/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
index 700187a02b..3a855e4fe0 100644
--- a/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
+++ b/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
@@ -3,7 +3,6 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
-using Content.Shared._CP14.Workbench.Prototypes;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@@ -14,43 +13,59 @@ namespace Content.Shared._CP14.Workbench;
[MeansImplicitUse]
public abstract partial class CP14WorkbenchCraftRequirement
{
- ///
- /// If true, failure to fulfill this condition will hide recipes from the possible craft workbench menu
- ///
- public abstract bool HideRecipe { get; set; }
-
///
/// Here a check is made that the recipe as a whole can be fulfilled at the current moment. Do not add anything that affects gameplay here, and only perform checks here.
///
///
public abstract bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user);
+ HashSet placedEntities);
///
/// An event that is triggered after crafting. This is the place to put important things like removing items, spending stacks or other things.
///
- public abstract void PostCraft(EntityManager entManager,
+ public virtual void PostCraft(EntityManager entManager,
IPrototypeManager protoManager,
- HashSet placedEntities,
- EntityUid? user);
+ HashSet placedEntities)
+ {
- public abstract double GetPrice(EntityManager entManager,
- IPrototypeManager protoManager);
+ }
+
+ public virtual double GetPrice(EntityManager entManager,
+ IPrototypeManager protoManager)
+ {
+ return 0;
+ }
///
/// This text will be displayed in the description of the craft recipe. Write something like ‘Wooden planks: х10’ here
///
- public abstract string GetRequirementTitle(IPrototypeManager protoManager);
+ public virtual string GetRequirementTitle(IPrototypeManager protoManager)
+ {
+ return string.Empty;
+ }
///
/// You can specify an icon generated from an entity. It will support layering, colour changes and other layer options. Return null to disable.
///
- public abstract EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager);
+ public virtual EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
+ {
+ return null;
+ }
///
/// You can specify the texture directly. Return null to disable.
///
- public abstract SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager);
+ public virtual SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
+ {
+ return null;
+ }
+
+ ///
+ /// Optional, allows you to repaint the icon.
+ ///
+ public virtual Color GetRequirementColor(IPrototypeManager protoManager)
+ {
+ return Color.White;
+ }
}
diff --git a/Resources/Locale/en-US/_CP14/workbench/workbench.ftl b/Resources/Locale/en-US/_CP14/workbench/workbench.ftl
index ae8d3fda8e..65d9c4b3ab 100644
--- a/Resources/Locale/en-US/_CP14/workbench/workbench.ftl
+++ b/Resources/Locale/en-US/_CP14/workbench/workbench.ftl
@@ -3,4 +3,6 @@ cp14-workbench-ui-title = Item creation
cp14-workbench-craft = Craft
cp14-workbench-recipe-list = Recipe:
-cp14-workbench-cant-craft = Craft failed!
\ No newline at end of file
+cp14-workbench-cant-craft = Craft failed!
+
+cp14-workbench-reagent-req = {$count}u {$reagent} with {$purity}% purity
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/workbench/workbench.ftl b/Resources/Locale/ru-RU/_CP14/workbench/workbench.ftl
index 91ea87ecb1..07221e59ce 100644
--- a/Resources/Locale/ru-RU/_CP14/workbench/workbench.ftl
+++ b/Resources/Locale/ru-RU/_CP14/workbench/workbench.ftl
@@ -3,4 +3,6 @@ cp14-workbench-ui-title = Создание предметов
cp14-workbench-craft = Создать
cp14-workbench-recipe-list = Рецепт:
-cp14-workbench-cant-craft = Крафт не удался!
\ No newline at end of file
+cp14-workbench-cant-craft = Крафт не удался!
+
+cp14-workbench-reagent-req = {$count}u {$reagent} с {$purity}% чистоты
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Entities/Effects/visual_effect.yml b/Resources/Prototypes/_CP14/Entities/Effects/visual_effect.yml
index a5ff948df5..39dd9bc66a 100644
--- a/Resources/Prototypes/_CP14/Entities/Effects/visual_effect.yml
+++ b/Resources/Prototypes/_CP14/Entities/Effects/visual_effect.yml
@@ -113,3 +113,11 @@
tags:
- HideContextMenu
+- type: entity
+ id: CP14LiquidDropDummy
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Sprite
+ sprite: _CP14/Objects/Misc/liquid_drop.rsi
+ layers:
+ - state: liq-1
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Materials/misc.yml b/Resources/Prototypes/_CP14/Entities/Objects/Materials/misc.yml
index 81d3b8b2f3..3afc9f366f 100644
--- a/Resources/Prototypes/_CP14/Entities/Objects/Materials/misc.yml
+++ b/Resources/Prototypes/_CP14/Entities/Objects/Materials/misc.yml
@@ -49,40 +49,6 @@
- type: Stack
count: 3
-
-- type: entity
- parent: BaseItem
- id: CP14CrystalShardQuartz
- name: quartz shard
- description: Natural quartz crystals that can absorb the magical energy of the world around them.
- categories: [ ForkFiltered ]
- components:
- - type: Tag
- tags:
- - CP14FitInMortar
- - type: Item
- size: Tiny
- - type: Sprite
- sprite: _CP14/Structures/Flora/Crystal/crystal_shard.rsi
- layers:
- - state: shard0
- map: ["random"]
- - type: RandomSprite
- available:
- - random:
- shard0: ""
- shard1: ""
- shard2: ""
- shard3: ""
- - type: Extractable
- juiceSolution:
- reagents:
- - ReagentId: CP14GroundQuartz
- Quantity: 7
- - type: PhysicalComposition
- materialComposition:
- CP14Glass: 10
-
- type: entity
parent: BaseItem
id: CP14DimensitCrystal
diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Materials/quartz.yml b/Resources/Prototypes/_CP14/Entities/Objects/Materials/quartz.yml
new file mode 100644
index 0000000000..598b531aff
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Entities/Objects/Materials/quartz.yml
@@ -0,0 +1,148 @@
+- type: entity
+ parent: BaseItem
+ id: CP14CrystalShardQuartz
+ name: quartz shard
+ description: Natural quartz crystals that can absorb the magical energy of the world around them.
+ categories: [ ForkFiltered ]
+ components:
+ - type: Tag
+ tags:
+ - CP14FitInMortar
+ - type: Item
+ size: Tiny
+ - type: Sprite
+ sprite: _CP14/Structures/Flora/Crystal/crystal_shard.rsi
+ layers:
+ - state: shard0
+ map: ["random"]
+ - type: RandomSprite
+ available:
+ - random:
+ shard0: ""
+ shard1: ""
+ shard2: ""
+ shard3: ""
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - type: PhysicalComposition
+ materialComposition:
+ CP14Glass: 10
+
+# Basic 6
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzEarth
+ name: terra shard
+ suffix: Earth
+ components:
+ - type: Sprite
+ color: "#1cea42"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceEarth
+ Quantity: 5
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzFire
+ name: ignis shard
+ suffix: Fire
+ components:
+ - type: Sprite
+ color: "#d9741c"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceFire
+ Quantity: 5
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzWater
+ name: aqua shard
+ suffix: Water
+ components:
+ - type: Sprite
+ color: "#1c94d9"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceWater
+ Quantity: 5
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzAir
+ name: aer shard
+ suffix: Air
+ components:
+ - type: Sprite
+ color: "#fdfe86"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceAir
+ Quantity: 5
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzOrder
+ name: ordo shard
+ suffix: Order
+ components:
+ - type: Sprite
+ color: "#d9d9d9"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceOrder
+ Quantity: 5
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzChaos
+ name: perditio shard
+ suffix: Chaos
+ components:
+ - type: Sprite
+ color: "#4d4d4d"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceChaos
+ Quantity: 5
+
+# Complex tier 2
+
+- type: entity
+ parent: CP14CrystalShardQuartz
+ id: CP14CrystalShardQuartzMagic
+ name: praecantatio shard
+ suffix: Magic
+ components:
+ - type: Sprite
+ color: "#5497d6"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CP14GroundQuartz
+ Quantity: 5
+ - ReagentId: CP14EssenceMagic
+ Quantity: 5
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Flora/Crystal/elemental.yml b/Resources/Prototypes/_CP14/Entities/Structures/Flora/Crystal/elemental.yml
index c506200501..661e0e4ed9 100644
--- a/Resources/Prototypes/_CP14/Entities/Structures/Flora/Crystal/elemental.yml
+++ b/Resources/Prototypes/_CP14/Entities/Structures/Flora/Crystal/elemental.yml
@@ -95,3 +95,192 @@
- !type:DoActsBehavior
acts: [ "Destruction" ]
+# Basic 6
+
+- type: entity
+ id: CP14CrystalQuartzEarth
+ suffix: Earth
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#1cea42"
+ - type: PointLight
+ color: "#1cea42"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzEarth:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceEarth:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+- type: entity
+ id: CP14CrystalQuartzFire
+ suffix: Fire
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#d9741c"
+ - type: PointLight
+ color: "#d9741c"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzFire:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceFire:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+- type: entity
+ id: CP14CrystalQuartzWater
+ suffix: Water
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#1c94d9"
+ - type: PointLight
+ color: "#1c94d9"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzWater:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceWater:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+- type: entity
+ id: CP14CrystalQuartzAir
+ suffix: Air
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#fdfe86"
+ - type: PointLight
+ color: "#fdfe86"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzAir:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceAir:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+- type: entity
+ id: CP14CrystalQuartzOrder
+ suffix: Order
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#d9d9d9"
+ - type: PointLight
+ color: "#d9d9d9"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzOrder:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceOrder:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+- type: entity
+ id: CP14CrystalQuartzChaos
+ suffix: Chaos
+ parent: CP14CrystalBase
+ components:
+ - type: Sprite
+ color: "#4d4d4d"
+ - type: PointLight
+ color: "#4d4d4d"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14CrystalShardQuartzChaos:
+ min: 1
+ max: 2
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14EssenceChaos:
+ min: 3
+ max: 5
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+
+# Complex tier 1
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
deleted file mode 100644
index bbc212993a..0000000000
--- a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-- type: entity
- parent:
- - BaseStructure
- id: CP14ResearchTable
- categories: [ ForkFiltered ]
- name: research table
- description: A place of research, experimentation and discovery that allows you to be smarter.
- components:
- - type: Sprite
- snapCardinals: true
- sprite: _CP14/Structures/Furniture/workbench.rsi
- state: research_table
- - type: Icon
- sprite: _CP14/Structures/Furniture/workbench.rsi
- state: research_table
- - type: ActivatableUI
- key: enum.CP14ResearchTableUiKey.Key
- requiresComplex: true
- singleUser: true
- - type: Climbable
- - type: Clickable
- - type: CP14ResearchTable
- - type: InteractionOutline
- - type: PlaceableSurface
- - type: UserInterface
- interfaces:
- enum.CP14ResearchTableUiKey.Key:
- type: CP14ResearchTableBoundUserInterface
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Wood
- - type: Destructible
- thresholds:
- - trigger:
- !type:DamageTypeTrigger
- damageType: Heat
- damage: 40
- behaviors:
- - !type:DoActsBehavior
- acts: ["Destruction"]
- - !type:PlaySoundBehavior
- sound:
- collection: WoodDestroy
- - trigger:
- !type:DamageTrigger
- damage: 60
- behaviors:
- - !type:DoActsBehavior
- acts: ["Destruction"]
- - !type:PlaySoundBehavior
- sound:
- collection: WoodDestroy
- - !type:SpawnEntitiesBehavior
- spawn:
- CP14WoodenPlanks1:
- min: 1
- max: 2
-
diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/workbenchs.yml b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/workbenchs.yml
index 8955e20412..46b34b6147 100644
--- a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/workbenchs.yml
+++ b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/workbenchs.yml
@@ -21,7 +21,6 @@
- type: CP14Workbench
craftSpeed: 1
- type: InteractionOutline
- - type: PlaceableSurface
- type: UserInterface
interfaces:
enum.CP14WorkbenchUiKey.Key:
@@ -55,6 +54,31 @@
CP14WoodenPlanks1:
min: 1
max: 2
+ - type: PlaceableSurface
+ - type: ItemPlacer
+ maxEntities: 0
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.45,-0.45,0.45,0.45"
+ density: 55
+ mask: # tables should collide with other tables
+ - TableMask
+ layer:
+ - TableLayer
+ fix2:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.4,-0.4,0.4,0.4"
+ mask:
+ - TabletopMachineMask
+ layer:
+ - Impassable
+ - MidImpassable
+ - LowImpassable
+ hard: false
- type: entity
parent:
diff --git a/Resources/Prototypes/_CP14/Procedural/Demiplane/Modifiers/Reward/crystals.yml b/Resources/Prototypes/_CP14/Procedural/Demiplane/Modifiers/Reward/crystals.yml
index 0d29479bda..65d7fc1c01 100644
--- a/Resources/Prototypes/_CP14/Procedural/Demiplane/Modifiers/Reward/crystals.yml
+++ b/Resources/Prototypes/_CP14/Procedural/Demiplane/Modifiers/Reward/crystals.yml
@@ -2,7 +2,7 @@
id: Quartz
levels:
min: 1
- max: 8
+ max: 10
categories:
Reward: 0.15
layers:
@@ -15,3 +15,118 @@
minGroupSize: 1
maxGroupSize: 5
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzEarth
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ requiredTags:
+ - CP14DemiplaneUnderground
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzEarth
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
+
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzFire
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ requiredTags:
+ - CP14DemiplaneHot
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzFire
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
+
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzWater
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ requiredTags:
+ - CP14DemiplaneWater
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzWater
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
+
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzAir
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ requiredTags:
+ - CP14DemiplaneOpenSky
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzAir
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
+
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzOrder
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzOrder
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
+
+- type: cp14DemiplaneModifier
+ id: CP14CrystalQuartzChaos
+ levels:
+ min: 1
+ max: 10
+ generationWeight: 0.1
+ categories:
+ Reward: 0.15
+ layers:
+ - !type:CP14OreDunGen
+ tileMask:
+ - CP14FloorBase
+ - CP14FloorIce
+ entity: CP14CrystalQuartzChaos
+ count: 15
+ minGroupSize: 1
+ maxGroupSize: 2
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
index 1499026d55..8db4380782 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
@@ -3,10 +3,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14WoodenPlanks
count: 2
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -33,10 +31,9 @@
id: CP14PlatePie
tag: CP14RecipeAnvil
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar # Physical Composition in item
count: 1
@@ -47,11 +44,10 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - IronMelting
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- - IronMelting
- !type:StackResource
stack: CP14CopperBar # Physical Composition in item
count: 2
@@ -65,10 +61,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -79,10 +74,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 4
@@ -93,10 +87,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -107,10 +100,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -122,10 +114,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -137,10 +128,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -152,10 +142,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -167,10 +156,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -182,10 +170,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -197,10 +184,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -212,10 +198,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 1
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -227,10 +212,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -241,10 +225,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -255,11 +238,10 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- - IronMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -276,10 +258,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 5
@@ -293,10 +274,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -307,10 +287,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 3
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -321,10 +300,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 3
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -335,10 +313,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 3
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -349,10 +326,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 3
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -363,10 +339,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -377,10 +352,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -391,10 +365,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -405,10 +378,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -419,10 +391,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -433,10 +404,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:ProtoIdResource
protoId: CP14CrystalShardQuartz
count: 1
@@ -449,10 +419,9 @@
id: CP14Fork
tag: CP14RecipeAnvil
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -463,10 +432,9 @@
id: CP14Spoon
tag: CP14RecipeAnvil
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -477,10 +445,9 @@
id: CP14SteelGobletCopper
tag: CP14RecipeAnvil
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -490,10 +457,9 @@
id: CP14SteelGobletIron
tag: CP14RecipeAnvil
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -503,10 +469,9 @@
id: CP14SteelGobletGold
tag: CP14RecipeAnvil
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
index c30715399e..6f720a9cac 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
index d01bb3918c..bc44977c5b 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -122,10 +114,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -136,10 +127,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -150,10 +140,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -164,10 +153,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -180,10 +168,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -194,10 +181,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -208,10 +194,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -222,10 +207,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -238,10 +222,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -252,10 +235,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -266,10 +248,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -280,10 +261,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -296,10 +276,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -310,10 +289,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -325,10 +303,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -339,10 +316,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -355,10 +331,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -369,10 +344,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -383,10 +357,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -397,10 +370,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -413,10 +385,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -427,10 +398,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -441,10 +411,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -455,10 +424,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -471,10 +439,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -485,10 +452,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -499,10 +465,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -513,10 +478,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -529,10 +493,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -543,10 +506,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -557,10 +519,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -571,10 +532,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -587,10 +547,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -601,10 +560,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -615,10 +573,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -629,10 +586,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -645,10 +601,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -659,10 +614,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -673,10 +627,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -687,10 +640,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -703,10 +655,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -717,10 +668,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -731,10 +681,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -745,10 +694,9 @@
tag: CP14RecipeAnvil
category: Tools
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -761,10 +709,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -775,10 +722,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -789,10 +735,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -803,10 +748,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
index 228c4e4170..01c7094f65 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 5
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 5
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 5
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 5
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 6
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 6
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 6
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 6
@@ -122,10 +114,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 8
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 4
@@ -136,10 +127,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 8
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 4
@@ -150,10 +140,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 8
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 4
@@ -164,10 +153,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 8
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 4
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
index 3586ba0390..7310732704 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
index bb97249bf2..aaf7e16700 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
@@ -5,10 +5,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -19,10 +18,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -33,10 +31,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -47,10 +44,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -63,10 +59,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -77,10 +72,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -91,10 +85,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -105,10 +98,9 @@
tag: CP14RecipeAnvil
category: Weapon
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
index 5f4f26a94f..7ccbb62241 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
index 8dd4d3f084..82454715bc 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
index ebdf4506c0..153701c7cf 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -21,10 +20,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 2
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -36,10 +34,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -51,10 +48,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 2
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
index 825845fdc4..175e85a37b 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
@@ -6,10 +6,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -20,10 +19,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -34,10 +32,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -48,10 +45,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -64,10 +60,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -78,10 +73,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -92,10 +86,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -106,10 +99,9 @@
tag: CP14RecipeAnvil
category: Armor
craftTime: 6
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
index bb62f88f92..f75a969415 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
@@ -2,10 +2,9 @@
id: CP14CopperBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ requiredSkills:
+ - CopperMelting
requirements:
- - !type:SkillRequired
- skills:
- - CopperMelting
- !type:MaterialResource
material: CP14Copper
count: 10
@@ -15,10 +14,9 @@
id: CP14IronBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ requiredSkills:
+ - IronMelting
requirements:
- - !type:SkillRequired
- skills:
- - IronMelting
- !type:MaterialResource
material: CP14Iron
count: 10
@@ -28,10 +26,9 @@
id: CP14GoldBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ requiredSkills:
+ - GoldMelting
requirements:
- - !type:SkillRequired
- skills:
- - GoldMelting
- !type:MaterialResource
material: CP14Gold
count: 10
@@ -41,10 +38,9 @@
id: CP14MithrilBar1
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ requiredSkills:
+ - MithrilMelting
requirements:
- - !type:SkillRequired
- skills:
- - MithrilMelting
- !type:MaterialResource
material: CP14Mithril
count: 10
@@ -54,10 +50,9 @@
id: CP14GlassSheet1
tag: CP14RecipeMeltingFurnace
craftTime: 2
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:ProtoIdResource
protoId: CP14CrystalShardQuartz
count: 1
@@ -67,10 +62,9 @@
id: CP14GlassSheetShard1
tag: CP14RecipeMeltingFurnace
craftTime: 2
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:ProtoIdResource
protoId: CP14GlassShard
count: 2
@@ -80,10 +74,9 @@
id: CP14VialTiny
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 1
@@ -93,10 +86,9 @@
id: CP14VialTinyReinforced
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -109,10 +101,9 @@
id: CP14VialSmall
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 2
@@ -122,10 +113,9 @@
id: CP14VialSmallReinforced
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -138,10 +128,9 @@
id: CP14VialMedium
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 4
@@ -151,10 +140,9 @@
id: CP14VialMediumReinforced
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -167,10 +155,9 @@
id: CP14VialStar
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 2
@@ -180,10 +167,9 @@
id: CP14VialStarReinforced
tag: CP14RecipeMeltingFurnace
craftTime: 3
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -196,10 +182,9 @@
id: CP14BaseAlchemyBomb
tag: CP14RecipeMeltingFurnace
craftTime: 4
+ requiredSkills:
+ - GlassMelting
requirements:
- - !type:SkillRequired
- skills:
- - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 9