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