Compare commits
17 Commits
ed-13-01-2
...
workbench-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca23fddd8a | ||
|
|
50c502f598 | ||
|
|
0783eb1380 | ||
|
|
5af56d4655 | ||
|
|
6e77b82da7 | ||
|
|
02cfcd620c | ||
|
|
e6097da7cc | ||
|
|
925738afc2 | ||
|
|
cf41cabcea | ||
|
|
87d57df0e6 | ||
|
|
51a47eaffc | ||
|
|
c7c5b4dc4c | ||
|
|
2644fe26ea | ||
|
|
732bc267f7 | ||
|
|
ddd61df7b8 | ||
|
|
025753e689 | ||
|
|
368839dd68 |
@@ -0,0 +1,7 @@
|
||||
using Content.Shared._CP14.Knowledge;
|
||||
|
||||
namespace Content.Client._CP14.Knowledge;
|
||||
|
||||
public sealed partial class ClientCP14KnowledgeSystem : SharedCP14KnowledgeSystem
|
||||
{
|
||||
}
|
||||
@@ -41,7 +41,7 @@ public sealed class CP14BasePostProcessOverlay : Overlay
|
||||
if (args.Viewport.Eye != eyeComp.Eye)
|
||||
return false;
|
||||
|
||||
if (!_lightManager.Enabled || !eyeComp.Eye.DrawLight)
|
||||
if (!_lightManager.Enabled || !eyeComp.Eye.DrawLight || !eyeComp.Eye.DrawFov)
|
||||
return false;
|
||||
|
||||
var playerEntity = _playerManager.LocalSession?.AttachedEntity;
|
||||
|
||||
@@ -12,6 +12,9 @@ public sealed class CP14WorkbenchBoundUserInterface : BoundUserInterface
|
||||
{
|
||||
private CP14WorkbenchWindow? _window;
|
||||
|
||||
[ViewVariables]
|
||||
private string _search = string.Empty;
|
||||
|
||||
public CP14WorkbenchBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||
{
|
||||
}
|
||||
@@ -23,6 +26,12 @@ public sealed class CP14WorkbenchBoundUserInterface : BoundUserInterface
|
||||
_window = this.CreateWindow<CP14WorkbenchWindow>();
|
||||
|
||||
_window.OnCraft += entry => SendMessage(new CP14WorkbenchUiCraftMessage(entry.ProtoId));
|
||||
|
||||
_window.OnTextUpdated += search =>
|
||||
{
|
||||
_search = search.Trim().ToLowerInvariant();
|
||||
_window.UpdateFilter(_search);
|
||||
};
|
||||
}
|
||||
|
||||
protected override void UpdateState(BoundUserInterfaceState state)
|
||||
@@ -32,7 +41,7 @@ public sealed class CP14WorkbenchBoundUserInterface : BoundUserInterface
|
||||
switch (state)
|
||||
{
|
||||
case CP14WorkbenchUiRecipesState recipesState:
|
||||
_window?.UpdateRecipes(recipesState);
|
||||
_window?.UpdateRecipes(recipesState, _search);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
<Control xmlns="https://spacestation14.io">
|
||||
<GridContainer Columns="2">
|
||||
<TextureRect Name="View"
|
||||
Margin="0,0,4,0"
|
||||
MinSize="48 48"
|
||||
HorizontalAlignment="Left"
|
||||
Stretch="KeepAspectCentered"/>
|
||||
<Label Name="Name"/>
|
||||
<EntityPrototypeView
|
||||
Name="EntityView"
|
||||
Margin="0,0,4,0"
|
||||
MinSize="48 48"
|
||||
MaxSize="48 48"
|
||||
Scale="2,2"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalExpand="True" />
|
||||
<TextureRect
|
||||
Name="View"
|
||||
Margin="0,0,4,0"
|
||||
MinSize="48 48"
|
||||
MaxSize="48 48"
|
||||
HorizontalAlignment="Left"
|
||||
Stretch="KeepAspectCentered" />
|
||||
<Label Name="Name" />
|
||||
</GridContainer>
|
||||
</Control>
|
||||
|
||||
@@ -31,7 +31,9 @@ public sealed partial class CP14WorkbenchRecipeControl : Control
|
||||
{
|
||||
var entityName = prototype.Name;
|
||||
Name.Text = count <= 1 ? entityName : $"{entityName} x{count}";
|
||||
View.Texture = _sprite.GetPrototypeIcon(prototype).Default;
|
||||
|
||||
View.Visible = false;
|
||||
EntityView.SetPrototype(prototype);
|
||||
}
|
||||
|
||||
public CP14WorkbenchRecipeControl(StackPrototype prototype, int count) : this()
|
||||
@@ -43,6 +45,7 @@ public sealed partial class CP14WorkbenchRecipeControl : Control
|
||||
if (icon is null)
|
||||
return;
|
||||
|
||||
EntityView.Visible = false;
|
||||
View.Texture = _sprite.Frame0(icon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<Control xmlns="https://spacestation14.io">
|
||||
<Button Name="Button">
|
||||
<GridContainer Columns="2">
|
||||
<TextureRect Name="View"
|
||||
Margin="0,0,4,0"
|
||||
MinSize="48 48"
|
||||
HorizontalAlignment="Left"
|
||||
Stretch="KeepAspectCentered"/>
|
||||
<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>
|
||||
</Button>
|
||||
|
||||
@@ -59,6 +59,6 @@ public sealed partial class CP14WorkbenchRequirementControl : Control
|
||||
|
||||
private void UpdateView()
|
||||
{
|
||||
View.Texture = _sprite.GetPrototypeIcon(_recipePrototype.Result).Default;
|
||||
View.SetPrototype(_recipePrototype.Result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,59 +2,68 @@
|
||||
xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Title="{Loc 'cp14-workbench-ui-title'}"
|
||||
MinSize="700 600">
|
||||
<BoxContainer Orientation="Vertical">
|
||||
SetSize="700 500"
|
||||
MinSize="700 300">
|
||||
<BoxContainer Orientation="Horizontal">
|
||||
<!-- Main -->
|
||||
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Horizontal">
|
||||
<GridContainer HorizontalExpand="True" VerticalExpand="True" Columns="2">
|
||||
<!-- Product list (left side UI) -->
|
||||
<BoxContainer SizeFlagsStretchRatio="0.5" HorizontalExpand="True" Orientation="Vertical" Margin="0 0 10 0">
|
||||
<!-- Search Bar -->
|
||||
<LineEdit Name="SearchBar" Margin="4" PlaceHolder="Search" HorizontalExpand="True" />
|
||||
<!-- Crafts container -->
|
||||
<ScrollContainer HorizontalExpand="True" VerticalExpand="True" MinSize="0 200">
|
||||
<BoxContainer Name="CraftsContainer" Orientation="Vertical" HorizontalExpand="True"/>
|
||||
<BoxContainer Name="CraftsContainer" Orientation="Vertical" HorizontalExpand="True" />
|
||||
</ScrollContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<!-- Craft view -->
|
||||
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
|
||||
<PanelContainer HorizontalExpand="True" VerticalExpand="True">
|
||||
<!-- Background -->
|
||||
<PanelContainer.PanelOverride>
|
||||
<graphics:StyleBoxFlat BackgroundColor="#41332f"/>
|
||||
</PanelContainer.PanelOverride>
|
||||
<!-- Craft view (right side UI) -->
|
||||
<BoxContainer SizeFlagsStretchRatio="0.5" Orientation="Vertical" HorizontalExpand="True"
|
||||
VerticalExpand="True">
|
||||
<PanelContainer HorizontalExpand="True" VerticalExpand="True">
|
||||
<!-- Background -->
|
||||
<PanelContainer.PanelOverride>
|
||||
<graphics:StyleBoxFlat BackgroundColor="#41332f" />
|
||||
</PanelContainer.PanelOverride>
|
||||
|
||||
<!-- Content -->
|
||||
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
|
||||
<!-- Item info -->
|
||||
<GridContainer HorizontalExpand="True" Columns="2">
|
||||
<!-- Left panel - icon -->
|
||||
<TextureRect Name="ItemView"
|
||||
<!-- Content -->
|
||||
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
|
||||
<!-- Item info -->
|
||||
<!-- icon -->
|
||||
<EntityPrototypeView Name="ItemView"
|
||||
Scale="2,2"
|
||||
Margin="0,0,4,0"
|
||||
MinSize="64 64"
|
||||
HorizontalAlignment="Left"
|
||||
Stretch="KeepAspectCentered"/>
|
||||
MaxSize="64 64"
|
||||
HorizontalAlignment="Left" />
|
||||
|
||||
<!-- Right panel - name & description -->
|
||||
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
|
||||
<Label Name="ItemName" Text="Name"/>
|
||||
<Label Name="ItemDescription" Text="Description" ClipText="True"/>
|
||||
</BoxContainer>
|
||||
</GridContainer>
|
||||
|
||||
<controls:HLine Color="#404040" Thickness="2" Margin="0 5"/>
|
||||
|
||||
<!-- Required title -->
|
||||
<Label Text="{Loc 'cp14-workbench-recipe-list'}"/>
|
||||
|
||||
<!-- Craft requirements content -->
|
||||
<!-- Added by code -->
|
||||
<BoxContainer Name="ItemRequirements" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True"/>
|
||||
|
||||
<controls:HLine Color="#404040" Thickness="2" Margin="0 5"/>
|
||||
|
||||
<!-- Craft button -->
|
||||
<Button Name="CraftButton" Text="{Loc 'cp14-workbench-craft'}"/>
|
||||
<!-- 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>
|
||||
</PanelContainer>
|
||||
</BoxContainer>
|
||||
</GridContainer>
|
||||
|
||||
<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>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</DefaultWindow>
|
||||
|
||||
@@ -19,19 +19,22 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
|
||||
[Dependency] private readonly IEntityManager _entity = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
|
||||
private CP14WorkbenchUiRecipesState? _cachedState;
|
||||
|
||||
public event Action<CP14WorkbenchUiRecipesEntry>? OnCraft;
|
||||
public event Action<string>? OnTextUpdated;
|
||||
|
||||
private readonly SpriteSystem _sprite;
|
||||
|
||||
private CP14WorkbenchUiRecipesEntry? _selectedEntry ;
|
||||
private CP14WorkbenchUiRecipesEntry? _selectedEntry;
|
||||
|
||||
public CP14WorkbenchWindow()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
_sprite = _entity.System<SpriteSystem>();
|
||||
|
||||
SearchBar.OnTextChanged += _ =>
|
||||
{
|
||||
OnTextUpdated?.Invoke(SearchBar.Text);
|
||||
};
|
||||
CraftButton.OnPressed += _ =>
|
||||
{
|
||||
if (_selectedEntry is null)
|
||||
@@ -41,13 +44,34 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
|
||||
};
|
||||
}
|
||||
|
||||
public void UpdateRecipes(CP14WorkbenchUiRecipesState recipesState)
|
||||
public void UpdateFilter(string? search)
|
||||
{
|
||||
if (_cachedState is null)
|
||||
return;
|
||||
|
||||
UpdateRecipes(_cachedState, search);
|
||||
}
|
||||
|
||||
public void UpdateRecipes(CP14WorkbenchUiRecipesState recipesState, string? search = null)
|
||||
{
|
||||
_cachedState = recipesState;
|
||||
CraftsContainer.RemoveAllChildren();
|
||||
|
||||
List<CP14WorkbenchUiRecipesEntry> uncraftableList = new();
|
||||
foreach (var entry in recipesState.Recipes)
|
||||
{
|
||||
if (search is not null && search != "")
|
||||
{
|
||||
if (!_prototype.TryIndex(entry.ProtoId, out var indexedEntry))
|
||||
continue;
|
||||
|
||||
if (!_prototype.TryIndex(indexedEntry.Result, out var indexedResult))
|
||||
continue;
|
||||
|
||||
if (!indexedResult.Name.Contains(search))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry.Craftable)
|
||||
{
|
||||
var control = new CP14WorkbenchRequirementControl(entry);
|
||||
@@ -89,7 +113,7 @@ public sealed partial class CP14WorkbenchWindow : DefaultWindow
|
||||
|
||||
var result = _prototype.Index(recipe.Result);
|
||||
|
||||
ItemView.Texture = _sprite.GetPrototypeIcon(recipe.Result).Default;
|
||||
ItemView.SetPrototype(recipe.Result);
|
||||
ItemName.Text = result.Name;
|
||||
ItemDescription.Text = result.Description;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared._CP14.Farming;
|
||||
using Content.Shared._CP14.Skills;
|
||||
using Content.Shared._CP14.Knowledge;
|
||||
using Content.Shared.Chemistry;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Content.Shared.Chemistry.Components.SolutionManager;
|
||||
@@ -35,8 +35,6 @@ public sealed class InjectorSystem : SharedInjectorSystem
|
||||
|
||||
private bool TryUseInjector(Entity<InjectorComponent> injector, EntityUid target, EntityUid user)
|
||||
{
|
||||
RaiseLocalEvent(injector, new CP14TrySkillIssueEvent(user)); //CP14 Skill issue event
|
||||
|
||||
var isOpenOrIgnored = injector.Comp.IgnoreClosed || !_openable.IsClosed(target);
|
||||
// Handle injecting/drawing for solutions
|
||||
if (injector.Comp.ToggleState == InjectorToggleMode.Inject)
|
||||
|
||||
@@ -241,14 +241,20 @@ public sealed partial class CP14DemiplaneSystem
|
||||
//Tier filter
|
||||
if (passed)
|
||||
{
|
||||
var innerPassed = false;
|
||||
foreach (var tier in modifier.Tiers)
|
||||
{
|
||||
if (!generator.Comp.TiersContent.ContainsKey(tier))
|
||||
if (generator.Comp.TiersContent.ContainsKey(tier))
|
||||
{
|
||||
passed = false;
|
||||
innerPassed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!innerPassed)
|
||||
{
|
||||
passed = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Tier weight filter
|
||||
@@ -257,7 +263,8 @@ public sealed partial class CP14DemiplaneSystem
|
||||
var maxProb = 0f;
|
||||
foreach (var tier in modifier.Tiers)
|
||||
{
|
||||
maxProb = Math.Max(maxProb, generator.Comp.TiersContent[tier]);
|
||||
if (generator.Comp.TiersContent.ContainsKey(tier))
|
||||
maxProb = Math.Max(maxProb, generator.Comp.TiersContent[tier]);
|
||||
}
|
||||
|
||||
if (!_random.Prob(maxProb))
|
||||
|
||||
27
Content.Server/_CP14/Knowledge/CP14AddKnowledgeSpecial.cs
Normal file
27
Content.Server/_CP14/Knowledge/CP14AddKnowledgeSpecial.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Content.Shared._CP14.Knowledge;
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Content.Shared.Roles;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.Knowledge;
|
||||
|
||||
/// <summary>
|
||||
/// a component that can be hung on an entity to immediately teach it some skills
|
||||
/// </summary>
|
||||
[UsedImplicitly]
|
||||
public sealed partial class CP14AddKnowledgeSpecial : JobSpecial
|
||||
{
|
||||
[DataField(required: true), ViewVariables(VVAccess.ReadOnly)]
|
||||
public List<ProtoId<CP14KnowledgePrototype>> Knowledge = new();
|
||||
|
||||
public override void AfterEquip(EntityUid mob)
|
||||
{
|
||||
var entMan = IoCManager.Resolve<IEntityManager>();
|
||||
var knowledgeSystem = entMan.System<CP14KnowledgeSystem>();
|
||||
foreach (var knowledge in Knowledge)
|
||||
{
|
||||
knowledgeSystem.TryLearnKnowledge(mob, knowledge, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
254
Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs
Normal file
254
Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs
Normal file
@@ -0,0 +1,254 @@
|
||||
using System.Text;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Mind;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared._CP14.Knowledge;
|
||||
using Content.Shared._CP14.Knowledge.Components;
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.Administration.Managers;
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.Knowledge;
|
||||
|
||||
public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem
|
||||
{
|
||||
[Dependency] private readonly ISharedAdminManager _admin = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageable = default!;
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly IChatManager _chat = default!;
|
||||
[Dependency] private readonly MindSystem _mind = default!;
|
||||
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
|
||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14AutoAddKnowledgeComponent, MapInitEvent>(AutoAddSkill);
|
||||
SubscribeLocalEvent<CP14KnowledgeStorageComponent, GetVerbsEvent<Verb>>(AddKnowledgeAdminVerb);
|
||||
SubscribeLocalEvent<CP14KnowledgeLearningSourceComponent, GetVerbsEvent<Verb>>(AddKnowledgeLearningVerb);
|
||||
SubscribeLocalEvent<CP14KnowledgeStorageComponent, CP14KnowledgeLearnDoAfterEvent>(KnowledgeLearnedEvent);
|
||||
}
|
||||
|
||||
private void KnowledgeLearnedEvent(Entity<CP14KnowledgeStorageComponent> ent, ref CP14KnowledgeLearnDoAfterEvent args)
|
||||
{
|
||||
if (args.Cancelled || args.Handled)
|
||||
return;
|
||||
|
||||
args.Handled = true;
|
||||
|
||||
TryLearnKnowledge(ent, args.Knowledge);
|
||||
}
|
||||
|
||||
private void AddKnowledgeLearningVerb(Entity<CP14KnowledgeLearningSourceComponent> ent, ref GetVerbsEvent<Verb> args)
|
||||
{
|
||||
var user = args.User;
|
||||
foreach (var knowledge in ent.Comp.Knowledges)
|
||||
{
|
||||
if (!_proto.TryIndex(knowledge, out var indexedKnowledge))
|
||||
continue;
|
||||
|
||||
args.Verbs.Add(new Verb()
|
||||
{
|
||||
Text = $"{Loc.GetString(indexedKnowledge.Name)}",
|
||||
Message = Loc.GetString(indexedKnowledge.Desc),
|
||||
Category = VerbCategory.CP14KnowledgeLearn,
|
||||
Act = () =>
|
||||
{
|
||||
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
|
||||
user,
|
||||
ent.Comp.DoAfter,
|
||||
new CP14KnowledgeLearnDoAfterEvent() {Knowledge = knowledge},
|
||||
user,
|
||||
ent,
|
||||
ent)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnMove = true,
|
||||
});
|
||||
},
|
||||
Disabled = HasKnowledge(user, knowledge),
|
||||
Impact = LogImpact.Medium,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void AddKnowledgeAdminVerb(Entity<CP14KnowledgeStorageComponent> ent, ref GetVerbsEvent<Verb> args)
|
||||
{
|
||||
if (!_admin.HasAdminFlag(args.User, AdminFlags.Admin))
|
||||
return;
|
||||
|
||||
//Remove knowledge
|
||||
foreach (var knowledge in ent.Comp.Knowledges)
|
||||
{
|
||||
if (!_proto.TryIndex(knowledge, out var indexedKnowledge))
|
||||
continue;
|
||||
|
||||
args.Verbs.Add(new Verb()
|
||||
{
|
||||
Text = $"{Loc.GetString(indexedKnowledge.Name)}",
|
||||
Message = Loc.GetString(indexedKnowledge.Desc),
|
||||
Category = VerbCategory.CP14KnowledgeRemove,
|
||||
Act = () =>
|
||||
{
|
||||
TryForgotKnowledge(ent, knowledge);
|
||||
},
|
||||
Impact = LogImpact.High,
|
||||
});
|
||||
}
|
||||
|
||||
//Add knowledge
|
||||
foreach (var knowledge in _proto.EnumeratePrototypes<CP14KnowledgePrototype>())
|
||||
{
|
||||
if (ent.Comp.Knowledges.Contains(knowledge))
|
||||
continue;
|
||||
|
||||
args.Verbs.Add(new Verb()
|
||||
{
|
||||
Text = $"{Loc.GetString(knowledge.Name)}",
|
||||
Message = Loc.GetString(knowledge.Desc),
|
||||
Category = VerbCategory.CP14KnowledgeAdd,
|
||||
Act = () =>
|
||||
{
|
||||
TryLearnKnowledge(ent, knowledge, false);
|
||||
},
|
||||
Impact = LogImpact.High,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void AutoAddSkill(Entity<CP14AutoAddKnowledgeComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
foreach (var knowledge in ent.Comp.Knowledge)
|
||||
{
|
||||
TryLearnKnowledge(ent, knowledge);
|
||||
}
|
||||
|
||||
RemComp(ent, ent.Comp);
|
||||
}
|
||||
|
||||
public bool TryLearnKnowledge(EntityUid uid, ProtoId<CP14KnowledgePrototype> proto, bool force = false, bool silent = false)
|
||||
{
|
||||
if (!TryComp<CP14KnowledgeStorageComponent>(uid, out var knowledgeStorage))
|
||||
return false;
|
||||
|
||||
if (!_proto.TryIndex(proto, out var indexedKnowledge))
|
||||
return false;
|
||||
|
||||
if (knowledgeStorage.Knowledges.Contains(proto))
|
||||
return false;
|
||||
|
||||
foreach (var dependency in indexedKnowledge.Dependencies)
|
||||
{
|
||||
if (!_proto.TryIndex(dependency, out var indexedDependency))
|
||||
return false;
|
||||
|
||||
if (force)
|
||||
{
|
||||
//If we teach by force - we automatically teach all the basics that are necessary for that skill.
|
||||
if (!TryLearnKnowledge(uid, dependency, true))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var passed = true;
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sb.Append(Loc.GetString("cp14-cant-learn-knowledge-dependencies",
|
||||
("target", Loc.GetString(indexedKnowledge.Desc))));
|
||||
|
||||
//We cant learnt
|
||||
if (!HasKnowledge(uid, dependency))
|
||||
{
|
||||
passed = false;
|
||||
sb.Append("\n- " + Loc.GetString(indexedDependency.Desc));
|
||||
}
|
||||
|
||||
if (!passed)
|
||||
{
|
||||
if (!silent && _mind.TryGetMind(uid, out var mind, out var mindComp) && mindComp.Session is not null)
|
||||
{
|
||||
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", sb.ToString()));
|
||||
_chat.ChatMessageToOne(
|
||||
ChatChannel.Server,
|
||||
sb.ToString(),
|
||||
wrappedMessage,
|
||||
default,
|
||||
false,
|
||||
mindComp.Session.Channel);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: coding on a sleepy head is a bad idea. Remove duplicate variables. >:(
|
||||
if (!silent && _mind.TryGetMind(uid, out var mind2, out var mindComp2) && mindComp2.Session is not null)
|
||||
{
|
||||
var message = Loc.GetString("cp14-learned-new-knowledge", ("name", Loc.GetString(indexedKnowledge.Name)));
|
||||
var wrappedMessage2 = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
|
||||
|
||||
_chat.ChatMessageToOne(
|
||||
ChatChannel.Server,
|
||||
message,
|
||||
wrappedMessage2,
|
||||
default,
|
||||
false,
|
||||
mindComp2.Session.Channel);
|
||||
}
|
||||
|
||||
_adminLogger.Add(
|
||||
LogType.Mind,
|
||||
LogImpact.Medium,
|
||||
$"{EntityManager.ToPrettyString(uid):player} learned new knowledge: {Loc.GetString(indexedKnowledge.Name)}");
|
||||
return knowledgeStorage.Knowledges.Add(proto);
|
||||
}
|
||||
|
||||
public bool TryForgotKnowledge(EntityUid uid, ProtoId<CP14KnowledgePrototype> proto, bool silent = false)
|
||||
{
|
||||
if (!TryComp<CP14KnowledgeStorageComponent>(uid, out var knowledgeStorage))
|
||||
return false;
|
||||
|
||||
if (!knowledgeStorage.Knowledges.Contains(proto))
|
||||
return false;
|
||||
|
||||
if (!_proto.TryIndex(proto, out var indexedKnowledge))
|
||||
return false;
|
||||
|
||||
knowledgeStorage.Knowledges.Remove(proto);
|
||||
|
||||
if (_mind.TryGetMind(uid, out var mind, out var mindComp) && mindComp.Session is not null)
|
||||
{
|
||||
if (!silent)
|
||||
{
|
||||
var message = Loc.GetString("cp14-forgot-knowledge", ("name", Loc.GetString(indexedKnowledge.Name)));
|
||||
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
|
||||
|
||||
_chat.ChatMessageToOne(
|
||||
ChatChannel.Server,
|
||||
message,
|
||||
wrappedMessage,
|
||||
default,
|
||||
false,
|
||||
mindComp.Session.Channel);
|
||||
}
|
||||
}
|
||||
|
||||
_adminLogger.Add(
|
||||
LogType.Mind,
|
||||
LogImpact.Medium,
|
||||
$"{EntityManager.ToPrettyString(uid):player} forgot knowledge: {Loc.GetString(indexedKnowledge.Name)}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using Content.Shared._CP14.MagicSpell.Spells;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.MagicSpell;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class CP14AreaEntityEffectComponent : Component
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public float Range = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// How many entities can be subject to EntityEffect? Leave 0 to remove the restriction.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public int MaxTargets = 0;
|
||||
|
||||
[DataField(required: true, serverOnly: true)]
|
||||
public List<CP14SpellEffect> Effects = new();
|
||||
|
||||
[DataField]
|
||||
public EntityWhitelist? Whitelist;
|
||||
}
|
||||
@@ -4,6 +4,9 @@ using Content.Shared._CP14.MagicEnergy.Components;
|
||||
using Content.Shared._CP14.MagicSpell;
|
||||
using Content.Shared._CP14.MagicSpell.Components;
|
||||
using Content.Shared._CP14.MagicSpell.Events;
|
||||
using Content.Shared._CP14.MagicSpell.Spells;
|
||||
using Content.Shared.EntityEffects;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Server.GameObjects;
|
||||
|
||||
namespace Content.Server._CP14.MagicSpell;
|
||||
@@ -13,11 +16,14 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem
|
||||
[Dependency] private readonly ChatSystem _chat = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
[Dependency] private readonly CP14MagicEnergySystem _magicEnergy = default!;
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14AreaEntityEffectComponent, MapInitEvent>(OnAoEMapInit);
|
||||
SubscribeLocalEvent<CP14MagicEffectVerbalAspectComponent, CP14VerbalAspectSpeechEvent>(OnSpellSpoken);
|
||||
|
||||
SubscribeLocalEvent<CP14MagicEffectCastingVisualComponent, CP14StartCastMagicEffectEvent>(OnSpawnMagicVisualEffect);
|
||||
@@ -26,6 +32,28 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem
|
||||
SubscribeLocalEvent<CP14MagicEffectManaCostComponent, CP14MagicEffectConsumeResourceEvent>(OnManaConsume);
|
||||
}
|
||||
|
||||
private void OnAoEMapInit(Entity<CP14AreaEntityEffectComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
var entitiesAround = _lookup.GetEntitiesInRange(ent, ent.Comp.Range, LookupFlags.Uncontained);
|
||||
|
||||
var count = 0;
|
||||
foreach (var entity in entitiesAround)
|
||||
{
|
||||
if (ent.Comp.Whitelist is not null && !_whitelist.IsValid(ent.Comp.Whitelist, entity))
|
||||
continue;
|
||||
|
||||
foreach (var effect in ent.Comp.Effects)
|
||||
{
|
||||
effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(ent, null, entity, Transform(entity).Coordinates));
|
||||
}
|
||||
|
||||
count++;
|
||||
|
||||
if (ent.Comp.MaxTargets > 0 && count >= ent.Comp.MaxTargets)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSpellSpoken(Entity<CP14MagicEffectVerbalAspectComponent> ent, ref CP14VerbalAspectSpeechEvent args)
|
||||
{
|
||||
if (args.Performer is not null && args.Speech is not null)
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
using Content.Server._CP14.Alchemy;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared._CP14.MeleeWeapon.EntitySystems;
|
||||
using Content.Shared._CP14.Skills;
|
||||
using Content.Shared._CP14.Skills.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Throwing;
|
||||
using Content.Shared.Weapons.Melee;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.Skills;
|
||||
|
||||
public sealed partial class CP14SkillSystem : SharedCP14SkillSystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageable = default!;
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly ThrowingSystem _throwing = default!;
|
||||
[Dependency] private readonly SharedHandsSystem _hands = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, ExaminedEvent>(OnExamined);
|
||||
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, GunShotEvent>(OnGunShot);
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, MeleeHitEvent>(OnMeleeHit);
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, CP14TrySkillIssueEvent>(OnSimpleSkillIssue);
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, SharpingEvent>(OnSharpning);
|
||||
SubscribeLocalEvent<CP14SkillRequirementComponent, PestleGrindingEvent>(OnPestleGrinding);
|
||||
}
|
||||
|
||||
private void OnExamined(Entity<CP14SkillRequirementComponent> requirement, ref ExaminedEvent args)
|
||||
{
|
||||
var text = string.Empty;
|
||||
text += "\n" + Loc.GetString("cp14-skill-label") + "\n";
|
||||
var canUse = HasEnoughSkillToUse(args.Examiner, requirement, out var missingSkills);
|
||||
|
||||
text += Loc.GetString(requirement.Comp.NeedAll ? "cp14-skill-examined-need-all" : "cp14-skill-examined", ("item", MetaData(requirement).EntityName)) + "\n";
|
||||
foreach (var skill in requirement.Comp.RequiredSkills)
|
||||
{
|
||||
var name = _proto.Index(skill).Name;
|
||||
if (name == null)
|
||||
continue;
|
||||
|
||||
var color = missingSkills.Contains(skill) ? "#c23030" : "#3fc488";
|
||||
text += Loc.GetString("cp14-skill-examined-skill", ("color", color), ("skill", Loc.GetString(name))) + "\n";
|
||||
|
||||
}
|
||||
args.PushMarkup(text);
|
||||
}
|
||||
|
||||
private void OnPestleGrinding(Entity<CP14SkillRequirementComponent> requirement, ref PestleGrindingEvent args)
|
||||
{
|
||||
if (!_random.Prob(requirement.Comp.FuckupChance))
|
||||
return;
|
||||
|
||||
if (HasEnoughSkillToUse(args.User, requirement, out _))
|
||||
return;
|
||||
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-push", ("item", MetaData(args.Target).EntityName)),
|
||||
args.User,
|
||||
args.User,
|
||||
PopupType.Large);
|
||||
_hands.TryDrop(args.User, args.Target);
|
||||
_throwing.TryThrow(args.Target, _random.NextAngle().ToWorldVec(), 1, args.User);
|
||||
}
|
||||
|
||||
private void OnSharpning(Entity<CP14SkillRequirementComponent> requirement, ref SharpingEvent args)
|
||||
{
|
||||
if (!_random.Prob(requirement.Comp.FuckupChance))
|
||||
return;
|
||||
|
||||
if (HasEnoughSkillToUse(args.User, requirement, out _))
|
||||
return;
|
||||
|
||||
switch (_random.Next(2))
|
||||
{
|
||||
case 0:
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-sharp-weapon-harm", ("item", MetaData(args.Target).EntityName)), args.User, args.User, PopupType.Large);
|
||||
var weaponDamage = new DamageSpecifier();
|
||||
weaponDamage.DamageDict.Add("Blunt", _random.NextFloat(5));
|
||||
_damageable.TryChangeDamage(args.Target, weaponDamage);
|
||||
break;
|
||||
case 1:
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-sharp-self-harm"), args.User, args.User, PopupType.Large);
|
||||
|
||||
var damage = new DamageSpecifier();
|
||||
if (TryComp<MeleeWeaponComponent>(requirement, out var melee))
|
||||
damage = melee.Damage;
|
||||
else
|
||||
damage.DamageDict.Add("Slash", _random.NextFloat(10));
|
||||
|
||||
_damageable.TryChangeDamage(args.User, damage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSimpleSkillIssue(Entity<CP14SkillRequirementComponent> requirement, ref CP14TrySkillIssueEvent args)
|
||||
{
|
||||
if (!_random.Prob(requirement.Comp.FuckupChance))
|
||||
return;
|
||||
|
||||
if (HasEnoughSkillToUse(args.User, requirement, out _))
|
||||
return;
|
||||
|
||||
BasicSkillIssue(args.User, requirement);
|
||||
}
|
||||
|
||||
private void OnMeleeHit(Entity<CP14SkillRequirementComponent> requirement, ref MeleeHitEvent args)
|
||||
{
|
||||
if (!_random.Prob(requirement.Comp.FuckupChance))
|
||||
return;
|
||||
|
||||
if (HasEnoughSkillToUse(args.User, requirement, out _))
|
||||
return;
|
||||
|
||||
switch (_random.Next(2))
|
||||
{
|
||||
case 0:
|
||||
BasicSkillIssue(args.User, requirement);
|
||||
break;
|
||||
case 1:
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-self-harm"), args.User, args.User, PopupType.Large);
|
||||
|
||||
var damage = new DamageSpecifier();
|
||||
if (TryComp<MeleeWeaponComponent>(requirement, out var melee))
|
||||
damage = melee.Damage;
|
||||
else
|
||||
damage.DamageDict.Add("Blunt", _random.NextFloat(10));
|
||||
|
||||
_damageable.TryChangeDamage(args.User, damage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGunShot(Entity<CP14SkillRequirementComponent> requirement, ref GunShotEvent args)
|
||||
{
|
||||
if (!_random.Prob(requirement.Comp.FuckupChance))
|
||||
return;
|
||||
|
||||
if (HasEnoughSkillToUse(args.User, requirement, out _))
|
||||
return;
|
||||
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-recoil"), args.User, args.User, PopupType.Large);
|
||||
_hands.TryDrop(args.User, requirement);
|
||||
_throwing.TryThrow(requirement, _random.NextAngle().ToWorldVec(), _random.NextFloat(5), args.User);
|
||||
|
||||
var damage = new DamageSpecifier();
|
||||
damage.DamageDict.Add("Blunt", _random.NextFloat(10));
|
||||
_damageable.TryChangeDamage(args.User, damage);
|
||||
}
|
||||
|
||||
private void BasicSkillIssue(EntityUid user, EntityUid item, float throwPower = 1)
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("cp14-skill-issue-drops", ("item", MetaData(item).EntityName)), user, user, PopupType.Large);
|
||||
_hands.TryDrop(user, item);
|
||||
_throwing.TryThrow(item, _random.NextAngle().ToWorldVec(), throwPower, user);
|
||||
}
|
||||
}
|
||||
@@ -20,15 +20,23 @@ public sealed partial class CP14WorkbenchSystem
|
||||
StartCraft(entity, args.Actor, prototype);
|
||||
}
|
||||
|
||||
private void UpdateUIRecipes(Entity<CP14WorkbenchComponent> entity)
|
||||
private void UpdateUIRecipes(Entity<CP14WorkbenchComponent> entity, EntityUid user)
|
||||
{
|
||||
var placedEntities = _lookup.GetEntitiesInRange(Transform(entity).Coordinates, entity.Comp.WorkbenchRadius);
|
||||
|
||||
var recipes = new List<CP14WorkbenchUiRecipesEntry>();
|
||||
foreach (var recipeId in entity.Comp.Recipes)
|
||||
{
|
||||
var recipe = _proto.Index(recipeId);
|
||||
var entry = new CP14WorkbenchUiRecipesEntry(recipeId, CanCraftRecipe(recipe, placedEntities));
|
||||
if (!_proto.TryIndex(recipeId, out var indexedRecipe))
|
||||
continue;
|
||||
|
||||
if (indexedRecipe.KnowledgeRequired is not null)
|
||||
{
|
||||
if (!_knowledge.HasKnowledge(user, indexedRecipe.KnowledgeRequired.Value))
|
||||
continue;
|
||||
}
|
||||
|
||||
var entry = new CP14WorkbenchUiRecipesEntry(recipeId, CanCraftRecipe(indexedRecipe, placedEntities, user));
|
||||
|
||||
recipes.Add(entry);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
using Content.Server.DoAfter;
|
||||
using Content.Server.Popups;
|
||||
using Content.Server.Stack;
|
||||
using Content.Shared._CP14.Knowledge;
|
||||
using Content.Shared._CP14.Workbench;
|
||||
using Content.Shared._CP14.Workbench.Prototypes;
|
||||
using Content.Shared.Chemistry.EntitySystems;
|
||||
@@ -29,6 +30,7 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
[Dependency] private readonly UserInterfaceSystem _userInterface = default!;
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedCP14KnowledgeSystem _knowledge = default!;
|
||||
|
||||
private EntityQuery<MetaDataComponent> _metaQuery;
|
||||
private EntityQuery<StackComponent> _stackQuery;
|
||||
@@ -64,10 +66,9 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
|
||||
private void OnBeforeUIOpen(Entity<CP14WorkbenchComponent> ent, ref BeforeActivatableUIOpenEvent args)
|
||||
{
|
||||
UpdateUIRecipes(ent);
|
||||
UpdateUIRecipes(ent, args.User);
|
||||
}
|
||||
|
||||
// TODO: Replace Del to QueueDel when it's will be works with events
|
||||
private void OnCraftFinished(Entity<CP14WorkbenchComponent> ent, ref CP14CraftDoAfterEvent args)
|
||||
{
|
||||
if (args.Cancelled || args.Handled)
|
||||
@@ -78,20 +79,26 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
|
||||
var placedEntities = _lookup.GetEntitiesInRange(Transform(ent).Coordinates, ent.Comp.WorkbenchRadius, LookupFlags.Uncontained);
|
||||
|
||||
if (!CanCraftRecipe(recipe, placedEntities))
|
||||
if (!CanCraftRecipe(recipe, placedEntities, args.User))
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("cp14-workbench-no-resource"), ent, args.User);
|
||||
_popup.PopupEntity(Loc.GetString("cp14-workbench-cant-craft"), ent, args.User);
|
||||
return;
|
||||
}
|
||||
|
||||
var resultEntity = Spawn(_proto.Index(args.Recipe).Result);
|
||||
if (!_proto.TryIndex(args.Recipe, out var indexedRecipe))
|
||||
return;
|
||||
|
||||
if (recipe.KnowledgeRequired is not null)
|
||||
_knowledge.UseKnowledge(args.User, recipe.KnowledgeRequired.Value);
|
||||
|
||||
var resultEntity = Spawn(indexedRecipe.Result);
|
||||
_stack.TryMergeToContacts(resultEntity);
|
||||
|
||||
_solutionContainer.TryGetSolution(resultEntity, recipe.Solution, out var resultSoln, out var resultSolution);
|
||||
if (recipe.TryMergeSolutions && resultSoln is not null)
|
||||
_solutionContainer.TryGetSolution(resultEntity, recipe.Solution, out var resultSolution, out _);
|
||||
if (recipe.TryMergeSolutions && resultSolution is not null)
|
||||
{
|
||||
resultSoln.Value.Comp.Solution.MaxVolume = 0;
|
||||
_solutionContainer.RemoveAllSolution(resultSoln.Value); //If we combine ingredient solutions, we do not use the default solution prescribed in the entity.
|
||||
resultSolution.Value.Comp.Solution.MaxVolume = 0;
|
||||
_solutionContainer.RemoveAllSolution(resultSolution.Value); //If we combine ingredient solutions, we do not use the default solution prescribed in the entity.
|
||||
}
|
||||
|
||||
foreach (var requiredIngredient in recipe.Entities)
|
||||
@@ -99,7 +106,8 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
var requiredCount = requiredIngredient.Value;
|
||||
foreach (var placedEntity in placedEntities)
|
||||
{
|
||||
if (!TryComp<MetaDataComponent>(placedEntity, out var metaData) || metaData.EntityPrototype is null)
|
||||
var metaData = MetaData(placedEntity);
|
||||
if (metaData.EntityPrototype is null)
|
||||
continue;
|
||||
|
||||
var placedProto = metaData.EntityPrototype.ID;
|
||||
@@ -107,11 +115,11 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
{
|
||||
// Trying merge solutions
|
||||
if (recipe.TryMergeSolutions
|
||||
&& resultSoln is not null
|
||||
&& resultSolution is not null
|
||||
&& _solutionContainer.TryGetSolution(placedEntity, recipe.Solution, out var ingredientSoln, out var ingredientSolution))
|
||||
{
|
||||
resultSoln.Value.Comp.Solution.MaxVolume += ingredientSoln.Value.Comp.Solution.MaxVolume;
|
||||
_solutionContainer.TryAddSolution(resultSoln.Value, ingredientSolution);
|
||||
resultSolution.Value.Comp.Solution.MaxVolume += ingredientSoln.Value.Comp.Solution.MaxVolume;
|
||||
_solutionContainer.TryAddSolution(resultSolution.Value, ingredientSolution);
|
||||
}
|
||||
|
||||
requiredCount--;
|
||||
@@ -142,7 +150,7 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
}
|
||||
}
|
||||
_transform.SetCoordinates(resultEntity, Transform(ent).Coordinates);
|
||||
UpdateUIRecipes(ent);
|
||||
UpdateUIRecipes(ent, args.User);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
@@ -169,8 +177,13 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
_audio.PlayPvs(recipe.OverrideCraftSound ?? workbench.Comp.CraftSound, workbench);
|
||||
}
|
||||
|
||||
private bool CanCraftRecipe(CP14WorkbenchRecipePrototype recipe, HashSet<EntityUid> entities)
|
||||
private bool CanCraftRecipe(CP14WorkbenchRecipePrototype recipe, HashSet<EntityUid> entities, EntityUid user)
|
||||
{
|
||||
//Knowledge check
|
||||
if (recipe.KnowledgeRequired is not null && !_knowledge.HasKnowledge(user, recipe.KnowledgeRequired.Value))
|
||||
return false;
|
||||
|
||||
//Ingredients check
|
||||
var indexedIngredients = IndexIngredients(entities);
|
||||
foreach (var requiredIngredient in recipe.Entities)
|
||||
{
|
||||
@@ -199,25 +212,6 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
|
||||
return true;
|
||||
}
|
||||
|
||||
private string GetCraftRecipeMessage(string desc, CP14WorkbenchRecipePrototype recipe)
|
||||
{
|
||||
var result = desc + "\n \n" + Loc.GetString("cp14-workbench-recipe-list")+ "\n";
|
||||
|
||||
foreach (var pair in recipe.Entities)
|
||||
{
|
||||
var proto = _proto.Index(pair.Key);
|
||||
result += $"{proto.Name} x{pair.Value}\n";
|
||||
}
|
||||
|
||||
foreach (var pair in recipe.Stacks)
|
||||
{
|
||||
var proto = _proto.Index(pair.Key);
|
||||
result += $"{proto.Name} x{pair.Value}\n";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Dictionary<EntProtoId, int> IndexIngredients(HashSet<EntityUid> ingredients)
|
||||
{
|
||||
var indexedIngredients = new Dictionary<EntProtoId, int>();
|
||||
|
||||
@@ -95,5 +95,11 @@ namespace Content.Shared.Verbs
|
||||
public static readonly VerbCategory CP14RitualBook = new("cp14-verb-categories-ritual-book", null); //CP14
|
||||
|
||||
public static readonly VerbCategory CP14CurrencyConvert = new("cp14-verb-categories-currency-converter", null); //CP14
|
||||
|
||||
public static readonly VerbCategory CP14KnowledgeAdd = new("cp14-verb-categories-knowledge-add", null); //CP14
|
||||
|
||||
public static readonly VerbCategory CP14KnowledgeRemove = new("cp14-verb-categories-knowledge-remove", null); //CP14
|
||||
|
||||
public static readonly VerbCategory CP14KnowledgeLearn = new("cp14-verb-categories-knowledge-learn", null); //CP14
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge.Components;
|
||||
|
||||
/// <summary>
|
||||
/// The ability to add a skill to an entity and quickly teach it some skills
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))]
|
||||
public sealed partial class CP14AutoAddKnowledgeComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public List<ProtoId<CP14KnowledgePrototype>> Knowledge = new();
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Allows new knowledge to be learnt through interactions with an object.
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))]
|
||||
public sealed partial class CP14KnowledgeLearningSourceComponent : Component
|
||||
{
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public HashSet<ProtoId<CP14KnowledgePrototype>> Knowledges { get; private set; } = new();
|
||||
|
||||
[DataField]
|
||||
public TimeSpan DoAfter = TimeSpan.FromSeconds(5f);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge.Components;
|
||||
|
||||
/// <summary>
|
||||
/// automatically generates content for PaperComponent, based on the knowledge that can be learnt from this object
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))]
|
||||
public sealed partial class CP14KnowledgePaperTextComponent : Component
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge.Components;
|
||||
|
||||
/// <summary>
|
||||
/// a list of skills learned by this entity
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))]
|
||||
public sealed partial class CP14KnowledgeStorageComponent : Component
|
||||
{
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public HashSet<ProtoId<CP14KnowledgePrototype>> Knowledges { get; private set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge.Prototypes;
|
||||
|
||||
/// <summary>
|
||||
/// Abstract knowledge that may be required to use items or crafts.
|
||||
/// </summary>
|
||||
[Prototype("CP14Knowledge")]
|
||||
public sealed partial class CP14KnowledgePrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField(required: true)]
|
||||
public LocId Name { get; private set; } = default!;
|
||||
|
||||
[DataField]
|
||||
public LocId Desc{ get; private set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// to study this knowledge, other knowledge on which it is based may be necessary.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public HashSet<ProtoId<CP14KnowledgePrototype>> Dependencies = new();
|
||||
}
|
||||
94
Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs
Normal file
94
Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using System.Text;
|
||||
using Content.Shared._CP14.Knowledge.Components;
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.MagicMirror;
|
||||
using Content.Shared.Paper;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._CP14.Knowledge;
|
||||
|
||||
public abstract partial class SharedCP14KnowledgeSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly PaperSystem _paper = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<CP14KnowledgePaperTextComponent, MapInitEvent>(OnPaperMapInit);
|
||||
}
|
||||
|
||||
private void OnPaperMapInit(Entity<CP14KnowledgePaperTextComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
if (!TryComp<PaperComponent>(ent, out var paper))
|
||||
return;
|
||||
if (!TryComp<CP14KnowledgeLearningSourceComponent>(ent, out var knowledge))
|
||||
return;
|
||||
if (knowledge.Knowledges.Count <= 0)
|
||||
return;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sb.Append(Loc.GetString("cp14-knowledge-book-pre-text"));
|
||||
foreach (var k in knowledge.Knowledges)
|
||||
{
|
||||
if (!_proto.TryIndex(k, out var indexedKnowledge))
|
||||
continue;
|
||||
|
||||
sb.Append($"\n{Loc.GetString(indexedKnowledge.Desc)}");
|
||||
}
|
||||
|
||||
sb.Append($"\n\n{Loc.GetString("cp14-knowledge-book-post-text")}");
|
||||
|
||||
_paper.SetContent((ent, paper), sb.ToString());
|
||||
paper.EditingDisabled = true;
|
||||
}
|
||||
|
||||
public bool UseKnowledge(EntityUid uid,
|
||||
ProtoId<CP14KnowledgePrototype> knowledge,
|
||||
float factor = 1f,
|
||||
CP14KnowledgeStorageComponent? knowledgeStorage = null)
|
||||
{
|
||||
if (!Resolve(uid, ref knowledgeStorage, false))
|
||||
return false;
|
||||
|
||||
if (!knowledgeStorage.Knowledges.Contains(knowledge))
|
||||
return false;
|
||||
|
||||
var ev = new CP14KnowledgeUsedEvent(uid, knowledge, factor);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool HasKnowledge(EntityUid uid,
|
||||
ProtoId<CP14KnowledgePrototype> knowledge,
|
||||
CP14KnowledgeStorageComponent? knowledgeStorage = null)
|
||||
{
|
||||
if (!Resolve(uid, ref knowledgeStorage, false))
|
||||
return false;
|
||||
|
||||
return knowledgeStorage.Knowledges.Contains(knowledge);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class CP14KnowledgeUsedEvent : EntityEventArgs
|
||||
{
|
||||
public readonly EntityUid User;
|
||||
public readonly ProtoId<CP14KnowledgePrototype> Knowledge;
|
||||
public readonly float Factor;
|
||||
|
||||
public CP14KnowledgeUsedEvent(EntityUid uid, ProtoId<CP14KnowledgePrototype> knowledge, float factor)
|
||||
{
|
||||
User = uid;
|
||||
Knowledge = knowledge;
|
||||
Factor = factor;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class CP14KnowledgeLearnDoAfterEvent : DoAfterEvent
|
||||
{
|
||||
public ProtoId<CP14KnowledgePrototype> Knowledge;
|
||||
public override DoAfterEvent Clone() => this;
|
||||
}
|
||||
@@ -15,7 +15,7 @@ public sealed partial class CP14MagicEnergyPhotosynthesisComponent : Component
|
||||
|
||||
[DataField]
|
||||
[GuidebookData]
|
||||
public FixedPoint2 DarknessEnergy = -0.25f;
|
||||
public FixedPoint2 DarknessEnergy = 0f;
|
||||
|
||||
/// <summary>
|
||||
/// how often objects will try to change magic energy. In Seconds
|
||||
|
||||
@@ -26,7 +26,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
|
||||
var fromItem = action.Comp.SpellStorage is not null;
|
||||
|
||||
var doAfterEventArgs = new DoAfterArgs(EntityManager, performer, MathF.Max(delayedEffect.CastDelay, 1f), doAfter, action, used: action.Comp.SpellStorage, target: doAfter.Target)
|
||||
var doAfterEventArgs = new DoAfterArgs(EntityManager, performer, MathF.Max(delayedEffect.CastDelay, 1f), doAfter, action, used: action.Comp.SpellStorage)
|
||||
{
|
||||
BreakOnMove = delayedEffect.BreakOnMove,
|
||||
BreakOnDamage = delayedEffect.BreakOnDamage,
|
||||
@@ -56,7 +56,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
_action.CP14StartCustomDelay(action, TimeSpan.FromSeconds(cooldown.Value));
|
||||
}
|
||||
|
||||
private void UseDelayedAction(ICP14DelayedMagicEffect delayedEffect, Entity<CP14MagicEffectComponent> action, DoAfterEvent doAfter, EntityUid performer)
|
||||
private void UseDelayedAction(ICP14DelayedMagicEffect delayedEffect, Entity<CP14MagicEffectComponent> action, DoAfterEvent doAfter, EntityUid performer, EntityUid? target = null, EntityCoordinates? worldTarget = null)
|
||||
{
|
||||
if (!CanCastSpell(action, performer))
|
||||
return;
|
||||
@@ -71,7 +71,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
RaiseLocalEvent(action, ref evStart);
|
||||
|
||||
var spellArgs =
|
||||
new CP14SpellEffectBaseArgs(performer, action.Comp.SpellStorage, performer, Transform(performer).Coordinates);
|
||||
new CP14SpellEffectBaseArgs(performer, action.Comp.SpellStorage, target, worldTarget);
|
||||
|
||||
CastTelegraphy(action, spellArgs);
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
return;
|
||||
|
||||
var doAfter = new CP14DelayedInstantActionDoAfterEvent(args.Cooldown);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Performer);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
@@ -116,7 +116,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
EntityManager.GetNetCoordinates(args.Coords),
|
||||
EntityManager.GetNetEntity(args.Entity),
|
||||
args.Cooldown);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Entity, args.Coords);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
@@ -136,7 +136,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
return;
|
||||
|
||||
var doAfter = new CP14DelayedEntityTargetActionDoAfterEvent(EntityManager.GetNetEntity(args.Target), args.Cooldown);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer);
|
||||
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Target);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public abstract partial class CP14SharedMagicSystem
|
||||
|
||||
var fromItem = action.Comp.SpellStorage is not null;
|
||||
|
||||
var doAfterEventArgs = new DoAfterArgs(EntityManager, performer, toggleable.CastTime, doAfter, action, used: action.Comp.SpellStorage, target: entityTarget)
|
||||
var doAfterEventArgs = new DoAfterArgs(EntityManager, performer, toggleable.CastTime, doAfter, action, used: action.Comp.SpellStorage)
|
||||
{
|
||||
BreakOnMove = toggleable.BreakOnMove,
|
||||
BreakOnDamage = toggleable.BreakOnDamage,
|
||||
|
||||
@@ -13,7 +13,7 @@ public sealed partial class CP14SpellConsumeManaEffect : CP14SpellEffect
|
||||
public bool Safe = false;
|
||||
|
||||
[DataField]
|
||||
public float LossMultiplier = 0.8f;
|
||||
public float LossMultiplier = 1.0f;
|
||||
|
||||
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
|
||||
{
|
||||
|
||||
@@ -42,6 +42,9 @@ public sealed partial class CP14SpellStorageSystem
|
||||
|
||||
private void OnClothingAddedAttune(Entity<CP14SpellStorageAccessWearingComponent> ent, ref AddedAttuneToMindEvent args)
|
||||
{
|
||||
if (!ent.Comp.Wearing)
|
||||
return;
|
||||
|
||||
if (!TryComp<CP14SpellStorageComponent>(ent, out var spellStorage))
|
||||
return;
|
||||
|
||||
@@ -51,7 +54,7 @@ public sealed partial class CP14SpellStorageSystem
|
||||
if (!TryComp<ClothingComponent>(ent, out var clothing))
|
||||
return;
|
||||
|
||||
if (clothing.InSlot is null || Transform(ent).ParentUid != args.User)
|
||||
if (Transform(ent).ParentUid != args.User)
|
||||
return;
|
||||
|
||||
TryGrantAccess((ent, spellStorage), args.User.Value);
|
||||
@@ -59,6 +62,8 @@ public sealed partial class CP14SpellStorageSystem
|
||||
|
||||
private void OnClothingEquipped(Entity<CP14SpellStorageAccessWearingComponent> ent, ref ClothingGotEquippedEvent args)
|
||||
{
|
||||
ent.Comp.Wearing = true;
|
||||
|
||||
if (!TryComp<CP14SpellStorageComponent>(ent, out var spellStorage))
|
||||
return;
|
||||
|
||||
@@ -67,7 +72,8 @@ public sealed partial class CP14SpellStorageSystem
|
||||
|
||||
private void OnClothingUnequipped(Entity<CP14SpellStorageAccessWearingComponent> ent, ref ClothingGotUnequippedEvent args)
|
||||
{
|
||||
ent.Comp.Wearing = false;
|
||||
|
||||
_actions.RemoveProvidedActions(args.Wearer, ent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,4 +6,6 @@ namespace Content.Shared._CP14.MagicSpellStorage.Components;
|
||||
[RegisterComponent, Access(typeof(CP14SpellStorageSystem))]
|
||||
public sealed partial class CP14SpellStorageAccessWearingComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public bool Wearing;
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
using Content.Shared._CP14.Skills.Prototypes;
|
||||
using Content.Shared.Roles;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Skills.Components;
|
||||
|
||||
/// <summary>
|
||||
/// a component that can be hung on an entity to immediately teach it some skills
|
||||
/// </summary>
|
||||
[UsedImplicitly]
|
||||
public sealed partial class CP14AddSkillSpecial : JobSpecial
|
||||
{
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public List<ProtoId<CP14SkillPrototype>> Skills = new();
|
||||
|
||||
public override void AfterEquip(EntityUid mob)
|
||||
{
|
||||
var entMan = IoCManager.Resolve<IEntityManager>();
|
||||
var skillSystem = entMan.System<SharedCP14SkillSystem>();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
skillSystem.TryLearnSkill(mob, skill);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using Content.Shared._CP14.Skills.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Skills.Components;
|
||||
|
||||
/// <summary>
|
||||
/// The ability to add a skill to an entity and quickly teach it some skills
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14SkillSystem))]
|
||||
public sealed partial class CP14AutoAddSkillComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public List<ProtoId<CP14SkillPrototype>> Skills = new();
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
using Content.Shared._CP14.Skills.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Skills.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Limits the use of this entity behind certain skills
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14SkillSystem))]
|
||||
public sealed partial class CP14SkillRequirementComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Is it necessary to have ALL the skills on the list to be able to use this entity?
|
||||
/// If not, one of any skill will suffice
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool NeedAll = false;
|
||||
|
||||
/// <summary>
|
||||
/// the chances of something going wrong when using wihout skill
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float FuckupChance = 0.5f;
|
||||
|
||||
[DataField(required: true)]
|
||||
public List<ProtoId<CP14SkillPrototype>> RequiredSkills = new();
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using Content.Shared._CP14.Skills.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Skills.Components;
|
||||
|
||||
/// <summary>
|
||||
/// a list of skills learned by this entity
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedCP14SkillSystem))]
|
||||
public sealed partial class CP14SkillsStorageComponent : Component
|
||||
{
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public List<ProtoId<CP14SkillPrototype>> Skills { get; private set; }= new();
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Skills.Prototypes;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[Prototype("CP14Skill")]
|
||||
public sealed partial class CP14SkillPrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField(required: true)]
|
||||
public LocId? Name{ get; private set; }
|
||||
|
||||
[DataField]
|
||||
public LocId? Desc{ get; private set; }
|
||||
|
||||
[DataField]
|
||||
public ComponentRegistry Components = new();
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
using Content.Shared._CP14.Skills.Components;
|
||||
using Content.Shared._CP14.Skills.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Shared._CP14.Skills;
|
||||
|
||||
public partial class SharedCP14SkillSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<CP14SkillsStorageComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<CP14AutoAddSkillComponent, MapInitEvent>(AutoAddSkill);
|
||||
}
|
||||
|
||||
private void AutoAddSkill(Entity<CP14AutoAddSkillComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
foreach (var skill in ent.Comp.Skills)
|
||||
{
|
||||
TryLearnSkill(ent, skill);
|
||||
}
|
||||
|
||||
RemComp(ent, ent.Comp);
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<CP14SkillsStorageComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
foreach (var skill in ent.Comp.Skills)
|
||||
{
|
||||
TryLearnSkill(ent, skill, force: true);
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasEnoughSkillToUse(EntityUid user, EntityUid target, out List<ProtoId<CP14SkillPrototype>> missingSkills)
|
||||
{
|
||||
missingSkills = new();
|
||||
if (!TryComp<CP14SkillRequirementComponent>(target, out var requirement) || requirement.RequiredSkills.Count == 0)
|
||||
return true;
|
||||
|
||||
if (!TryComp<CP14SkillsStorageComponent>(user, out var skillStorage))
|
||||
{
|
||||
missingSkills = requirement.RequiredSkills;
|
||||
return false;
|
||||
}
|
||||
|
||||
var success = requirement.NeedAll;
|
||||
foreach (var skill in requirement.RequiredSkills)
|
||||
{
|
||||
var hasSkill = skillStorage.Skills.Contains(skill);
|
||||
|
||||
if (requirement.NeedAll && !hasSkill)
|
||||
{
|
||||
missingSkills.Add(skill);
|
||||
success = false;
|
||||
}
|
||||
else if (!requirement.NeedAll && hasSkill)
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
else if (!requirement.NeedAll && !hasSkill)
|
||||
{
|
||||
missingSkills.Add(skill);
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
public bool TryLearnSkill(EntityUid uid, ProtoId<CP14SkillPrototype> skill, bool force = false)
|
||||
{
|
||||
if (!TryComp<CP14SkillsStorageComponent>(uid, out var skillStorage))
|
||||
return false;
|
||||
|
||||
if (!skillStorage.Skills.Contains(skill))
|
||||
{
|
||||
skillStorage.Skills.Add(skill);
|
||||
if (!force)
|
||||
return false;
|
||||
}
|
||||
|
||||
var proto = _proto.Index(skill);
|
||||
EntityManager.AddComponents(uid, proto.Components);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryForgotSkill(EntityUid uid, ProtoId<CP14SkillPrototype> skill)
|
||||
{
|
||||
if (!TryComp<CP14SkillsStorageComponent>(uid, out var skillStorage))
|
||||
return false;
|
||||
|
||||
if (!skillStorage.Skills.Contains(skill))
|
||||
return false;
|
||||
|
||||
skillStorage.Skills.Remove(skill);
|
||||
|
||||
var proto = _proto.Index(skill);
|
||||
EntityManager.RemoveComponents(uid, proto.Components);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed partial class CP14TrySkillIssueEvent : EntityEventArgs
|
||||
{
|
||||
public readonly EntityUid User;
|
||||
|
||||
public CP14TrySkillIssueEvent(EntityUid uid)
|
||||
{
|
||||
User = uid;
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,6 @@ public sealed class CP14WorkbenchUiCraftMessage : BoundUserInterfaceMessage
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class CP14WorkbenchUiRecipesState : BoundUserInterfaceState
|
||||
{
|
||||
// It's list (not hashset) BECAUSE CP14WorkbenchComponent contains list of recipes (WHY???)
|
||||
public readonly List<CP14WorkbenchUiRecipesEntry> Recipes;
|
||||
|
||||
public CP14WorkbenchUiRecipesState(List<CP14WorkbenchUiRecipesEntry> recipes)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
|
||||
*/
|
||||
|
||||
using Content.Shared._CP14.Knowledge.Prototypes;
|
||||
using Content.Shared.Stacks;
|
||||
using Content.Shared.Tag;
|
||||
using Robust.Shared.Audio;
|
||||
@@ -39,4 +40,10 @@ public sealed class CP14WorkbenchRecipePrototype : IPrototype
|
||||
|
||||
[DataField]
|
||||
public string Solution = "food";
|
||||
|
||||
/// <summary>
|
||||
/// If the player does not have this knowledge, the recipe will not be displayed in the workbench.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public ProtoId<CP14KnowledgePrototype>? KnowledgeRequired;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._CP14.Workbench;
|
||||
|
||||
public class SharedCP14WorkbenchSystem : EntitySystem
|
||||
public abstract class SharedCP14WorkbenchSystem : EntitySystem
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
18
Resources/Locale/en-US/_CP14/knowledge/skill-examined.ftl
Normal file
18
Resources/Locale/en-US/_CP14/knowledge/skill-examined.ftl
Normal file
@@ -0,0 +1,18 @@
|
||||
cp14-skill-label = [bold]Skill requirements[/bold]
|
||||
cp14-skill-examined = You need to have one of the following skills to use {$item}:
|
||||
cp14-skill-examined-need-all = You need to have all of the following skills in order to use {$item}:
|
||||
|
||||
cp14-skill-examined-skill = [color={$color}] - {$skill} [/color]
|
||||
|
||||
cp14-verb-categories-knowledge-add = Add knowledge:
|
||||
cp14-verb-categories-knowledge-remove = Delete knowledge:
|
||||
cp14-verb-categories-knowledge-learn = Learn knowledge:
|
||||
cp14-learned-new-knowledge = You have learned the knowledge of [bold]"{$name}[/bold]"!
|
||||
cp14-forgot-knowledge = You've lost your knowledge of [bold]"{$name}[/bold]"!
|
||||
|
||||
cp14-cant-learn-knowledge-dependencies =
|
||||
You were unable to understand {$target}...
|
||||
You lack the following knowledge:
|
||||
|
||||
cp14-knowledge-book-pre-text = Here you will find detailed instructions that explain
|
||||
cp14-knowledge-book-post-text = (To explore this knowledge, right-click on the book, and select ‘Learn Knowledge‘)
|
||||
24
Resources/Locale/en-US/_CP14/knowledge/skill-meta.ftl
Normal file
24
Resources/Locale/en-US/_CP14/knowledge/skill-meta.ftl
Normal file
@@ -0,0 +1,24 @@
|
||||
# T1
|
||||
|
||||
cp14-knowledge-sewing-name = Clothing sewing
|
||||
cp14-knowledge-sewing-desc = how to make simple clothes on sewing table
|
||||
|
||||
cp14-knowledge-wallpaper-name = Wallpaper production
|
||||
cp14-knowledge-wallpaper-desc = how to create wallpaper on sewing table
|
||||
|
||||
cp14-knowledge-woodwork-name = Woodwork
|
||||
cp14-knowledge-woodwork-desc = how to make simple objects out of wood
|
||||
|
||||
cp14-knowledge-metall-melting-name = Metall melting
|
||||
cp14-knowledge-metall-melting-desc = how to smelt ore into valuable metals
|
||||
|
||||
cp14-knowledge-metall-forging-name = Metall forging
|
||||
cp14-knowledge-metall-forging-desc = how to forge metal into different shapes
|
||||
|
||||
cp14-knowledge-metall-glasswork-name = Glasswork
|
||||
cp14-knowledge-metall-glasswork-desc = how to work with glass.
|
||||
|
||||
# T2
|
||||
|
||||
cp14-knowledge-sewing2-name = Advanced clothing sewing
|
||||
cp14-knowledge-sewing2-desc = how to create quality clothes on sewing table
|
||||
@@ -1,7 +1,12 @@
|
||||
cp14-material-wooden-planks = wooden planks
|
||||
cp14-material-dirt-block = dirt
|
||||
cp14-material-stone-block = stone
|
||||
cp14-material-nail = nails
|
||||
cp14-material-cloth = cloth
|
||||
cp14-material-copper = copper
|
||||
cp14-material-iron = iron
|
||||
cp14-material-gold = gold
|
||||
cp14-material-mithril = mithril
|
||||
cp14-material-lucens-planks = lucens planks
|
||||
cp14-material-cloth = cloth
|
||||
cp14-material-flora = flora material
|
||||
cp14-material-ash = ash
|
||||
|
||||
2
Resources/Locale/en-US/_CP14/materials/units.ftl
Normal file
2
Resources/Locale/en-US/_CP14/materials/units.ftl
Normal file
@@ -0,0 +1,2 @@
|
||||
# powder pile
|
||||
cp14-materials-unit-pile = pile
|
||||
@@ -1,5 +0,0 @@
|
||||
cp14-skill-label = [bold]Skill requirements[/bold]
|
||||
cp14-skill-examined = You need to have one of the following skills to use {$item}:
|
||||
cp14-skill-examined-need-all = You need to have all of the following skills in order to use {$item}:
|
||||
|
||||
cp14-skill-examined-skill = [color={$color}] - {$skill} [/color]
|
||||
@@ -1,11 +0,0 @@
|
||||
cp14-skill-name-alchemy = Alchemy
|
||||
cp14-skill-desc-alchemy = You are experienced enough to use complex alchemical equipment with confidence.
|
||||
|
||||
cp14-skill-name-blacksmith = Blacksmithing
|
||||
cp14-skill-desc-blacksmith = You know the intricacies of working with metal
|
||||
|
||||
cp14-skill-name-warcraft = Mastery of martial weapons
|
||||
cp14-skill-desc-warcraft = You're good with a serious, martial weapon.
|
||||
|
||||
cp14-skill-name-firearms = Firearms shooting
|
||||
cp14-skill-desc-firearms = You are experienced enough to use firearms.
|
||||
@@ -13,3 +13,5 @@ cp14-stack-mithril-bars = mithril bars
|
||||
cp14-stack-wallpaper = rolls of wallpaper
|
||||
|
||||
cp14-stack-glass-sheet = glass
|
||||
|
||||
cp14-stack-ash-pile = pile of ashes
|
||||
|
||||
@@ -21,12 +21,4 @@ cp14-trait-snoring-name = Loud snoring
|
||||
cp14-trait-snoring-desc = It is simply impossible to sleep next to you because you snore terribly loudly at everything.
|
||||
|
||||
cp14-trait-mana-wasting-name = Magical mediocrity.
|
||||
cp14-trait-mana-wasting-desc = Fate has decreed that magic is just an empty sound for you. You are unable to store or use magical energy.
|
||||
|
||||
# Backgrounds
|
||||
|
||||
cp14-trait-bg-entertainer-name = Entertainer
|
||||
cp14-trait-bg-entertainer-desc = You have to thrive in front of an audience. You know the way how to entertain them, entrance them and also even how to inspire them. Your poetics able to stir the hearts like those who awakening grief or joy, anger or laughter. Their spirits can be raised by your music and also it captures their sorrow. Actually, your dance steps are captivate and also your humor will cuts to the quick. Finally, your art is your life whatever the techniques you use.
|
||||
|
||||
cp14-trait-bg-soldier-name = Soldier
|
||||
cp14-trait-bg-soldier-desc = War has been your life for as long as you care to remember. You trained as a youth, studied the use of weapons and armor, learned basic survival techniques, including how to stay alive on the battlefield. You might have been part of a standing national army or a mercenary company, or perhaps a member of a local militia who rose to prominence during a recent war.
|
||||
cp14-trait-mana-wasting-desc = Fate has decreed that magic is just an empty sound for you. You are unable to store or use magical energy.
|
||||
@@ -3,4 +3,4 @@ cp14-workbench-ui-title = Item creation
|
||||
cp14-workbench-craft = Craft
|
||||
cp14-workbench-recipe-list = Recipe:
|
||||
|
||||
cp14-workbench-no-resource = There aren't enough ingredients!
|
||||
cp14-workbench-cant-craft = Craft failed!
|
||||
@@ -181,7 +181,7 @@ ent-CP14RuneFireball = { ent-CP14BaseMagicRune }
|
||||
ent-CP14ImpactEffectFireball = { ent-CP14BaseMagicImpact }
|
||||
.desc = { ent-CP14BaseMagicImpact.desc }
|
||||
|
||||
ent-CP14Fireball = исскуственное пламя
|
||||
ent-CP14Fireball = искусственное пламя
|
||||
|
||||
ent-CP14SpellScrollFireball = свиток заклинания огненного шара
|
||||
.desc = { ent-CP14BaseSpellScrollFire.desc }
|
||||
@@ -276,7 +276,7 @@ ent-CP14SpellScrollFlashLight = свиток заклинания ослепля
|
||||
ent-CP14ActionSpellManaConsume = Поглощение маны
|
||||
.desc = Вы поглощаете небольшое количество маны у цели.
|
||||
|
||||
ent-CP14ActionSpellManaConsumeElf = Аккуратное поглощние маны
|
||||
ent-CP14ActionSpellManaConsumeElf = Аккуратное поглощение маны
|
||||
.desc = Вы поглощаете небольшое количество маны у цели аккуратно и без потерь.
|
||||
|
||||
ent-CP14RuneManaConsume = { ent-CP14BaseMagicRune }
|
||||
@@ -358,7 +358,7 @@ ent-CP14ActionSpellIceShards = Ледяные осколки
|
||||
ent-CP14RuneIceShards = { ent-CP14BaseMagicRune }
|
||||
.desc = { ent-CP14BaseMagicRune.desc }
|
||||
|
||||
ent-CP14IceShard = ice shard
|
||||
ent-CP14IceShard = ледяной осколок
|
||||
|
||||
ent-CP14SpellScrollIceShards = свиток заклинания ледяных осколков
|
||||
.desc = { ent-CP14BaseSpellScrollWater.desc }
|
||||
@@ -469,7 +469,7 @@ ent-CP14ClothingHeadBeretBlack = черный берет
|
||||
.desc = { ent-CP14ClothingHeadBeretBase.desc }
|
||||
|
||||
ent-CP14ClothingHeadBandanaBase = { ent-CP14ClothingHeadBase }
|
||||
.desc = Favorite mage headdress
|
||||
.desc = Любимый головной убор магов
|
||||
|
||||
ent-CP14ClothingHeadBandanaWhite = белая бандана
|
||||
.desc = { ent-CP14ClothingHeadBandanaBase.desc }
|
||||
@@ -513,10 +513,10 @@ ent-CP14ClothingPantsTrouserDarkBlue = темные штаны
|
||||
.desc = Широкие, свободные штаны из простой холщовой ткани.
|
||||
|
||||
ent-CP14ClothingPantsLoincloth = набедренная повязка
|
||||
.desc = Свободные, ничего не мешает, да еще и выглядят экстремально брутально
|
||||
.desc = Свободные, ничего не мешает, да еще и выглядят экстремально брутально.
|
||||
|
||||
ent-CP14ClothingDressBlack = черное платье
|
||||
.desc = Просторная женское платье
|
||||
.desc = Просторная женское платье.
|
||||
|
||||
ent-CP14ClothingPantsMercenaryTrousers = брюки наемника
|
||||
.desc = Разноцветные брюки наемника. Не порвите их.
|
||||
@@ -536,7 +536,7 @@ ent-CP14ClothingRingFlashLight = проводящее кольцо вспышк
|
||||
.desc = Стандартное манапроводящее кольцо, позволяющее вызвать яркую ослепляющую вспышку света.
|
||||
.suffix = Вспышка света
|
||||
|
||||
ent-CP14ClothingShirtBase = None
|
||||
ent-CP14ClothingShirtBase = рубашка
|
||||
.desc = Приятный на ощупь материал, удобная свободная форма рубашки.
|
||||
|
||||
ent-CP14ClothingShirtBanker = рубашка банкира
|
||||
@@ -708,23 +708,23 @@ ent-CP14MobUndeadZombie = ходячий труп
|
||||
|
||||
ent-CP14MobUndeadZombieGearEasy1 = { ent-CP14MobUndeadZombie }
|
||||
.desc = { ent-CP14MobUndeadZombie.desc }
|
||||
.suffix = Zombie. Easy
|
||||
.suffix = Зомби. Легкий
|
||||
|
||||
ent-CP14MobUndeadZombieGearEasy2 = { ent-CP14MobUndeadZombie }
|
||||
.desc = { ent-CP14MobUndeadZombie.desc }
|
||||
.suffix = Zombie. Easy
|
||||
.suffix = Зомби. Легкий
|
||||
|
||||
ent-CP14MobUndeadZombieGearEasy3 = { ent-CP14MobUndeadZombie }
|
||||
.desc = { ent-CP14MobUndeadZombie.desc }
|
||||
.suffix = Zombie. Easy
|
||||
.suffix = Зомби. Легкий
|
||||
|
||||
ent-CP14MobUndeadZombieGearMedium1 = { ent-CP14MobUndeadZombie }
|
||||
.desc = { ent-CP14MobUndeadZombie.desc }
|
||||
.suffix = Zombie. Medium
|
||||
.suffix = Зомби. Средний
|
||||
|
||||
ent-CP14MobUndeadZombieGearMedium2 = { ent-CP14MobUndeadZombie }
|
||||
.desc = { ent-CP14MobUndeadZombie.desc }
|
||||
.suffix = Zombie. Medium
|
||||
.suffix = Зомби. Средний
|
||||
|
||||
ent-CP14MobDwarf = мистер Дварф
|
||||
|
||||
@@ -869,7 +869,7 @@ ent-CP14FoodCheesePart = сыр
|
||||
.desc = Треугольник мягкого, ароматного сыра.
|
||||
|
||||
ent-CP14FoodCheeseSlice = долька сыра
|
||||
.desc = A thin slice of delicious smelling cheese.
|
||||
.desc = Тонкий ломтик вкусно пахнущего сыра.
|
||||
|
||||
ent-CP14FoodDoughLarge = большой кусок теста
|
||||
.desc = Идеальный ингредиент для любого мучного изделия. Остается только придать ему форму.
|
||||
@@ -1140,43 +1140,43 @@ ent-CP14KeyPersonalHouseAbstractLoadoutDummy = Ключ к случайному
|
||||
|
||||
ent-CP14KeyPersonalHouse1 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse1
|
||||
.suffix = Личный дом 1
|
||||
|
||||
ent-CP14KeyPersonalHouse2 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse2
|
||||
.suffix = Личный дом 2
|
||||
|
||||
ent-CP14KeyPersonalHouse3 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse3
|
||||
.suffix = Личный дом 3
|
||||
|
||||
ent-CP14KeyPersonalHouse4 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse4
|
||||
.suffix = Личный дом 4
|
||||
|
||||
ent-CP14KeyPersonalHouse5 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse5
|
||||
.suffix = Личный дом 5
|
||||
|
||||
ent-CP14KeyPersonalHouse6 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse6
|
||||
.suffix = Личный дом 6
|
||||
|
||||
ent-CP14KeyPersonalHouse7 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse7
|
||||
.suffix = Личный дом 7
|
||||
|
||||
ent-CP14KeyPersonalHouse8 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse8
|
||||
.suffix = Личный дом 8
|
||||
|
||||
ent-CP14KeyPersonalHouse9 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse9
|
||||
.suffix = Личный дом 9
|
||||
|
||||
ent-CP14KeyPersonalHouse10 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = PersonalHouse10
|
||||
.suffix = Личный дом 10
|
||||
|
||||
ent-CP14KeyTavernHall = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
@@ -1192,23 +1192,23 @@ ent-CP14KeyTavernDormsAbstract = { ent-CP14BaseKey }
|
||||
|
||||
ent-CP14KeyTavernDorms1 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = Tavern Dorms 1
|
||||
.suffix = Общежития таверны 1
|
||||
|
||||
ent-CP14KeyTavernDorms2 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = Tavern Dorms 2
|
||||
.suffix = Общежития таверны 2
|
||||
|
||||
ent-CP14KeyTavernDorms3 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = Tavern Dorms 3
|
||||
.suffix = Общежития таверны 3
|
||||
|
||||
ent-CP14KeyTavernDorms4 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = Tavern Dorms 4
|
||||
.suffix = Общежития таверны 4
|
||||
|
||||
ent-CP14KeyTavernDorms5 = { ent-CP14BaseKey }
|
||||
.desc = { ent-CP14BaseKey.desc }
|
||||
.suffix = Tavern Dorms 5
|
||||
.suffix = Общежития таверны 5
|
||||
|
||||
ent-CP14CopperBar1 = медный слиток
|
||||
.desc = Тяжелый, слегка зеленый кусок обработанной меди.
|
||||
@@ -1352,7 +1352,7 @@ ent-CP14Cloth10 = { ent-CP14Cloth1 }
|
||||
.suffix = 10
|
||||
|
||||
ent-CP14ModularGripShort = None
|
||||
.desc = Короткая рукоять для оружия или инстумента.
|
||||
.desc = Короткая рукоять для оружия или инструмента.
|
||||
|
||||
ent-CP14ModularGripLong = None
|
||||
.desc = Длинная, двуручная рукоять для тяжелого оружия или больших инструментов.
|
||||
@@ -1790,102 +1790,102 @@ ent-CP14Chasm = бездна
|
||||
|
||||
ent-CP14WallmountCrystalRubies = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = Red
|
||||
.suffix = Красный
|
||||
|
||||
ent-CP14WallmountCrystalTopazes = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = Yellow
|
||||
.suffix = Жёлтый
|
||||
|
||||
ent-CP14WallmountCrystalEmeralds = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = Green
|
||||
.suffix = Зеленый
|
||||
|
||||
ent-CP14WallmountCrystalSapphires = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = Cyan
|
||||
.suffix = Голубой
|
||||
|
||||
ent-CP14WallmountCrystalAmethysts = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = Purple
|
||||
.suffix = Фиолетовый
|
||||
|
||||
ent-CP14WallmountCrystalDiamonds = { ent-CP14WallmountCrystalBase }
|
||||
.desc = { ent-CP14WallmountCrystalBase.desc }
|
||||
.suffix = White
|
||||
.suffix = Белый
|
||||
|
||||
ent-CP14CrystalBase = сверкающий кварц
|
||||
.desc = Биолюминесцентные кристаллы кварца, которые могут принимать любой цвет, - очень удобный источник света в глубоких пещерах. К сожалению, светящиеся свойства очень трудно сохранить.
|
||||
|
||||
ent-CP14CrystalRubiesSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Red, Small
|
||||
.suffix = Красный, Малый
|
||||
|
||||
ent-CP14CrystalRubiesMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Red, Medium
|
||||
.suffix = Красный, Средний
|
||||
|
||||
ent-CP14CrystalRubiesBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Red, Big
|
||||
.suffix = Красный, Большой
|
||||
|
||||
ent-CP14CrystalTopazesSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Yellow, Small
|
||||
.suffix = Жёлтый, Малый
|
||||
|
||||
ent-CP14CrystalTopazesMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Yellow, Medium
|
||||
.suffix = Жёлтый, Средний
|
||||
|
||||
ent-CP14CrystalTopazesBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Yellow, Big
|
||||
.suffix = Жёлтый, Большой
|
||||
|
||||
ent-CP14CrystalEmeraldsSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Green, Small
|
||||
.suffix = Зеленый, Малый
|
||||
|
||||
ent-CP14CrystalEmeraldsMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Green, Medium
|
||||
.suffix = Зеленый, Средний
|
||||
|
||||
ent-CP14CrystalEmeraldsBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Green, Big
|
||||
.suffix = Зеленый, Большой
|
||||
|
||||
ent-CP14CrystalSapphiresSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Cyan, Small
|
||||
.suffix = Голубой, Малый
|
||||
|
||||
ent-CP14CrystalSapphiresMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Cyan, Medium
|
||||
.suffix = Голубой, Средний
|
||||
|
||||
ent-CP14CrystalSapphiresBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Cyan, Big
|
||||
.suffix = Голубой, Большой
|
||||
|
||||
ent-CP14CrystalAmethystsSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Purple, Small
|
||||
.suffix = Фиолетовый, Малый
|
||||
|
||||
ent-CP14CrystalAmethystsMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Purple, Medium
|
||||
.suffix = Фиолетовый, Средний
|
||||
|
||||
ent-CP14CrystalAmethystsBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = Purple, Big
|
||||
.suffix = Фиолетовый, Большой
|
||||
|
||||
ent-CP14CrystalDiamondsSmall = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = White, Small
|
||||
.suffix = Белый, Малый
|
||||
|
||||
ent-CP14CrystalDiamondsMedium = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = White, Medium
|
||||
.suffix = Белый, Средний
|
||||
|
||||
ent-CP14CrystalDiamondsBig = { ent-CP14CrystalBase }
|
||||
.desc = { ent-CP14CrystalBase.desc }
|
||||
.suffix = White, Big
|
||||
.suffix = Белый, Большой
|
||||
|
||||
ent-CP14LaddersDownBase = лестница вниз
|
||||
.desc = Темные глубины подземного мира зовут вас.
|
||||
@@ -1901,11 +1901,11 @@ ent-CP14LaddersUpStone = { ent-CP14LaddersUpBase }
|
||||
|
||||
ent-CP14LaddersDownStoneAutoLink = { ent-CP14LaddersDownStone }
|
||||
.desc = { ent-CP14LaddersDownStone.desc }
|
||||
.suffix = Stone
|
||||
.suffix = Камень
|
||||
|
||||
ent-CP14LaddersUpStoneAutoLink = { ent-CP14LaddersUpStone }
|
||||
.desc = { ent-CP14LaddersUpStone.desc }
|
||||
.suffix = Stone
|
||||
.suffix = Камень
|
||||
|
||||
ent-CP14LaddersDownWood = { ent-CP14LaddersDownBase }
|
||||
.desc = { ent-CP14LaddersDownBase.desc }
|
||||
@@ -1915,11 +1915,11 @@ ent-CP14LaddersUpWood = { ent-CP14LaddersUpBase }
|
||||
|
||||
ent-CP14LaddersDownWoodAutoLink = { ent-CP14LaddersDownWood }
|
||||
.desc = { ent-CP14LaddersDownWood.desc }
|
||||
.suffix = Wood
|
||||
.suffix = Дерево
|
||||
|
||||
ent-CP14LaddersUpWoodAutoLink = { ent-CP14LaddersUpWood }
|
||||
.desc = { ent-CP14LaddersUpWood.desc }
|
||||
.suffix = Wood
|
||||
.suffix = Дерево
|
||||
|
||||
ent-CP14LaddersDownMarble = { ent-CP14LaddersDownBase }
|
||||
.desc = { ent-CP14LaddersDownBase.desc }
|
||||
@@ -1929,11 +1929,11 @@ ent-CP14LaddersUpMarble = { ent-CP14LaddersUpBase }
|
||||
|
||||
ent-CP14LaddersDownMarbleAutoLink = { ent-CP14LaddersDownMarble }
|
||||
.desc = { ent-CP14LaddersDownMarble.desc }
|
||||
.suffix = Marble
|
||||
.suffix = Мрамор
|
||||
|
||||
ent-CP14LaddersUpMarbleAutoLink = { ent-CP14LaddersUpWood }
|
||||
.desc = { ent-CP14LaddersUpWood.desc }
|
||||
.suffix = Marble
|
||||
.suffix = Мрамор
|
||||
|
||||
ent-CP14Lighthouse = маяк
|
||||
.desc = Свет во тьме.
|
||||
@@ -1989,23 +1989,23 @@ ent-CP14WallmountFlagGuardCommander = гобелен командира стра
|
||||
|
||||
ent-CP14WallmountGarlandRed = { ent-CP14WallmauntGarlandBase }
|
||||
.desc = { ent-CP14WallmauntGarlandBase.desc }
|
||||
.suffix = Red
|
||||
.suffix = Красный
|
||||
|
||||
ent-CP14WallmountGarlandYellow = { ent-CP14WallmauntGarlandBase }
|
||||
.desc = { ent-CP14WallmauntGarlandBase.desc }
|
||||
.suffix = Yellow
|
||||
.suffix = Жёлтый
|
||||
|
||||
ent-CP14WallmountGarlandGreen = { ent-CP14WallmauntGarlandBase }
|
||||
.desc = { ent-CP14WallmauntGarlandBase.desc }
|
||||
.suffix = Green
|
||||
.suffix = Зеленый
|
||||
|
||||
ent-CP14WallmountGarlandPurple = { ent-CP14WallmauntGarlandBase }
|
||||
.desc = { ent-CP14WallmauntGarlandBase.desc }
|
||||
.suffix = Purple
|
||||
.suffix = Фиолетовый
|
||||
|
||||
ent-CP14WallmountGarlandBlue = { ent-CP14WallmauntGarlandBase }
|
||||
.desc = { ent-CP14WallmauntGarlandBase.desc }
|
||||
.suffix = Blue
|
||||
.suffix = Голубой
|
||||
|
||||
ent-CP14WallmountPaintingSkull = картина черепа
|
||||
.desc = Причудливая картина с черепом. Угнетает.
|
||||
@@ -2037,15 +2037,15 @@ ent-CP14StatueGobRuinedVines = разрушенная статуя Гоба
|
||||
|
||||
ent-CP14StatueAngel = статуя ангела
|
||||
.desc = Священная статуя молящегося ангела
|
||||
.suffix = Stone
|
||||
.suffix = Камень
|
||||
|
||||
ent-CP14StatueAngelMarble = { ent-CP14StatueAngel }
|
||||
.desc = { ent-CP14StatueAngel.desc }
|
||||
.suffix = Marble
|
||||
.suffix = Мрамор
|
||||
|
||||
ent-CP14StatueAngelLimestone = { ent-CP14StatueAngel }
|
||||
.desc = { ent-CP14StatueAngel.desc }
|
||||
.suffix = Limestone
|
||||
.suffix = Известняк
|
||||
|
||||
ent-CP14BaseTombstone = надгробие
|
||||
.desc = Кусок камня, установленный в память о павших.
|
||||
@@ -2058,163 +2058,163 @@ ent-CP14WoodenDoorFrameMirrored = { ent-CP14WoodenDoorFrame }
|
||||
|
||||
ent-CP14IronDoorMirrored = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Opened, Mirrored
|
||||
.suffix = Открыто, Зеркальная
|
||||
|
||||
ent-CP14IronDoorWindowedMirrored = { ent-CP14IronDoorWindowed }
|
||||
.desc = { ent-CP14IronDoorWindowed.desc }
|
||||
.suffix = Opened, Mirrored
|
||||
.suffix = Открыто, Зеркальная
|
||||
|
||||
ent-CP14WoodenDoorMirrored = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Opened, Mirrored
|
||||
.suffix = Открыто, Зеркальная
|
||||
|
||||
ent-CP14WoodenDoorWindowedMirrored = { ent-CP14WoodenDoorWindowed }
|
||||
.desc = { ent-CP14WoodenDoorWindowed.desc }
|
||||
.suffix = Opened, Mirrored
|
||||
.suffix = Открыто, Зеркальная
|
||||
|
||||
ent-CP14WoodenDoorTavernAlchemy1 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Alchemy 1
|
||||
.suffix = Алхимия 1
|
||||
|
||||
ent-CP14WoodenDoorTavernAlchemy2 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Alchemy 2
|
||||
.suffix = Алхимия 2
|
||||
|
||||
ent-CP14IronDoorBankStaff = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Bank Staff
|
||||
.suffix = Сотрудники банка
|
||||
|
||||
ent-CP14IronDoorBankVault = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Bank Vault
|
||||
.suffix = Банковское хранилище
|
||||
|
||||
ent-CP14IronDoorBankSafe = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Bank Safe
|
||||
.suffix = Банковский сейф
|
||||
|
||||
ent-CP14IronDoorBankCommandantRoom = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Bank Commandant room
|
||||
.suffix = Комната коменданта банка
|
||||
|
||||
ent-CP14IronDoorWindowedBankEntrance = { ent-CP14IronDoorWindowed }
|
||||
.desc = { ent-CP14IronDoorWindowed.desc }
|
||||
.suffix = Bank Entrance
|
||||
.suffix = Вход в банк
|
||||
|
||||
ent-CP14IronDoorBlacksmith1 = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Blacksmith 1
|
||||
.suffix = Кузница 1
|
||||
|
||||
ent-CP14IronDoorBlacksmith2 = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Blacksmith 2
|
||||
.suffix = Кузница 2
|
||||
|
||||
ent-CP14IronDoorGuard = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Guard
|
||||
.suffix = Стража
|
||||
|
||||
ent-CP14IronDoorGuardCommandantRoom = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Guard Commander
|
||||
.suffix = Командир стражи
|
||||
|
||||
ent-CP14IronDoorGuardWeaponStorage = { ent-CP14IronDoor }
|
||||
.desc = { ent-CP14IronDoor.desc }
|
||||
.suffix = Guard, Weapon Storage
|
||||
.suffix = Стража, Хранилище оружия
|
||||
|
||||
ent-CP14IronDoorWindowedGuardEntrance = { ent-CP14IronDoorWindowed }
|
||||
.desc = { ent-CP14IronDoorWindowed.desc }
|
||||
.suffix = Guard, Entrance
|
||||
.suffix = Стража, Вход
|
||||
|
||||
ent-CP14FenceIronGrilleGateGuard = { ent-CP14FenceIronGrilleGate }
|
||||
.desc = { ent-CP14FenceIronGrilleGate.desc }
|
||||
.suffix = Guard
|
||||
.suffix = Стража
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse1 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse1
|
||||
.suffix = Личный дом 1
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse2 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse2
|
||||
.suffix = Личный дом 2
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse3 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse3
|
||||
.suffix = Личный дом 3
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse4 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse4
|
||||
.suffix = Личный дом 4
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse5 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse5
|
||||
.suffix = Личный дом 5
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse6 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse6
|
||||
.suffix = Личный дом 6
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse7 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse7
|
||||
.suffix = Личный дом 7
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse8 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse8
|
||||
.suffix = Личный дом 8
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse9 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse9
|
||||
.suffix = Личный дом 9
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse10 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse10
|
||||
.suffix = Личный дом 10
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse11 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse11
|
||||
.suffix = Личный дом 11
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse12 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse12
|
||||
.suffix = Личный дом 12
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse13 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse13
|
||||
.suffix = Личный дом 13
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse14 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse14
|
||||
.suffix = Личный дом 14
|
||||
|
||||
ent-CP14WoodenDoorPersonalHouse15 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = PersonalHouse15
|
||||
.suffix = Личный дом 15
|
||||
|
||||
ent-CP14WoodenDoorTavernStaff = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Staff
|
||||
.suffix = Персонал таверны
|
||||
|
||||
ent-CP14WoodenDoorTavernDorms1 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Dorms 1
|
||||
.suffix = Общежития таверны 1
|
||||
|
||||
ent-CP14WoodenDoorTavernDorms2 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Dorms 2
|
||||
.suffix = Общежития таверны 2
|
||||
|
||||
ent-CP14WoodenDoorTavernDorms3 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Dorms 3
|
||||
.suffix = Общежития таверны 3
|
||||
|
||||
ent-CP14WoodenDoorTavernDorms4 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Dorms 4
|
||||
.suffix = Общежития таверны 4
|
||||
|
||||
ent-CP14WoodenDoorTavernDorms5 = { ent-CP14WoodenDoor }
|
||||
.desc = { ent-CP14WoodenDoor.desc }
|
||||
.suffix = Tavern Dorms 5
|
||||
.suffix = Общежития таверны 5
|
||||
|
||||
ent-CP14WoodenDoorWindowedTavernHall = { ent-CP14WoodenDoorWindowed }
|
||||
.desc = { ent-CP14WoodenDoorWindowed.desc }
|
||||
.suffix = Tavern Hall
|
||||
.suffix = Зал таверны
|
||||
|
||||
ent-CP14BaseFenceStraight = { ent-CP14BaseFence }
|
||||
.desc = { ent-CP14BaseFence.desc }
|
||||
@@ -2299,34 +2299,34 @@ ent-CP14GatherablePlantBase = { ent-CP14GatherableBase }
|
||||
|
||||
ent-CP14GatherableDayflin = желтый днецвет
|
||||
.desc = Желтый солнечный цветок, пахнущий топленым молоком. Может быть переработан в желтый краситель.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14GatherableBloodFlower = кровавая роза
|
||||
.desc = Алые цветы растут там, где пролилась кровь.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14GatherableFlyAgaric = мухоморы
|
||||
.desc = Этот ядовитый гриб часто можно встретить вблизи водоемов или других влажных мест. Он не рекомендуется для употребления в пищу.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14GatherableChromiumSlime = хромиевая слизь
|
||||
.desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14GatherableWildSage = дикий шалфей
|
||||
.desc = Корень этого повсеместно распространенного лекарственного растения неплохо заживляет физические повреждения и вызывает кашель.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14GatherableLumiMushroom = люмигрибы
|
||||
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14QuartzCrystal = кварц
|
||||
.desc = Кварц - важнейший минерал, способный взаимодействовать с магической энергией. Он очень востребован алхимиками для извлечения полезных свойств из жидкостей
|
||||
|
||||
ent-CP14GatherableBlueAmanita = лазурная аманита
|
||||
.desc = Небесно-голубой цветок, известный своими лечебными и магическими свойствами.
|
||||
.suffix = Gatherable
|
||||
.suffix = Собираемый
|
||||
|
||||
ent-CP14PlantWheat = пшеница
|
||||
.desc = Наиболее популярная культура. Непритязательна, и открывает дорогу к разнообразию мучных изделий.
|
||||
@@ -2384,63 +2384,63 @@ ent-CP14BarrelDayflin = { ent-CP14BaseBarrel }
|
||||
|
||||
ent-CP14CraneBarrelDwarfBeer = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Beer. Dwarf
|
||||
.suffix = Пиво. Дварфийское
|
||||
|
||||
ent-CP14CraneBarrelBeerGerbil = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Beer. Gerbil
|
||||
.suffix = Пиво. Gerbil
|
||||
|
||||
ent-CP14CraneBarrelBeerBreeze = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Beer. Breeze
|
||||
.suffix = Пиво. Breeze
|
||||
|
||||
ent-CP14CraneBarrelBeerBlowLaw = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Beer. BlowLaw
|
||||
.suffix = Пиво. BlowLaw
|
||||
|
||||
ent-CP14CraneBarrelAleBloodyTear = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Ale. BloodyTear
|
||||
.suffix = Эль. BloodyTear
|
||||
|
||||
ent-CP14CraneBarrelAleBottomless = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Ale. Bottomless
|
||||
.suffix = Эль. Bottomless
|
||||
|
||||
ent-CP14CraneBarrelWineZellasianPleasure = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Wine. ZellasianPleasure
|
||||
.suffix = Вино. ZellasianPleasure
|
||||
|
||||
ent-CP14CraneBarrelWineLeeks = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Wine. Leeks
|
||||
.suffix = Вино. Leeks
|
||||
|
||||
ent-CP14CraneBarrelWineDurandate = { ent-CP14CraneBarrel }
|
||||
.desc = { ent-CP14CraneBarrel.desc }
|
||||
.suffix = Wine. Durandate
|
||||
.suffix = Вино. Durandate
|
||||
|
||||
ent-CP14CraneBarrelSmallDwarfBeer = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Beer. Dwarf
|
||||
.suffix = Пиво. Дварфийское
|
||||
|
||||
ent-CP14CraneBarrelSmallBeerGerbil = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Beer. Gerbil
|
||||
.suffix = Пиво. Gerbil
|
||||
|
||||
ent-CP14CraneBarrelSmallBeerBreeze = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Beer. Breeze
|
||||
.suffix = Пиво. Breeze
|
||||
|
||||
ent-CP14CraneBarrelSmallBeerBlowLaw = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Beer. BlowLaw
|
||||
.suffix = Пиво. BlowLaw
|
||||
|
||||
ent-CP14CraneBarrelSmallAleBloodyTear = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Ale. BloodyTear
|
||||
.suffix = Эль. BloodyTear
|
||||
|
||||
ent-CP14CraneBarrelSmallAleBottomless = { ent-CP14CraneBarrelSmall }
|
||||
.desc = { ent-CP14CraneBarrelSmall.desc }
|
||||
.suffix = Ale. Bottomless
|
||||
.suffix = Эль. Bottomless
|
||||
|
||||
ent-CP14Bonfire = костёр
|
||||
.desc = Груда бревен, сложенных вместе, и готовых вспыхнуть от малейшей искры.
|
||||
@@ -2522,7 +2522,7 @@ ent-CP14WallmountBarShelfB = { ent-CP14WallmountBarShelfA }
|
||||
|
||||
ent-CP14WallmountLamp = { ent-CP14WallmountLampEmpty }
|
||||
.desc = { ent-CP14WallmountLampEmpty.desc }
|
||||
.suffix = Small crystal
|
||||
.suffix = Маленький кристалл
|
||||
|
||||
ent-CP14BaseRoof = крыша
|
||||
.desc = Крыша над головой, защищающая от солнечного зноя или непогоды.
|
||||
@@ -2559,17 +2559,17 @@ ent-CP14SeedbedWooden = грядка
|
||||
.desc = Деревянная кадка с кучей земли, приспособленная для выращивания растений.
|
||||
|
||||
ent-CP14ChestGeneric = сундук
|
||||
.desc = Chest.
|
||||
.desc = Сундук.
|
||||
|
||||
ent-CP14BaseSmallCrate = { ent-CP14BaseCrate }
|
||||
.desc = { ent-CP14BaseCrate.desc }
|
||||
|
||||
ent-CP14CrateDirtPitGrave = dirt pit
|
||||
.desc = There's something buried here... or someone...
|
||||
ent-CP14CrateDirtPitGrave = грунтовая яма
|
||||
.desc = Здесь что-то зарыто... или кто-то...
|
||||
|
||||
ent-CP14CrateDirtPitGraveFilled = { ent-CP14CrateDirtPitGrave }
|
||||
.desc = { ent-CP14CrateDirtPitGrave.desc }
|
||||
.suffix = Random filled
|
||||
.suffix = Случайное заполнение
|
||||
|
||||
ent-CP14WallStone = камень
|
||||
.desc = Природная стена из цельного камня. В ней ощущается холод пещеры.
|
||||
@@ -2627,7 +2627,7 @@ ent-CP14WindowStoneBrick = окно в стене из каменного кир
|
||||
ent-CP14WindowMarbleBrick = окно в стене из мраморного кирпича
|
||||
.desc = Мраморная кирпичная стена со стеклянным окном в ней.
|
||||
|
||||
ent-CP14FlameCreationArtificialFlame = искуственное пламя
|
||||
ent-CP14FlameCreationArtificialFlame = искусственное пламя
|
||||
.desc = Магически созданное искусственное пламя, горящее прямо в воздухе. Неплохой источник света или оружие, если бросить его кому-нибудь в лицо.
|
||||
|
||||
ent-CP14LiquidDropWater = парящая капля жидкости
|
||||
@@ -2656,10 +2656,10 @@ ent-CP14BaseMobZombie = Мистер Зомби
|
||||
ent-CP14FoodTomatoes = помидор
|
||||
.desc = Красный, сочный помидор. Так и хочется бросить его кому-нибудь в лицо!
|
||||
|
||||
ent-CP14Snowball = snowball
|
||||
.desc = A small handful of snow, handy for throwing.
|
||||
ent-CP14Snowball = снежок
|
||||
.desc = Небольшая горсть снега, удобная для метания.
|
||||
|
||||
ent-CP14ManaOperationGlove = mana glove
|
||||
ent-CP14ManaOperationGlove = мана-перчатка
|
||||
.desc = Несложная, но эстетически приятная смесь технологии и магических кристаллов, позволяющая оперировать сырой маной: высасывать ее из одних предметов и вливать в другие.
|
||||
|
||||
ent-CP14CrystalLamp = кристалльная лампа
|
||||
@@ -2710,7 +2710,7 @@ ent-CP14IronDoor = железная дверь
|
||||
|
||||
ent-CP14IronDoorWindowed = железная дверь с окном
|
||||
.desc = массивная железная дверь с маленьким окошком. В него, конечно, можно заглянуть, но руку просунуть трудно.
|
||||
.suffix = Opened
|
||||
.suffix = Открыто
|
||||
|
||||
ent-CP14WoodenDoor = деревянная дверь
|
||||
.desc = Не самая прочная конструкция, но это лучше, чем ничего.
|
||||
@@ -2718,14 +2718,14 @@ ent-CP14WoodenDoor = деревянная дверь
|
||||
|
||||
ent-CP14WoodenDoorWindowed = деревянная дверь с окном
|
||||
.desc = Не самая прочная конструкция, но это лучше, чем ничего.
|
||||
.suffix = Opened
|
||||
.suffix = Открыто
|
||||
|
||||
ent-CP14FenceIronGrilleBase = железная решётка
|
||||
.desc = Прочный барьер из сваренных вместе железных прутьев.
|
||||
|
||||
ent-CP14FenceIronGrilleStraight = { ent-CP14FenceIronGrilleBase }
|
||||
.desc = { ent-CP14FenceIronGrilleBase.desc }
|
||||
.suffix = Straight
|
||||
.suffix = Прямой
|
||||
|
||||
ent-CP14FenceIronGrilleGate = железные решетчатые ворота
|
||||
.desc = Тяжелые железные ворота в решетках. Выглядит серьезно.
|
||||
@@ -2738,11 +2738,11 @@ ent-CP14BaseFenceWood = деревянный забор
|
||||
|
||||
ent-CP14FenceWoodStraight = { ent-CP14BaseFenceWood }
|
||||
.desc = { ent-CP14BaseFenceWood.desc }
|
||||
.suffix = Straight
|
||||
.suffix = Прямой
|
||||
|
||||
ent-CP14FenceWoodCorner = { ent-CP14BaseFenceWood }
|
||||
.desc = { ent-CP14BaseFenceWood.desc }
|
||||
.suffix = Corner
|
||||
.suffix = Угол
|
||||
|
||||
ent-CP14FenceWoodGate = деревянные ворота для забора
|
||||
.desc = Большая дверь в большом заборе. Для больших людей.
|
||||
@@ -2763,15 +2763,15 @@ ent-CP14FenceWoodSmallGate = маленькие деревянные ворот
|
||||
|
||||
ent-CP14BaseBarrel = деревянная бочка
|
||||
.desc = Самая простая конструкция для хранения жидкостей.
|
||||
.suffix = Empty
|
||||
.suffix = Пустая
|
||||
|
||||
ent-CP14CraneBarrel = деревянная бочка с краном
|
||||
.desc = Большой лежачий бочонок с краном, для хранения ценных жидкостей.
|
||||
.suffix = Empty
|
||||
.suffix = Пустая
|
||||
|
||||
ent-CP14CraneBarrelSmall = малая деревянная бочка с краном
|
||||
.desc = Небольшой лежащий бочонок с краном для быстрого наливания жидкости в кружки.
|
||||
.suffix = Empty
|
||||
.suffix = Пустая
|
||||
|
||||
ent-CP14WoodenBed = деревянная кровать
|
||||
.desc = Деревянная кровать. Лучше, чем ничего.
|
||||
@@ -2799,7 +2799,7 @@ ent-CP14WoodenPallet = деревянный поддон
|
||||
|
||||
ent-CP14WallmountLampEmpty = хрустальный настенный светильник
|
||||
.desc = Простой настенный магический прибор, преобразующий энергию кристаллов в яркий свет.
|
||||
.suffix = Empty
|
||||
.suffix = Пустой
|
||||
|
||||
ent-CP14WallmountOrdersBorder = доска заказов
|
||||
.desc = Есть ли работа для ведьмака?
|
||||
@@ -2816,10 +2816,10 @@ ent-CP14WorkbenchSewing = швейный стол
|
||||
ent-CP14FrameWooden = деревянная настенная рама
|
||||
.desc = Деревянная рама для любой деревянной стены.
|
||||
|
||||
ent-CP14RoofWooden = wooden roof
|
||||
ent-CP14RoofWooden = деревянная крыша
|
||||
.desc = { ent-CP14BaseRoof.desc }
|
||||
|
||||
ent-CP14RoofStone = stone roof
|
||||
ent-CP14RoofStone = каменная крыша
|
||||
.desc = { ent-CP14BaseRoof.desc }
|
||||
|
||||
ent-CP14AlchemyNormalizer = нормализатор растворов
|
||||
@@ -2834,23 +2834,23 @@ ent-CP14WorkbenchAnvil = наковальня
|
||||
ent-CP14WorkbenchFurnace = плавильная печь
|
||||
.desc = Раскаленный камень, позволяющий переплавлять руды в чистый металл.
|
||||
|
||||
ent-CP14WoodenChestFrame = Рама для деревянного сундука
|
||||
.desc = Основание для любого деревянного сундука
|
||||
ent-CP14WoodenChestFrame = рама для деревянного сундука
|
||||
.desc = Основание для любого деревянного сундука.
|
||||
|
||||
ent-CP14WoodenChest = деревянный сундук
|
||||
.desc = Простой деревянный сундук для удобного хранения хлама.
|
||||
|
||||
ent-CP14BrassChest = Латунный сундук
|
||||
ent-CP14BrassChest = латунный сундук
|
||||
.desc = Простой латунный сундук для удобного хранения хлама.
|
||||
|
||||
ent-CP14CrateCoffin = Гроб
|
||||
ent-CP14CrateCoffin = гроб
|
||||
.desc = Удобный и красивый гроб для комфортного ожидания воскрешения.
|
||||
|
||||
ent-CP14LargeWoodenCrate = большой деревянный ящик
|
||||
.desc = прочный деревянный ящик
|
||||
.desc = Прочный деревянный ящик.
|
||||
|
||||
ent-CP14SmallWoodenCrate = маленький деревянный ящик
|
||||
.desc = массивный деревянный ящик
|
||||
.desc = Массивный деревянный ящик.
|
||||
|
||||
ent-CP14WallWooden = деревянная стена
|
||||
|
||||
@@ -2863,3 +2863,5 @@ ent-CP14WallCardboard = картонная стена
|
||||
ent-CP14WindowWooden = деревянное окно
|
||||
.desc = Деревянная стена со стеклянным окном в ней.
|
||||
|
||||
ent-CP14Ash1 = пепел
|
||||
.desc = Раньше это могло быть чем-то интересным и полезным, теперь нет.
|
||||
|
||||
18
Resources/Locale/ru-RU/_CP14/knowledge/skill-examined.ftl
Normal file
18
Resources/Locale/ru-RU/_CP14/knowledge/skill-examined.ftl
Normal file
@@ -0,0 +1,18 @@
|
||||
cp14-skill-label = [bold]Требования к навыкам[/bold]
|
||||
cp14-skill-examined = Вам нужно владеть одним из следующих навыков, чтобы использовать {$item}:
|
||||
cp14-skill-examined-need-all = Вам нужно владеть всеми следующими навыками, чтобы использовать {$item}:
|
||||
|
||||
cp14-skill-examined-skill = [color={$color}] - {$skill} [/color]
|
||||
|
||||
cp14-verb-categories-knowledge-add = Научить знаниям:
|
||||
cp14-verb-categories-knowledge-remove = Удалить знания:
|
||||
cp14-verb-categories-knowledge-learn = Изучить знания:
|
||||
cp14-learned-new-knowledge = Вы изучили знания о [bold]"{$name}[/bold]"!
|
||||
cp14-forgot-knowledge = Вы потеряли свои знания о [bold]"{$name}[/bold]"!
|
||||
|
||||
cp14-cant-learn-knowledge-dependencies =
|
||||
Вы не смогли понять {$target}...
|
||||
Вам не хватает понимания:
|
||||
|
||||
cp14-knowledge-book-pre-text = Здесь подробно описаны инструкции, объясняющие
|
||||
cp14-knowledge-book-post-text = (Чтобы изучить эти знания, нажмите ПКМ по книге, и выберите "Изучить знания")
|
||||
24
Resources/Locale/ru-RU/_CP14/knowledge/skill-meta.ftl
Normal file
24
Resources/Locale/ru-RU/_CP14/knowledge/skill-meta.ftl
Normal file
@@ -0,0 +1,24 @@
|
||||
# T1
|
||||
|
||||
cp14-knowledge-sewing-name = Шитье одежды
|
||||
cp14-knowledge-sewing-desc = как создавать простую одежду на ткацком станке
|
||||
|
||||
cp14-knowledge-wallpaper-name = Изготовление обоев
|
||||
cp14-knowledge-wallpaper-desc = как создавать обои на ткацком станке
|
||||
|
||||
cp14-knowledge-woodwork-name = Работа по дереву
|
||||
cp14-knowledge-woodwork-desc = как создавать простые предметы из дерева
|
||||
|
||||
cp14-knowledge-metall-melting-name = Переплавка металлов
|
||||
cp14-knowledge-metall-melting-desc = как переплавлять руду в ценные металлы
|
||||
|
||||
cp14-knowledge-metall-forging-name = Ковка металлов
|
||||
cp14-knowledge-metall-forging-desc = как перековывать металл в различные формы
|
||||
|
||||
cp14-knowledge-glasswork-name = Работа с стеклом
|
||||
cp14-knowledge-glasswork-desc = как работать со стеклом
|
||||
|
||||
# T2
|
||||
|
||||
cp14-knowledge-sewing2-name = Продвинутое шитье одежды
|
||||
cp14-knowledge-sewing2-desc = как создавать качественную одежду на ткацком станке
|
||||
@@ -1,7 +1,12 @@
|
||||
cp14-material-wooden-planks = деревянные доски
|
||||
cp14-material-dirt-block = земля
|
||||
cp14-material-stone-block = камень
|
||||
cp14-material-nail = гвозди
|
||||
cp14-material-cloth = ткань
|
||||
cp14-material-copper = медь
|
||||
cp14-material-iron = железо
|
||||
cp14-material-gold = золото
|
||||
cp14-material-mithril = мифрил
|
||||
cp14-material-lucens-planks = люценсовые доски
|
||||
cp14-material-cloth = ткань
|
||||
cp14-material-flora = растительный материал
|
||||
cp14-material-ash = пепел
|
||||
|
||||
2
Resources/Locale/ru-RU/_CP14/materials/units.ftl
Normal file
2
Resources/Locale/ru-RU/_CP14/materials/units.ftl
Normal file
@@ -0,0 +1,2 @@
|
||||
# кучка порошка
|
||||
cp14-materials-unit-pile = кучка
|
||||
@@ -1,5 +0,0 @@
|
||||
cp14-skill-label = [bold]Требования к навыкам[/bold]
|
||||
cp14-skill-examined = Вам нужно владеть одним из следующих навыков, чтобы использовать {$item}:
|
||||
cp14-skill-examined-need-all = Вам нужно владеть всеми следующими навыками, чтобы использовать {$item}:
|
||||
|
||||
cp14-skill-examined-skill = [color={$color}] - {$skill} [/color]
|
||||
@@ -1,11 +0,0 @@
|
||||
cp14-skill-name-alchemy = Алхимия
|
||||
cp14-skill-desc-alchemy = Вы достаточно опытны, чтобы уверенно пользоваться сложным алхимическим оборудованием.
|
||||
|
||||
cp14-skill-name-blacksmith = Кузнечное дело
|
||||
cp14-skill-desc-blacksmith = Вы знаете все тонкости работы с металлом.
|
||||
|
||||
cp14-skill-name-warcraft = Владение воинским оружием
|
||||
cp14-skill-desc-warcraft = Вы хорошо управляетесь с серьезным, воинским оружием.
|
||||
|
||||
cp14-skill-name-firearms = Стрельба из огнестрела
|
||||
cp14-skill-desc-firearms = Вы достаточно опытны, чтобы пользоваться огнестрельным оружием.
|
||||
@@ -13,3 +13,5 @@ cp14-stack-mithril-bars = мифриловые слитки
|
||||
cp14-stack-wallpaper = рулон обоев
|
||||
|
||||
cp14-stack-glass-sheet = стекло
|
||||
|
||||
cp14-stack-ash-pile = кучка пепла
|
||||
|
||||
@@ -21,12 +21,4 @@ cp14-trait-snoring-name = Громкий храп
|
||||
cp14-trait-snoring-desc = Спать рядом с вами просто невозможно, потому что во все вы жутко громко храпите.
|
||||
|
||||
cp14-trait-mana-wasting-name = Магическая бездарность
|
||||
cp14-trait-mana-wasting-desc = Судьба распорядилась так, что магия для вас - лишь пустой звук. Вы не способны ни накапливать, ни использовать магическую энергию.
|
||||
|
||||
# Backgrounds
|
||||
|
||||
cp14-trait-bg-entertainer-name = Артист
|
||||
cp14-trait-bg-entertainer-desc = Вам нравится выступать на публике. Вы знаете, как их развлечь, очаровать и даже воодушевить. Ваша поэзия может трогать сердца слушателей, пробуждать в них горе или радость, смех или гнев. Ваша музыка ободряет их или заставляет скорбеть. Ваши танцы захватывают, а шутки всегда смешны. Чем бы вы ни занимались, ваша жизнь тесно связана с искусством.
|
||||
|
||||
cp14-trait-bg-soldier-name = Солдат
|
||||
cp14-trait-bg-soldier-desc = Сколько вы помните, в вашей жизни всегда была война. С молодости вы проходили тренировки, учились использовать оружие и доспехи, изучали технику выживания, включая то, как оставаться живым на поле боя. Вы могли быть частью армии страны или отряда наёмников, а может, были местным ополченцем во время войны.
|
||||
cp14-trait-mana-wasting-desc = Судьба распорядилась так, что магия для вас - лишь пустой звук. Вы не способны ни накапливать, ни использовать магическую энергию.
|
||||
@@ -3,4 +3,4 @@ cp14-workbench-ui-title = Создание предметов
|
||||
cp14-workbench-craft = Создать
|
||||
cp14-workbench-recipe-list = Рецепт:
|
||||
|
||||
cp14-workbench-no-resource = Не хватает ингредиентов!
|
||||
cp14-workbench-cant-craft = Крафт не удался!
|
||||
@@ -56,6 +56,20 @@
|
||||
- id: CP14BaseMop
|
||||
- id: CP14ModularIronPickaxe
|
||||
- id: CP14ModularIronSickle
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14Candle
|
||||
- id: CP14CandleRed
|
||||
- id: CP14CandleBlue
|
||||
- id: CP14CandleBlack
|
||||
- id: CP14CandleGreen
|
||||
- id: CP14CandlePurple
|
||||
- id: CP14CandleSmall
|
||||
- id: CP14CandleRedSmall
|
||||
- id: CP14CandleBlueSmall
|
||||
- id: CP14CandleBlackSmall
|
||||
- id: CP14CandleGreenSmall
|
||||
- id: CP14CandlePurpleSmall
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14CrystalLampBlueEmpty
|
||||
|
||||
33
Resources/Prototypes/_CP14/DayCycle/cycles.yml
Normal file
33
Resources/Prototypes/_CP14/DayCycle/cycles.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
- type: CP14DayCycle #
|
||||
id: Default
|
||||
timeEntries:
|
||||
- color: '#754A4A' #Dawn
|
||||
duration: 145
|
||||
- color: '#E0BA87' #
|
||||
duration: 145
|
||||
- color: '#BFEEFF' #Day
|
||||
duration: 145
|
||||
- color: '#385163' #Evening
|
||||
duration: 145
|
||||
period: Night
|
||||
- color: '#060D12' #Night
|
||||
duration: 80
|
||||
period: Night
|
||||
- color: '#000000' #BLACK NIGHT
|
||||
duration: 160
|
||||
period: Night
|
||||
- color: '#120906' #Night
|
||||
duration: 80
|
||||
period: Night
|
||||
|
||||
- type: CP14DayCycle
|
||||
id: CP14DemiplaneEternalDay
|
||||
timeEntries:
|
||||
- color: '#754A4A' #Dawn
|
||||
duration: 145
|
||||
- color: '#E0BA87' #
|
||||
duration: 145
|
||||
- color: '#BFEEFF' #Day
|
||||
duration: 145
|
||||
- color: '#385163' #Evening
|
||||
duration: 145
|
||||
@@ -12,25 +12,4 @@
|
||||
|
||||
- type: CP14DayCyclePeriod
|
||||
id: Evening
|
||||
name: cp14-daycycle-evening
|
||||
|
||||
- type: CP14DayCycle #
|
||||
id: Default
|
||||
timeEntries:
|
||||
- duration: 145
|
||||
color: '#754A4A' #Dawn
|
||||
- duration: 145
|
||||
color: '#E0BA87' #
|
||||
- duration: 145
|
||||
color: '#BFEEFF' #Day
|
||||
- period: Night
|
||||
duration: 145
|
||||
color: '#385163' #Evening
|
||||
- period: Night
|
||||
duration: 80
|
||||
color: '#060D12' #Night
|
||||
- period: Night
|
||||
duration: 160
|
||||
color: '#000000' #BLACK NIGHT
|
||||
- duration: 80
|
||||
color: '#120906' #Night
|
||||
name: cp14-daycycle-evening
|
||||
@@ -0,0 +1,96 @@
|
||||
- type: entity
|
||||
id: CP14ActionSpellFireRune
|
||||
name: Fire rune
|
||||
description: You create an area where a scalding stream of fire occurs with little delay.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Effects/Magic/spells_icons.rsi
|
||||
state: earth_wall
|
||||
- type: CP14MagicEffectCastSlowdown
|
||||
speedMultiplier: 0.5
|
||||
- type: CP14MagicEffectManaCost
|
||||
manaCost: 15
|
||||
- type: CP14MagicEffect
|
||||
magicType: Fire
|
||||
telegraphyEffects:
|
||||
- !type:CP14SpellSpawnEntityOnTarget
|
||||
spawns:
|
||||
- CP14TelegraphyFireRune
|
||||
effects:
|
||||
- !type:CP14SpellSpawnEntityOnTarget
|
||||
spawns:
|
||||
- CP14AreaEntityEffectFireRune
|
||||
- type: CP14MagicEffectCastingVisual
|
||||
proto: CP14RuneEarthWall
|
||||
- type: EntityWorldTargetAction
|
||||
range: 10
|
||||
itemIconStyle: BigAction
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/rumble.ogg
|
||||
icon:
|
||||
sprite: _CP14/Effects/Magic/spells_icons.rsi
|
||||
state: earth_wall
|
||||
event: !type:CP14DelayedEntityWorldTargetActionEvent
|
||||
cooldown: 10
|
||||
|
||||
- type: entity
|
||||
id: CP14TelegraphyFireRune
|
||||
parent: CP14BaseMagicImpact
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: PointLight
|
||||
color: "#eea911"
|
||||
- type: TimedDespawn
|
||||
lifetime: 0.8
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
drawdepth: BelowFloor
|
||||
sprite: _CP14/Effects/Magic/area_impact.rsi
|
||||
layers:
|
||||
- state: area_impact_in
|
||||
color: "#eea911"
|
||||
scale: 2, 2
|
||||
shader: unshaded
|
||||
|
||||
- type: entity
|
||||
id: CP14AreaEntityEffectFireRune
|
||||
parent: CP14BaseMagicImpact
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: PointLight
|
||||
color: "#eea911"
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
drawdepth: BelowFloor
|
||||
sprite: _CP14/Effects/Magic/area_impact.rsi
|
||||
layers:
|
||||
- state: area_impact_out
|
||||
color: "#eea911"
|
||||
scale: 2, 2
|
||||
shader: unshaded
|
||||
- type: TimedDespawn
|
||||
lifetime: 0.8
|
||||
- type: CP14AreaEntityEffect
|
||||
range: 1
|
||||
whitelist:
|
||||
components:
|
||||
- Damageable
|
||||
effects:
|
||||
- !type:CP14SpellSpawnEntityOnTarget
|
||||
spawns:
|
||||
- CP14ImpactEffectTieflingRevenge
|
||||
- !type:CP14SpellApplyEntityEffect
|
||||
effects:
|
||||
- !type:HealthChange
|
||||
damage:
|
||||
types:
|
||||
Heat: 10
|
||||
|
||||
- type: entity
|
||||
parent: CP14BaseSpellScrollFire
|
||||
id: CP14SpellScrollFireRune
|
||||
name: fire rune spell scroll
|
||||
components:
|
||||
- type: CP14SpellStorage
|
||||
spells:
|
||||
- CP14ActionSpellFireRune
|
||||
@@ -7,7 +7,7 @@
|
||||
sprite: _CP14/Effects/Magic/spells_icons.rsi
|
||||
state: mana_gift
|
||||
- type: CP14MagicEffectManaCost
|
||||
manaCost: 12
|
||||
manaCost: 10
|
||||
canModifyManacost: false
|
||||
- type: CP14MagicEffect
|
||||
magicType: Meta
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
Cold: 4
|
||||
Piercing: 4
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Dagger/ice_dagger.rsi
|
||||
sprite: _CP14/Effects/Magic/ice_shard.rsi
|
||||
layers:
|
||||
- state: shard
|
||||
shader: unshaded
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
Ash:
|
||||
CP14Ash1:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
|
||||
@@ -51,4 +51,15 @@
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Cloak/Roles/General/green.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Cloak/Roles/General/green.rsi
|
||||
sprite: _CP14/Clothing/Cloak/Roles/General/green.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingCloakBase
|
||||
id: CP14ClothingCloakBlue
|
||||
name: blue cloak
|
||||
description: Blue cape covering her entire body.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Cloak/Roles/General/blue.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Cloak/Roles/General/blue.rsi
|
||||
@@ -2,7 +2,6 @@
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsTrouserWhite
|
||||
name: white trouser
|
||||
description: Wide, loose pants made of plain canvas cloth.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Trousers/white.rsi
|
||||
@@ -13,7 +12,6 @@
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsTrouserDarkBlue
|
||||
name: dark trouser
|
||||
description: Wide, loose pants made of plain canvas cloth.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Trousers/dark_blue.rsi
|
||||
@@ -24,29 +22,16 @@
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsLoincloth
|
||||
name: loincloth
|
||||
description: Free, spacious, nothing gets in the way, and it also looks extremely rugged
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/loincloth.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/loincloth.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingDressBlack #TODO rename to CP14ClothingPantsDressBlack
|
||||
name: black dress
|
||||
description: A roomy, feminine skirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/black.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/black.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsMercenaryTrousers
|
||||
name: mercenary trousers
|
||||
description: Colourful mercenary trousers. Don't tear them.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Trousers/trousers_mercenary.rsi
|
||||
@@ -55,11 +40,20 @@
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsSouthernMagician
|
||||
name: southern magician's dress
|
||||
description: A traditional southern mage skirt, rather loose.
|
||||
id: CP14ClothingPantsGreen
|
||||
name: green pants
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow_magician_dress.rsi
|
||||
sprite: _CP14/Clothing/Pants/green.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow_magician_dress.rsi
|
||||
sprite: _CP14/Clothing/Pants/green.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsBrown
|
||||
name: brown pants
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/brown.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/brown.rsi
|
||||
@@ -0,0 +1,89 @@
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressBlack
|
||||
name: black dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/black.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/black.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressBlue
|
||||
name: blue dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/blue.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/blue.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressBrown
|
||||
name: brown dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/brown.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/brown.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressGreen
|
||||
name: green dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/green.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/green.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressGreenBelt
|
||||
name: green belt dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/green_belt.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/green_belt.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsDressGreenBelt
|
||||
id: CP14ClothingPantsDressGreenBelt2
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/green_belt2.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/green_belt2.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressRed
|
||||
name: red dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/red.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/red.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDressYellow
|
||||
name: yellow dress
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsSouthernMagician
|
||||
name: southern magician's dress
|
||||
description: A traditional southern mage skirt, rather loose.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow_magician_dress.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Pants/Dress/yellow_magician_dress.rsi
|
||||
@@ -3,6 +3,7 @@
|
||||
parent: Clothing
|
||||
id: CP14ClothingPantsBase
|
||||
categories: [ ForkFiltered ]
|
||||
description: Pants to cover my thighs from the cold.
|
||||
components:
|
||||
- type: Clothing
|
||||
equipDelay: 1
|
||||
@@ -10,4 +11,16 @@
|
||||
slots:
|
||||
- pants
|
||||
- type: Sprite
|
||||
state: icon
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingPantsBase
|
||||
id: CP14ClothingPantsDress
|
||||
abstract: true
|
||||
description: A roomy, feminine skirt
|
||||
components:
|
||||
- type: Clothing
|
||||
equipDelay: 1.5
|
||||
unequipDelay: 1
|
||||
slots:
|
||||
- pants
|
||||
@@ -0,0 +1,198 @@
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonBlack
|
||||
name: cotton black shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/black.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/black.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonBlue
|
||||
name: cotton blue shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonBlueCollar
|
||||
name: cotton blue collar shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue_collar.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue_collar.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtMercenary
|
||||
name: mercenary shirt
|
||||
description: A mercenary's colourful shirt.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/mercenary.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/mercenary.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtBlueOpen
|
||||
name: cotton blue open shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_blue.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_blue.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtRedOpen
|
||||
name: cotton red open shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_red.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_red.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtYellowOpen
|
||||
name: cotton yellow open shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_yellow.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/open_yellow.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonPurple
|
||||
name: cotton purple shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/purple.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/purple.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonRed
|
||||
name: cotton red shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/red.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/red.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhite
|
||||
name: cotton white shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhiteBelt
|
||||
name: cotton white belt shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_belt.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_belt.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhiteBrownVest
|
||||
name: cotton white brown vest shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtCottonWhiteBrownVest
|
||||
id: CP14ClothingShirtCottonWhiteBrownVest2
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest2.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest2.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtCottonWhiteBrownVest
|
||||
id: CP14ClothingShirtCottonWhiteBrownVest3
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest3.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_brown_vest3.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhiteCollar
|
||||
name: cotton white collar shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_collar.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_collar.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhiteGreenVest
|
||||
name: cotton white green vest shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_green_vest.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_green_vest.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtCottonWhiteGreenVest
|
||||
id: CP14ClothingShirtCottonWhiteGreenVest2
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_green_vest2.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white_green_vest2.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonYellow
|
||||
name: cotton yellow shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonYellowCollar
|
||||
name: cotton yellow collar shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_collar.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_collar.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtYellowWizard
|
||||
name: yellow wizard shirt
|
||||
description: A loose magician's shirt, comfortable and nice looking.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_wizard.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_wizard.rsi
|
||||
@@ -1,81 +0,0 @@
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonBlue
|
||||
name: cotton blue shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/blue.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonBlack
|
||||
name: cotton black shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/black.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/black.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonPurple
|
||||
name: cotton purple shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/purple.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/purple.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonRed
|
||||
name: cotton red shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/red.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/red.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonWhite
|
||||
name: cotton white shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/white.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtCottonYellow
|
||||
name: cotton yellow shirt
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtMercenary
|
||||
name: mercenary shirt
|
||||
description: A mercenary's colourful shirt.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/mercenary.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/mercenary.rsi
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShirtBase
|
||||
id: CP14ClothingShirtYellowWizard
|
||||
name: yellow wizard shirt
|
||||
description: A loose magician's shirt, comfortable and nice looking.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_wizard.rsi
|
||||
- type: Clothing
|
||||
sprite: _CP14/Clothing/Shirt/Roles/General/yellow_wizard.rsi
|
||||
@@ -13,7 +13,8 @@
|
||||
state: icon
|
||||
- type: Item
|
||||
size: Normal
|
||||
|
||||
- type: ProtectedFromStepTriggers
|
||||
|
||||
- type: entity
|
||||
parent: CP14ClothingShoesBase
|
||||
id: CP14ClothingShoesBlack
|
||||
|
||||
@@ -24,16 +24,6 @@
|
||||
- !type:GroupSelector
|
||||
weight: 75
|
||||
children:
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SilverCoin1
|
||||
weight: 0.1
|
||||
- id: CP14CopperCoin
|
||||
weight: 0.1
|
||||
- id: CP14CopperCoin5
|
||||
weight: 0.5
|
||||
- id: CP14CopperCoin1
|
||||
weight: 1
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SpellScrollIceShards
|
||||
@@ -47,7 +37,7 @@
|
||||
- id: CP14SpellScrollFlashLight
|
||||
- id: CP14SpellScrollWaterCreation
|
||||
- id: CP14SpellScrollPlantGrowth
|
||||
- id: CP14EnergyCrystalSmall
|
||||
- id: CP14EnergyCrystalSmallEmpty
|
||||
- id: CP14BaseSharpeningStone
|
||||
- id: CP14GlassShard
|
||||
- id: CP14Paper
|
||||
@@ -69,9 +59,13 @@
|
||||
- id: CP14VialSmallBlueAmanita
|
||||
- id: CP14VialTinyChromiumSlime
|
||||
- id: CP14VialTinyLumiMushroom
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14BookKnowledgeClothingSewing
|
||||
- id: CP14BookKnowledgeWallpaperCraft
|
||||
- id: CP14SilverCoin5
|
||||
- id: CP14BaseLockpick
|
||||
- id: CP14EnergyCrystalMedium
|
||||
- id: CP14EnergyCrystalMediumEmpty
|
||||
- id: CP14DemiplaneKeyT1
|
||||
weight: 2
|
||||
- id: CP14DemiplaneKeyT2
|
||||
@@ -109,22 +103,16 @@
|
||||
- !type:NestedSelector
|
||||
tableId: CP14TableDemiplaneLootT1
|
||||
weight: 0.25
|
||||
# Coins
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SilverCoin5
|
||||
weight: 0.1
|
||||
- id: CP14SilverCoin1
|
||||
weight: 0.3
|
||||
- id: CP14CopperCoin5
|
||||
weight: 0.5
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SpellScrollShadowStep
|
||||
- id: CP14SpellScrollFireball
|
||||
- id: CP14SpellScrollBeerCreation
|
||||
weight: 0.2
|
||||
- id: CP14EnergyCrystalMedium
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14BookKnowledgeAdvancedClothingSewing
|
||||
- id: CP14EnergyCrystalMediumEmpty
|
||||
# Rare
|
||||
- !type:GroupSelector
|
||||
weight: 25
|
||||
|
||||
@@ -70,8 +70,6 @@
|
||||
- id: CP14MobUndeadZombieGearEasy1
|
||||
- id: CP14MobUndeadZombieGearEasy2
|
||||
- id: CP14MobUndeadZombieGearEasy3
|
||||
- id: CP14MobUndeadZombieGearMedium1
|
||||
- id: CP14MobUndeadZombieGearMedium2
|
||||
|
||||
- type: entity
|
||||
parent: CP14BaseMobGroupSpawner
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
- id: CP14MobUndeadZombieGearEasy1
|
||||
- id: CP14MobUndeadZombieGearEasy2
|
||||
- id: CP14MobUndeadZombieGearEasy3
|
||||
- !type:GroupSelector
|
||||
weight: 30
|
||||
children:
|
||||
- id: CP14MobUndeadZombieGearMedium1
|
||||
- id: CP14MobUndeadZombieGearMedium2
|
||||
|
||||
# Animal
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14AggressiveAnimals
|
||||
- CP14Monster
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
- type: ReplacementAccent
|
||||
|
||||
@@ -7,14 +7,10 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14Undead
|
||||
- CP14Monster
|
||||
- type: Loadout
|
||||
prototypes:
|
||||
- CP14MobSkeleton
|
||||
- type: CP14SkillsStorage
|
||||
- type: CP14AutoAddSkill
|
||||
skills:
|
||||
- Warcraft
|
||||
|
||||
- type: entity
|
||||
id: CP14MobUndeadSkeletonCloset
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
|
||||
- type: entity
|
||||
id: CP14MobXenoDrone
|
||||
@@ -14,7 +14,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
|
||||
- type: entity
|
||||
id: CP14MobSpaceCobra
|
||||
@@ -24,7 +24,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
- type: MeleeChemicalInjector
|
||||
transferAmount: 2
|
||||
- type: MeleeWeapon
|
||||
@@ -45,7 +45,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
- type: MeleeWeapon
|
||||
angle: 0
|
||||
animation: WeaponArcBite
|
||||
@@ -62,7 +62,7 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
- type: SolutionTransfer
|
||||
maxTransferAmount: 0.2
|
||||
- type: MeleeWeapon
|
||||
@@ -81,4 +81,4 @@
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14HostileEveryone
|
||||
- CP14Monster
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
true
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- CP14Undead
|
||||
- CP14Monster
|
||||
|
||||
- type: entity
|
||||
id: CP14MobUndeadZombieGearEasy1
|
||||
@@ -42,22 +42,4 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Loadout
|
||||
prototypes: [ CP14MobUndeadEasy3 ]
|
||||
|
||||
- type: entity
|
||||
id: CP14MobUndeadZombieGearMedium1
|
||||
parent: CP14MobUndeadZombie
|
||||
suffix: Zombie. Medium
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Loadout
|
||||
prototypes: [ CP14MobUndeadMedium1 ]
|
||||
|
||||
- type: entity
|
||||
id: CP14MobUndeadZombieGearMedium2
|
||||
parent: CP14MobUndeadZombie
|
||||
suffix: Zombie. Medium
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Loadout
|
||||
prototypes: [ CP14MobUndeadMedium2 ]
|
||||
prototypes: [ CP14MobUndeadEasy3 ]
|
||||
@@ -2,7 +2,7 @@
|
||||
save: false
|
||||
parent:
|
||||
- BaseMob
|
||||
- MobDamageable
|
||||
- CP14MobDamageable
|
||||
- MobCombat
|
||||
id: CP14BaseMobSpecies
|
||||
categories: [ ForkFiltered ]
|
||||
@@ -26,6 +26,7 @@
|
||||
sprite: Mobs/Customization/masking_helpers.rsi
|
||||
state: unisex_full
|
||||
visible: false
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "shirt" ]
|
||||
- map: [ "pants" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
@@ -33,7 +34,6 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "ears" ]
|
||||
- map: [ "cloak" ]
|
||||
- map: [ "eyes" ]
|
||||
@@ -311,7 +311,7 @@
|
||||
Asphyxiation: -1.0
|
||||
- type: FireVisuals
|
||||
alternateState: Standing #TODO - custom visuals
|
||||
- type: CP14SkillsStorage
|
||||
- type: CP14KnowledgeStorage
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
sprite: Mobs/Customization/masking_helpers.rsi
|
||||
state: unisex_full
|
||||
visible: false
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "shirt" ]
|
||||
- map: [ "pants" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
@@ -33,7 +34,6 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.HeadSide" ] # Bark Before clothing
|
||||
- map: [ "enum.HumanoidVisualLayers.HeadTop" ] # Bark Before clothing
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "ears" ]
|
||||
- map: [ "cloak" ]
|
||||
- map: [ "eyes" ]
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LArm" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "shirt" ]
|
||||
- map: [ "pants" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
@@ -25,7 +26,6 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "ears" ]
|
||||
- map: [ "cloak" ]
|
||||
- map: [ "eyes" ]
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LArm" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "shirt" ]
|
||||
- map: [ "pants" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
@@ -26,7 +27,6 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "ears" ]
|
||||
- map: [ "cloak" ]
|
||||
- map: [ "eyes" ]
|
||||
|
||||
30
Resources/Prototypes/_CP14/Entities/Mobs/base.yml
Normal file
30
Resources/Prototypes/_CP14/Entities/Mobs/base.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
- type: entity
|
||||
save: false
|
||||
parent: MobDamageable
|
||||
id: CP14MobDamageable
|
||||
categories: [ ForkFiltered ]
|
||||
abstract: true
|
||||
components:
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTypeTrigger
|
||||
damageType: Blunt
|
||||
damage: 400
|
||||
behaviors:
|
||||
- !type:GibBehavior { }
|
||||
- trigger:
|
||||
!type:DamageTypeTrigger
|
||||
damageType: Heat
|
||||
damage: 1500
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawnInContainer: true
|
||||
spawn:
|
||||
CP14Ash1:
|
||||
min: 2
|
||||
max: 3
|
||||
- !type:BurnBodyBehavior { }
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MeatLaserImpact
|
||||
@@ -0,0 +1,81 @@
|
||||
- type: entity
|
||||
parent: BookRandom
|
||||
id: CP14BookKnowledgeBase
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
name: knowledge book
|
||||
description: This book holds valuable knowledge that you can learn... if you're ready for it.
|
||||
components:
|
||||
- type: CP14KnowledgePaperText
|
||||
|
||||
#TODO: Уникальный визуал каждой книжке
|
||||
|
||||
# T0
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeWoodWork
|
||||
suffix: Wood Work
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- WoodWork
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeMetallMelting
|
||||
suffix: Metall Melting
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- MetallMelting
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeMetallForging
|
||||
suffix: Metall Forging
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- MetallForging
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeGlasswork
|
||||
suffix: Glasswork
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- Glasswork
|
||||
|
||||
# T1
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeClothingSewing
|
||||
suffix: Clothing Sewing
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- ClothingSewing
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeWallpaperCraft
|
||||
suffix: Wallpaper Craft
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- WallpaperCraft
|
||||
|
||||
# T2
|
||||
|
||||
- type: entity
|
||||
parent: CP14BookKnowledgeBase
|
||||
id: CP14BookKnowledgeAdvancedClothingSewing
|
||||
suffix: Advanced Clothing Sewing
|
||||
components:
|
||||
- type: CP14KnowledgeLearningSource
|
||||
knowledges:
|
||||
- AdvancedClothingSewing
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
Ash:
|
||||
CP14Ash1:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
- type: entity
|
||||
parent: BaseHandheldInstrument
|
||||
id: CP14FluteInstrument
|
||||
name: flute
|
||||
description: A compact musical wind instrument, popular in villages as well as with large musical troupes.
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Instrument
|
||||
program: 75
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Fun/Instruments/flute.rsi
|
||||
state: icon
|
||||
- type: Item
|
||||
size: Small
|
||||
sprite: _CP14/Objects/Fun/Instruments/flute.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- WoodwindInstrument
|
||||
|
||||
- type: entity
|
||||
parent: BaseHandheldInstrument
|
||||
id: CP14LyraInstrument
|
||||
name: lyra
|
||||
description: A common stringed instrument throughout Sylate, popular with various bards and musical troupes.
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Instrument
|
||||
program: 46
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Fun/Instruments/lira.rsi
|
||||
state: icon
|
||||
- type: Item
|
||||
size: Normal
|
||||
sprite: _CP14/Objects/Fun/Instruments/lira.rsi
|
||||
- type: Clothing
|
||||
equipDelay: 0.25
|
||||
unequipDelay: 0.25
|
||||
sprite: _CP14/Objects/Fun/Instruments/lira.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- belt
|
||||
- type: Tag
|
||||
tags:
|
||||
- StringInstrument
|
||||
@@ -0,0 +1,50 @@
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14Ash1
|
||||
name: ash #Возможный реагент в будущем
|
||||
description: It used to be something that could be interesting and useful, now it's not.
|
||||
suffix: 1
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Tiny
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Materials/ash.rsi
|
||||
layers:
|
||||
- state: ash_1
|
||||
map: ["base"]
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
maxVol: 50
|
||||
reagents:
|
||||
- ReagentId: Ash
|
||||
Quantity: 10
|
||||
- type: SolutionSpiker
|
||||
sourceSolution: food
|
||||
ignoreEmpty: true
|
||||
- type: ScoopableSolution
|
||||
solution: food
|
||||
- type: Extractable
|
||||
grindableSolutionName: food
|
||||
- type: Appearance
|
||||
- type: Stack
|
||||
stackType: CP14Ash
|
||||
count: 1
|
||||
baseLayer: base
|
||||
layerStates:
|
||||
- ash_1
|
||||
- ash_2
|
||||
- ash_3
|
||||
- type: Material
|
||||
- type: PhysicalComposition # точно ли это нужно?
|
||||
materialComposition:
|
||||
CP14Ash: 100
|
||||
|
||||
- type: entity
|
||||
id: CP14Ash3
|
||||
parent: CP14Ash1
|
||||
suffix: 3
|
||||
components:
|
||||
- type: Stack
|
||||
count: 3
|
||||
@@ -87,10 +87,6 @@
|
||||
sprite: _CP14/Objects/Specific/Alchemy/mortar_pestle.rsi
|
||||
state: pestle
|
||||
- type: CP14Pestle
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.05
|
||||
requiredSkills:
|
||||
- Alchemy
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- CP14_RU_Alchemy
|
||||
|
||||
@@ -25,9 +25,4 @@
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: CP14SharpeningStone
|
||||
sharpnessHeal: 0.1
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.6
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
- Blacksmith
|
||||
sharpnessHeal: 0.1
|
||||
@@ -25,6 +25,23 @@
|
||||
damage:
|
||||
types:
|
||||
Blunt: 3
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
- type: CP14MeleeSelfDamage
|
||||
damageToSelf:
|
||||
types:
|
||||
Blunt: 1 # 50 hits
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 50
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: MeleeWeapon
|
||||
angle: 100
|
||||
attackRate: 1.3
|
||||
|
||||
@@ -49,10 +49,6 @@
|
||||
- type: MeleeThrowOnHit
|
||||
lifetime: 0.05
|
||||
speed: 5
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.5
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
- type: Tool
|
||||
qualities:
|
||||
- CP14Hammering
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseBattleStaff
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
name: battle staff
|
||||
description: an extremely simple and effective weapon - a long straight and heavy stick.
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/BattleStaff/battleStaff.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: Clothing
|
||||
equipDelay: 1
|
||||
unequipDelay: 1
|
||||
sprite: _CP14/Objects/Weapons/Melee/BattleStaff/battleStaff.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- neck
|
||||
- type: Wieldable
|
||||
- type: IncreaseDamageOnWield
|
||||
damage:
|
||||
types:
|
||||
Blunt: 4
|
||||
- type: MeleeWeapon
|
||||
angle: 100
|
||||
attackRate: 1.3
|
||||
range: 1.3
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Blunt: 6
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.3
|
||||
cPAnimationOffset: -1.3
|
||||
@@ -1,86 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseTwoHandedSword
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSharp
|
||||
- CP14BaseWeaponChemical
|
||||
name: two-handed sword
|
||||
description: A powerful weapon that requires tremendous strength and skill to use effectively.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/TwoHandedSword/twoHandedSword.rsi
|
||||
state: icon
|
||||
- type: Clothing
|
||||
equipDelay: 1
|
||||
unequipDelay: 1
|
||||
sprite: _CP14/Objects/Weapons/Melee/TwoHandedSword/twoHandedSword.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- neck
|
||||
- type: MeleeWeapon
|
||||
angle: 120
|
||||
attackRate: 0.7
|
||||
range: 1.8
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Slash: 5
|
||||
Blunt: 4
|
||||
Structural: 1
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.6
|
||||
- type: Wieldable
|
||||
- type: IncreaseDamageOnWield
|
||||
damage:
|
||||
types:
|
||||
Slash: 12
|
||||
Blunt: 4
|
||||
Structural: 3
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.5
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
- type: CP14Currency
|
||||
currency: 5000
|
||||
|
||||
- type: entity
|
||||
id: CP14TwoHandedSwordScythe
|
||||
parent: CP14BaseTwoHandedSword
|
||||
name: scythe
|
||||
description: A large, two-handed scythe. What will you mow with it? Millet or heads?
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/TwoHandedSword/scythe.rsi
|
||||
state: icon
|
||||
- type: Clothing
|
||||
sprite: _CP14/Objects/Weapons/Melee/TwoHandedSword/scythe.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- CP14HerbalGathering
|
||||
- type: MeleeWeapon
|
||||
angle: 110
|
||||
attackRate: 0.6
|
||||
range: 1.4
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Slash: 4
|
||||
Blunt: 3
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.6
|
||||
- type: Wieldable
|
||||
- type: IncreaseDamageOnWield
|
||||
damage:
|
||||
types:
|
||||
Slash: 6
|
||||
@@ -1,19 +1,19 @@
|
||||
- type: entity
|
||||
id: CP14BookImperialLawsHandBook
|
||||
parent: BaseGuidebook
|
||||
name: imperial laws
|
||||
description: A book about Imperial Laws.
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: paper
|
||||
- state: cover_base
|
||||
color: "#871619"
|
||||
- state: decor_wingette
|
||||
color: "#a3181d"
|
||||
- state: icon_law
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- CP14_RU_Imperial_Laws
|
||||
- CP14_EN_Imperial_Laws
|
||||
- type: entity
|
||||
id: CP14BookImperialLawsHandBook
|
||||
parent: BaseGuidebook
|
||||
name: imperial laws
|
||||
description: A book about Imperial Laws.
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: paper
|
||||
- state: cover_base
|
||||
color: "#871619"
|
||||
- state: decor_wingette
|
||||
color: "#a3181d"
|
||||
- state: icon_law
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- CP14_RU_Imperial_Laws
|
||||
- CP14_EN_Imperial_Laws
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
- type: entity
|
||||
name: wood bench
|
||||
id: CP14BenchWood
|
||||
parent:
|
||||
- SeatBase
|
||||
- CP14BaseFlammable
|
||||
description: A bench carved from wood, a comfortable part of the interior designed for sitting and relaxing.
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Rotatable
|
||||
- type: Sprite
|
||||
sprite: _CP14/Structures/Furniture/bench.rsi
|
||||
layers:
|
||||
- state: wooden
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
@@ -43,9 +43,4 @@
|
||||
sharpnessHeal: 0.1
|
||||
targetDamage:
|
||||
types:
|
||||
blunt: 0.5
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.5
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
- Blacksmith
|
||||
blunt: 0.5
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user