From 44f4c1726623e4d3a54d2de4b63284b17f83afa2 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:22:01 +1000 Subject: [PATCH 1/9] refactor: Orthographic and obsolete in Knowledge --- .../_CP14/Knowledge/CP14KnowledgeSystem.cs | 16 ++++++++-------- .../Components/CP14AutoAddKnowledgeComponent.cs | 5 +++-- .../CP14KnowledgeLearningSourceComponent.cs | 2 +- .../CP14KnowledgePaperTextComponent.cs | 8 +++----- .../Components/CP14KnowledgeStorageComponent.cs | 4 ++-- .../Prototypes/CP14KnowledgePrototype.cs | 9 ++++----- .../_CP14/Knowledge/SharedCP14KnowledgeSystem.cs | 8 ++++---- 7 files changed, 25 insertions(+), 27 deletions(-) diff --git a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs index 4e867f5310..e632be9614 100644 --- a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs +++ b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs @@ -55,7 +55,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem private void AddKnowledgeLearningVerb(Entity ent, ref GetVerbsEvent args) { var user = args.User; - foreach (var knowledge in ent.Comp.Knowledges) + foreach (var knowledge in ent.Comp.Knowledge) { if (!_proto.TryIndex(knowledge, out var indexedKnowledge)) continue; @@ -91,7 +91,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem return; //Remove knowledge - foreach (var knowledge in ent.Comp.Knowledges) + foreach (var knowledge in ent.Comp.Knowledge) { if (!_proto.TryIndex(knowledge, out var indexedKnowledge)) continue; @@ -112,7 +112,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem //Add knowledge foreach (var knowledge in _proto.EnumeratePrototypes()) { - if (ent.Comp.Knowledges.Contains(knowledge)) + if (ent.Comp.Knowledge.Contains(knowledge)) continue; args.Verbs.Add(new Verb() @@ -147,7 +147,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem if (!_proto.TryIndex(proto, out var indexedKnowledge)) return false; - if (knowledgeStorage.Knowledges.Contains(proto)) + if (knowledgeStorage.Knowledge.Contains(proto)) return false; foreach (var dependency in indexedKnowledge.Dependencies) @@ -214,7 +214,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem LogType.Mind, LogImpact.Medium, $"{EntityManager.ToPrettyString(uid):player} learned new knowledge: {Loc.GetString(indexedKnowledge.Name)}"); - return knowledgeStorage.Knowledges.Add(proto); + return knowledgeStorage.Knowledge.Add(proto); } public bool TryForgotKnowledge(EntityUid uid, ProtoId proto, bool silent = false) @@ -222,13 +222,13 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem if (!TryComp(uid, out var knowledgeStorage)) return false; - if (!knowledgeStorage.Knowledges.Contains(proto)) + if (!knowledgeStorage.Knowledge.Contains(proto)) return false; if (!_proto.TryIndex(proto, out var indexedKnowledge)) return false; - knowledgeStorage.Knowledges.Remove(proto); + knowledgeStorage.Knowledge.Remove(proto); if (_mind.TryGetMind(uid, out var mind, out var mindComp) && mindComp.Session is not null) { @@ -264,6 +264,6 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem if (!TryComp(entity, out var knowledgeComp)) return; - RaiseNetworkEvent(new CP14KnowledgeInfoEvent(GetNetEntity(entity),knowledgeComp.Knowledges), args.SenderSession); + RaiseNetworkEvent(new CP14KnowledgeInfoEvent(GetNetEntity(entity),knowledgeComp.Knowledge), args.SenderSession); } } diff --git a/Content.Shared/_CP14/Knowledge/Components/CP14AutoAddKnowledgeComponent.cs b/Content.Shared/_CP14/Knowledge/Components/CP14AutoAddKnowledgeComponent.cs index 3fcb3e7976..39aa528229 100644 --- a/Content.Shared/_CP14/Knowledge/Components/CP14AutoAddKnowledgeComponent.cs +++ b/Content.Shared/_CP14/Knowledge/Components/CP14AutoAddKnowledgeComponent.cs @@ -4,11 +4,12 @@ using Robust.Shared.Prototypes; namespace Content.Shared._CP14.Knowledge.Components; /// -/// The ability to add a skill to an entity and quickly teach it some skills +/// The ability to add a to an entity +/// and quickly teach it some skills. /// [RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))] public sealed partial class CP14AutoAddKnowledgeComponent : Component { [DataField] - public List> Knowledge = new(); + public List> Knowledge = []; } diff --git a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeLearningSourceComponent.cs b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeLearningSourceComponent.cs index 23af4f2cb9..065f19a0dc 100644 --- a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeLearningSourceComponent.cs +++ b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeLearningSourceComponent.cs @@ -10,7 +10,7 @@ namespace Content.Shared._CP14.Knowledge.Components; public sealed partial class CP14KnowledgeLearningSourceComponent : Component { [DataField, ViewVariables(VVAccess.ReadOnly)] - public HashSet> Knowledges { get; private set; } = new(); + public HashSet> Knowledge { get; private set; } = []; [DataField] public TimeSpan DoAfter = TimeSpan.FromSeconds(5f); diff --git a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgePaperTextComponent.cs b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgePaperTextComponent.cs index 7e5f291dc5..a97ce508ec 100644 --- a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgePaperTextComponent.cs +++ b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgePaperTextComponent.cs @@ -1,10 +1,8 @@ - namespace Content.Shared._CP14.Knowledge.Components; /// -/// automatically generates content for PaperComponent, based on the knowledge that can be learnt from this object +/// Automatically generates content for PaperComponent, +/// based on the knowledge that can be learnt from this object. /// [RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))] -public sealed partial class CP14KnowledgePaperTextComponent : Component -{ -} +public sealed partial class CP14KnowledgePaperTextComponent : Component; diff --git a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeStorageComponent.cs b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeStorageComponent.cs index cd5605affa..94aeace471 100644 --- a/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeStorageComponent.cs +++ b/Content.Shared/_CP14/Knowledge/Components/CP14KnowledgeStorageComponent.cs @@ -4,11 +4,11 @@ using Robust.Shared.Prototypes; namespace Content.Shared._CP14.Knowledge.Components; /// -/// a list of skills learned by this entity +/// A list of learned by this entity. /// [RegisterComponent, Access(typeof(SharedCP14KnowledgeSystem))] public sealed partial class CP14KnowledgeStorageComponent : Component { [DataField, ViewVariables(VVAccess.ReadOnly)] - public HashSet> Knowledges { get; private set; } = new(); + public HashSet> Knowledge { get; private set; } = []; } diff --git a/Content.Shared/_CP14/Knowledge/Prototypes/CP14KnowledgePrototype.cs b/Content.Shared/_CP14/Knowledge/Prototypes/CP14KnowledgePrototype.cs index 9380c8c40d..4dd19ef81e 100644 --- a/Content.Shared/_CP14/Knowledge/Prototypes/CP14KnowledgePrototype.cs +++ b/Content.Shared/_CP14/Knowledge/Prototypes/CP14KnowledgePrototype.cs @@ -8,19 +8,18 @@ namespace Content.Shared._CP14.Knowledge.Prototypes; [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!; + public LocId Name { get; private set; } [DataField] - public LocId Desc{ get; private set; } = default!; + public LocId Desc { get; private set; } /// - /// to study this knowledge, other knowledge on which it is based may be necessary. + /// To study this knowledge, other knowledge on which it is based may be necessary. /// [DataField] - public HashSet> Dependencies = new(); + public HashSet> Dependencies = []; } diff --git a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs index 063ee84e84..2d6f0ef7d5 100644 --- a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs +++ b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs @@ -26,13 +26,13 @@ public abstract partial class SharedCP14KnowledgeSystem : EntitySystem return; if (!TryComp(ent, out var knowledge)) return; - if (knowledge.Knowledges.Count <= 0) + if (knowledge.Knowledge.Count <= 0) return; var sb = new StringBuilder(); sb.Append(Loc.GetString("cp14-knowledge-book-pre-text")); - foreach (var k in knowledge.Knowledges) + foreach (var k in knowledge.Knowledge) { if (!_proto.TryIndex(k, out var indexedKnowledge)) continue; @@ -54,7 +54,7 @@ public abstract partial class SharedCP14KnowledgeSystem : EntitySystem if (!Resolve(uid, ref knowledgeStorage, false)) return false; - if (!knowledgeStorage.Knowledges.Contains(knowledge)) + if (!knowledgeStorage.Knowledge.Contains(knowledge)) return false; var ev = new CP14KnowledgeUsedEvent(uid, knowledge, factor); @@ -72,7 +72,7 @@ public abstract partial class SharedCP14KnowledgeSystem : EntitySystem if (!Resolve(uid, ref knowledgeStorage, false)) return false; - return knowledgeStorage.Knowledges.Contains(knowledge); + return knowledgeStorage.Knowledge.Contains(knowledge); } } From 35e6bae5fe4f2abcf259aecf41e864c40481bdbc Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:40:17 +1000 Subject: [PATCH 2/9] refactor: Add AllKnowing comp, separate paper and events --- .../Knowledge/CP14KnowledgePaperTextSystem.cs | 62 ++++++++++ .../Components/CP14AllKnowingComponent.cs | 6 + .../Events/CP14KnowledgeInfoEvent.cs | 18 +++ .../Events/CP14KnowledgeLearnDoAfterEvent.cs | 17 +++ .../Events/CP14KnowledgeUsedEvent.cs | 18 +++ .../Events/CP14RequestKnowledgeInfoEvent.cs | 14 +++ .../Knowledge/SharedCP14KnowledgeSystem.cs | 111 ++---------------- 7 files changed, 148 insertions(+), 98 deletions(-) create mode 100644 Content.Shared/_CP14/Knowledge/CP14KnowledgePaperTextSystem.cs create mode 100644 Content.Shared/_CP14/Knowledge/Components/CP14AllKnowingComponent.cs create mode 100644 Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeInfoEvent.cs create mode 100644 Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeLearnDoAfterEvent.cs create mode 100644 Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeUsedEvent.cs create mode 100644 Content.Shared/_CP14/Knowledge/Events/CP14RequestKnowledgeInfoEvent.cs diff --git a/Content.Shared/_CP14/Knowledge/CP14KnowledgePaperTextSystem.cs b/Content.Shared/_CP14/Knowledge/CP14KnowledgePaperTextSystem.cs new file mode 100644 index 0000000000..3101ba75a7 --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/CP14KnowledgePaperTextSystem.cs @@ -0,0 +1,62 @@ +using System.Text; +using Content.Shared._CP14.Knowledge.Components; +using Content.Shared.Paper; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Knowledge; + +public sealed class CP14KnowledgePaperTextSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly PaperSystem _paper = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnPaperMapInit); + } + + private void OnPaperMapInit(Entity ent, ref MapInitEvent args) + { + if (!TryComp(ent, out var paperComponent)) + return; + + var paper = new Entity(ent, paperComponent); + + if (!TryComp(ent, out var knowledge)) + return; + + if (knowledge.Knowledge.Count == 0) + return; + + var content = GenerateText(knowledge); + + _paper.SetContent(paper, content); + paper.Comp.EditingDisabled = true; + + // Yes we need to do synchronization after such changes, + // yes predict, but we need to + Dirty(paper); + } + + private string GenerateText(CP14KnowledgeLearningSourceComponent source) + { + var stringBuilder = new StringBuilder(); + + // Header + stringBuilder.Append(Loc.GetString("cp14-knowledge-book-pre-text")); + + // Main body + foreach (var prototypeId in source.Knowledge) + { + if (!_prototype.TryIndex(prototypeId, out var indexedKnowledge)) + continue; + + stringBuilder.Append($"\n{Loc.GetString(indexedKnowledge.Desc)}"); + } + + // Footer + stringBuilder.Append($"\n\n{Loc.GetString("cp14-knowledge-book-post-text")}"); + + return stringBuilder.ToString(); + } +} diff --git a/Content.Shared/_CP14/Knowledge/Components/CP14AllKnowingComponent.cs b/Content.Shared/_CP14/Knowledge/Components/CP14AllKnowingComponent.cs new file mode 100644 index 0000000000..f110be086d --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/Components/CP14AllKnowingComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Knowledge.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CP14AllKnowingComponent : Component; diff --git a/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeInfoEvent.cs b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeInfoEvent.cs new file mode 100644 index 0000000000..638cb24e29 --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeInfoEvent.cs @@ -0,0 +1,18 @@ +using Content.Shared._CP14.Knowledge.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Knowledge.Events; + +[Serializable, NetSerializable] +public sealed class CP14KnowledgeInfoEvent : EntityEventArgs +{ + public readonly NetEntity NetEntity; + public readonly HashSet> AllKnowledge; + + public CP14KnowledgeInfoEvent(NetEntity netEntity, HashSet> allKnowledge) + { + NetEntity = netEntity; + AllKnowledge = allKnowledge; + } +} diff --git a/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeLearnDoAfterEvent.cs b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeLearnDoAfterEvent.cs new file mode 100644 index 0000000000..3a015e09ac --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeLearnDoAfterEvent.cs @@ -0,0 +1,17 @@ +using Content.Shared._CP14.Knowledge.Prototypes; +using Content.Shared.DoAfter; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Knowledge.Events; + +[Serializable, NetSerializable] +public sealed partial class CP14KnowledgeLearnDoAfterEvent : DoAfterEvent +{ + public ProtoId Knowledge; + + public override DoAfterEvent Clone() + { + return this; + } +} diff --git a/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeUsedEvent.cs b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeUsedEvent.cs new file mode 100644 index 0000000000..df5049bb3f --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/Events/CP14KnowledgeUsedEvent.cs @@ -0,0 +1,18 @@ +using Content.Shared._CP14.Knowledge.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Knowledge.Events; + +public sealed class CP14KnowledgeUsedEvent : EntityEventArgs +{ + public readonly EntityUid User; + public readonly ProtoId Knowledge; + public readonly float Factor; + + public CP14KnowledgeUsedEvent(EntityUid uid, ProtoId knowledge, float factor) + { + User = uid; + Knowledge = knowledge; + Factor = factor; + } +} diff --git a/Content.Shared/_CP14/Knowledge/Events/CP14RequestKnowledgeInfoEvent.cs b/Content.Shared/_CP14/Knowledge/Events/CP14RequestKnowledgeInfoEvent.cs new file mode 100644 index 0000000000..9ac9261a5e --- /dev/null +++ b/Content.Shared/_CP14/Knowledge/Events/CP14RequestKnowledgeInfoEvent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Knowledge.Events; + +[Serializable, NetSerializable] +public sealed class CP14RequestKnowledgeInfoEvent : EntityEventArgs +{ + public readonly NetEntity NetEntity; + + public CP14RequestKnowledgeInfoEvent(NetEntity netEntity) + { + NetEntity = netEntity; + } +} diff --git a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs index 2d6f0ef7d5..164a16bb98 100644 --- a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs +++ b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs @@ -1,5 +1,6 @@ using System.Text; using Content.Shared._CP14.Knowledge.Components; +using Content.Shared._CP14.Knowledge.Events; using Content.Shared._CP14.Knowledge.Prototypes; using Content.Shared.DoAfter; using Content.Shared.Ghost; @@ -10,113 +11,27 @@ using Robust.Shared.Serialization; namespace Content.Shared._CP14.Knowledge; -public abstract partial class SharedCP14KnowledgeSystem : EntitySystem +public abstract class SharedCP14KnowledgeSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly PaperSystem _paper = default!; - - public override void Initialize() + public bool HasKnowledge(Entity entity, ProtoId knowledge) { - SubscribeLocalEvent(OnPaperMapInit); + if (HasComp(entity)) + return true; + + return Resolve(entity, ref entity.Comp, false) && entity.Comp.Knowledge.Contains(knowledge); } - private void OnPaperMapInit(Entity ent, ref MapInitEvent args) + public bool TryUseKnowledge(Entity entity, ProtoId knowledge, float factor = 1f) { - if (!TryComp(ent, out var paper)) - return; - if (!TryComp(ent, out var knowledge)) - return; - if (knowledge.Knowledge.Count <= 0) - return; - - var sb = new StringBuilder(); - - sb.Append(Loc.GetString("cp14-knowledge-book-pre-text")); - foreach (var k in knowledge.Knowledge) - { - 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 knowledge, - float factor = 1f, - CP14KnowledgeStorageComponent? knowledgeStorage = null) - { - if (!Resolve(uid, ref knowledgeStorage, false)) + if (!Resolve(entity, ref entity.Comp, false)) return false; - if (!knowledgeStorage.Knowledge.Contains(knowledge)) + if (!entity.Comp.Knowledge.Contains(knowledge)) return false; - var ev = new CP14KnowledgeUsedEvent(uid, knowledge, factor); - RaiseLocalEvent(uid, ev); + var ev = new CP14KnowledgeUsedEvent(entity, knowledge, factor); + RaiseLocalEvent(entity, ev); + return true; } - - public bool HasKnowledge(EntityUid uid, - ProtoId knowledge, - CP14KnowledgeStorageComponent? knowledgeStorage = null) - { - if (HasComp(uid)) //All-knowing ghosts - return true; - - if (!Resolve(uid, ref knowledgeStorage, false)) - return false; - - return knowledgeStorage.Knowledge.Contains(knowledge); - } -} - -public sealed class CP14KnowledgeUsedEvent : EntityEventArgs -{ - public readonly EntityUid User; - public readonly ProtoId Knowledge; - public readonly float Factor; - - public CP14KnowledgeUsedEvent(EntityUid uid, ProtoId knowledge, float factor) - { - User = uid; - Knowledge = knowledge; - Factor = factor; - } -} - -[Serializable, NetSerializable] -public sealed partial class CP14KnowledgeLearnDoAfterEvent : DoAfterEvent -{ - public ProtoId Knowledge; - public override DoAfterEvent Clone() => this; -} - -[Serializable, NetSerializable] -public sealed class CP14KnowledgeInfoEvent : EntityEventArgs -{ - public readonly NetEntity NetEntity; - public readonly HashSet> AllKnowledge; - - public CP14KnowledgeInfoEvent(NetEntity netEntity, HashSet> allKnowledge) - { - NetEntity = netEntity; - AllKnowledge = allKnowledge; - } -} - -[Serializable, NetSerializable] -public sealed class RequestKnowledgeInfoEvent : EntityEventArgs -{ - public readonly NetEntity NetEntity; - - public RequestKnowledgeInfoEvent(NetEntity netEntity) - { - NetEntity = netEntity; - } } From 45a6919994340f52ec8ff1d98635ba2b169f1255 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:46:51 +1000 Subject: [PATCH 3/9] fix: KnowledgeRequired --- .../_CP14/Workbench/Requirements/KnowledgeRequired.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs b/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs index 02d71cbd8b..c62d1aabdc 100644 --- a/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs +++ b/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs @@ -26,7 +26,7 @@ public sealed partial class KnowledgeRequired : CP14WorkbenchCraftRequirement public override void PostCraft(EntityManager entManager, HashSet placedEntities, EntityUid user) { var knowledgeSystem = entManager.System(); - knowledgeSystem.UseKnowledge(user, Knowledge); + knowledgeSystem.TryUseKnowledge(user, Knowledge); } public override string GetRequirementTitle(IPrototypeManager protoManager) @@ -41,8 +41,8 @@ public sealed partial class KnowledgeRequired : CP14WorkbenchCraftRequirement return null; } - public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager) + public override SpriteSpecifier GetRequirementTexture(IPrototypeManager protoManager) { - return new SpriteSpecifier.Texture(new("/Textures/Interface/students-cap.svg.192dpi.png")); + return new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/students-cap.svg.192dpi.png")); } } From 7b5283b35b9d977e28e47e63302481657fe70911 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:56:06 +1000 Subject: [PATCH 4/9] fix: Knowledge events usings (I hate Rider) --- .../_CP14/Knowledge/ClientCP14KnowledgeSystem.cs | 7 ++++--- Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Content.Client/_CP14/Knowledge/ClientCP14KnowledgeSystem.cs b/Content.Client/_CP14/Knowledge/ClientCP14KnowledgeSystem.cs index 5c43fbda72..e493caa375 100644 --- a/Content.Client/_CP14/Knowledge/ClientCP14KnowledgeSystem.cs +++ b/Content.Client/_CP14/Knowledge/ClientCP14KnowledgeSystem.cs @@ -1,11 +1,12 @@ using Content.Shared._CP14.Knowledge; +using Content.Shared._CP14.Knowledge.Events; using Content.Shared._CP14.Knowledge.Prototypes; using Robust.Client.Player; using Robust.Shared.Prototypes; namespace Content.Client._CP14.Knowledge; -public sealed partial class ClientCP14KnowledgeSystem : SharedCP14KnowledgeSystem +public sealed class ClientCP14KnowledgeSystem : SharedCP14KnowledgeSystem { [Dependency] private readonly IPlayerManager _players = default!; @@ -24,7 +25,7 @@ public sealed partial class ClientCP14KnowledgeSystem : SharedCP14KnowledgeSyste if (entity is null) return; - RaiseNetworkEvent(new RequestKnowledgeInfoEvent(GetNetEntity(entity.Value))); + RaiseNetworkEvent(new CP14RequestKnowledgeInfoEvent(GetNetEntity(entity.Value))); } private void OnCharacterKnowledgeEvent(CP14KnowledgeInfoEvent msg, EntitySessionEventArgs args) @@ -37,6 +38,6 @@ public sealed partial class ClientCP14KnowledgeSystem : SharedCP14KnowledgeSyste public readonly record struct KnowledgeData( EntityUid Entity, - HashSet> AllKnowledges + HashSet> AllKnowledge ); } diff --git a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs index e632be9614..8dda24305e 100644 --- a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs +++ b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Mind; using Content.Server.Popups; using Content.Shared._CP14.Knowledge; using Content.Shared._CP14.Knowledge.Components; +using Content.Shared._CP14.Knowledge.Events; using Content.Shared._CP14.Knowledge.Prototypes; using Content.Shared.Administration; using Content.Shared.Administration.Logs; @@ -39,7 +40,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem SubscribeLocalEvent>(AddKnowledgeLearningVerb); SubscribeLocalEvent(KnowledgeLearnedEvent); - SubscribeNetworkEvent(OnRequestKnowledgeInfoEvent); + SubscribeNetworkEvent(OnRequestKnowledgeInfoEvent); } private void KnowledgeLearnedEvent(Entity ent, ref CP14KnowledgeLearnDoAfterEvent args) @@ -254,7 +255,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem return true; } - private void OnRequestKnowledgeInfoEvent(RequestKnowledgeInfoEvent msg, EntitySessionEventArgs args) + private void OnRequestKnowledgeInfoEvent(CP14RequestKnowledgeInfoEvent msg, EntitySessionEventArgs args) { if (!args.SenderSession.AttachedEntity.HasValue || args.SenderSession.AttachedEntity != GetEntity(msg.NetEntity)) return; From e6a28307a403cb9f6b131c7fc4581e7fb57784d4 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:42:20 +1000 Subject: [PATCH 5/9] refactor: server CP14KnowledgeSystem --- .../CP14KnowledgeAdminUtilitiesSystem.cs | 71 ++++++ .../_CP14/Knowledge/CP14KnowledgeSystem.cs | 230 +++++++----------- .../{ => Specials}/CP14AddKnowledgeSpecial.cs | 6 +- .../Knowledge/SharedCP14KnowledgeSystem.cs | 6 - 4 files changed, 160 insertions(+), 153 deletions(-) create mode 100644 Content.Server/_CP14/Knowledge/CP14KnowledgeAdminUtilitiesSystem.cs rename Content.Server/_CP14/Knowledge/{ => Specials}/CP14AddKnowledgeSpecial.cs (79%) diff --git a/Content.Server/_CP14/Knowledge/CP14KnowledgeAdminUtilitiesSystem.cs b/Content.Server/_CP14/Knowledge/CP14KnowledgeAdminUtilitiesSystem.cs new file mode 100644 index 0000000000..09bccfdb11 --- /dev/null +++ b/Content.Server/_CP14/Knowledge/CP14KnowledgeAdminUtilitiesSystem.cs @@ -0,0 +1,71 @@ +using Content.Shared._CP14.Knowledge.Components; +using Content.Shared._CP14.Knowledge.Prototypes; +using Content.Shared.Administration; +using Content.Shared.Administration.Managers; +using Content.Shared.Database; +using Content.Shared.Verbs; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.Knowledge; + +// TODO: Add UI +public sealed class CP14KnowledgeAdminUtilitiesSystem : EntitySystem +{ + [Dependency] private readonly ISharedAdminManager _admin = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly CP14KnowledgeSystem _knowledge = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(AddKnowledgeAdminVerb); + } + + private void AddKnowledgeAdminVerb(Entity entity, ref GetVerbsEvent args) + { + if (!_admin.HasAdminFlag(args.User, AdminFlags.Admin)) + return; + + // Remove knowledge + foreach (var knowledge in entity.Comp.Knowledge) + { + if (!_prototype.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 = () => + { + _knowledge.TryRemove(entity.Owner, knowledge); + }, + Impact = LogImpact.High, + }); + } + + // Add knowledge + foreach (var knowledge in _prototype.EnumeratePrototypes()) + { + // An entity with CP14AllKnowingComponent can't be taught anything, + // it already knows everything + if (_knowledge.HasKnowledge(entity.Owner, knowledge.ID)) + continue; + + args.Verbs.Add(new Verb + { + Text = $"{Loc.GetString(knowledge.Name)}", + Message = Loc.GetString(knowledge.Desc), + Category = VerbCategory.CP14KnowledgeAdd, + Act = () => + { + _knowledge.TryAdd(entity.Owner, knowledge, true); + }, + Impact = LogImpact.High, + }); + } + } + +} diff --git a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs index 8dda24305e..aae93b131a 100644 --- a/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs +++ b/Content.Server/_CP14/Knowledge/CP14KnowledgeSystem.cs @@ -1,31 +1,23 @@ 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.Events; 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.Mind; using Content.Shared.Verbs; using Robust.Shared.Prototypes; -using Robust.Shared.Random; namespace Content.Server._CP14.Knowledge; -public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem +public sealed 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 IPrototypeManager _prototype = default!; [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; @@ -36,32 +28,21 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem base.Initialize(); SubscribeLocalEvent(AutoAddSkill); - SubscribeLocalEvent>(AddKnowledgeAdminVerb); - SubscribeLocalEvent>(AddKnowledgeLearningVerb); SubscribeLocalEvent(KnowledgeLearnedEvent); + SubscribeLocalEvent>(AddKnowledgeLearningVerb); SubscribeNetworkEvent(OnRequestKnowledgeInfoEvent); } - private void KnowledgeLearnedEvent(Entity ent, ref CP14KnowledgeLearnDoAfterEvent args) - { - if (args.Cancelled || args.Handled) - return; - - args.Handled = true; - - TryLearnKnowledge(ent, args.Knowledge); - } - private void AddKnowledgeLearningVerb(Entity ent, ref GetVerbsEvent args) { var user = args.User; foreach (var knowledge in ent.Comp.Knowledge) { - if (!_proto.TryIndex(knowledge, out var indexedKnowledge)) + if (!_prototype.TryIndex(knowledge, out var indexedKnowledge)) continue; - args.Verbs.Add(new Verb() + args.Verbs.Add(new Verb { Text = $"{Loc.GetString(indexedKnowledge.Name)}", Message = Loc.GetString(indexedKnowledge.Desc), @@ -71,7 +52,7 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, ent.Comp.DoAfter, - new CP14KnowledgeLearnDoAfterEvent() {Knowledge = knowledge}, + new CP14KnowledgeLearnDoAfterEvent { Knowledge = knowledge }, user, ent, ent) @@ -86,172 +67,133 @@ public sealed partial class CP14KnowledgeSystem : SharedCP14KnowledgeSystem } } - private void AddKnowledgeAdminVerb(Entity ent, ref GetVerbsEvent args) + private void KnowledgeLearnedEvent(Entity ent, ref CP14KnowledgeLearnDoAfterEvent args) { - if (!_admin.HasAdminFlag(args.User, AdminFlags.Admin)) + if (args.Cancelled || args.Handled) return; - //Remove knowledge - foreach (var knowledge in ent.Comp.Knowledge) - { - 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()) - { - if (ent.Comp.Knowledge.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, true); - }, - Impact = LogImpact.High, - }); - } + args.Handled = true; + TryAdd(ent.Owner, args.Knowledge); } private void AutoAddSkill(Entity ent, ref MapInitEvent args) { foreach (var knowledge in ent.Comp.Knowledge) { - TryLearnKnowledge(ent, knowledge); + TryAdd(ent.Owner, knowledge); } RemComp(ent, ent.Comp); } - public bool TryLearnKnowledge(EntityUid uid, ProtoId proto, bool force = false, bool silent = false) + public bool TryAdd(Entity entity, ProtoId knowledgeId, bool force = false, bool silent = false) { - if (!TryComp(uid, out var knowledgeStorage)) + if (!Resolve(entity, ref entity.Comp, false)) return false; - if (!_proto.TryIndex(proto, out var indexedKnowledge)) + if (HasKnowledge(entity, knowledgeId)) return false; - if (knowledgeStorage.Knowledge.Contains(proto)) + if (!_prototype.TryIndex(knowledgeId, out var knowledge)) return false; - foreach (var dependency in indexedKnowledge.Dependencies) + MindComponent? mindComponent; + + foreach (var dependencyKnowledgeId in knowledge.Dependencies) { - if (!_proto.TryIndex(dependency, out var indexedDependency)) + if (!_prototype.TryIndex(dependencyKnowledgeId, out var dependencyKnowledge)) 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(); + // If we teach by force - we automatically teach all the basics that are necessary for that skill. + if (force && !TryAdd(entity, dependencyKnowledge, true)) + return false; - sb.Append(Loc.GetString("cp14-cant-learn-knowledge-dependencies", - ("target", Loc.GetString(indexedKnowledge.Desc)))); + var sb = new StringBuilder(); + sb.Append(Loc.GetString("cp14-cant-learn-knowledge-dependencies", ("target", Loc.GetString(knowledge.Desc)))); - //We cant learnt - if (!HasKnowledge(uid, dependency)) - { - passed = false; - sb.Append("\n- " + Loc.GetString(indexedDependency.Desc)); - } + // We cant learnt + if (HasKnowledge(entity, dependencyKnowledge)) + continue; - 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); - } + sb.Append($"\n- {Loc.GetString(dependencyKnowledge.Desc)}"); - return false; - } - } - } + if (silent) + 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)); + if (!_mind.TryGetMind(entity, out _, out mindComponent) || mindComponent.Session is null) + return false; + var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", sb.ToString())); _chat.ChatMessageToOne( ChatChannel.Server, - message, - wrappedMessage2, + sb.ToString(), + wrappedMessage, default, false, - mindComp2.Session.Channel); + mindComponent.Session.Channel); + + return false; } - _adminLogger.Add( - LogType.Mind, - LogImpact.Medium, - $"{EntityManager.ToPrettyString(uid):player} learned new knowledge: {Loc.GetString(indexedKnowledge.Name)}"); - return knowledgeStorage.Knowledge.Add(proto); + if (!entity.Comp.Knowledge.Add(knowledgeId)) + return false; + + _adminLogger.Add(LogType.Mind, LogImpact.Medium, $"{EntityManager.ToPrettyString(entity):player} learned new knowledge: {Loc.GetString(knowledge.Name)}"); + + // TODO: coding on a sleepy head is a bad idea. Remove duplicate variables. >:( + if (silent) + return true; + + if (!_mind.TryGetMind(entity, out _, out mindComponent) || mindComponent.Session is null) + return false; + + var message = Loc.GetString("cp14-learned-new-knowledge", ("name", Loc.GetString(knowledge.Name))); + var wrappedMessage2 = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + + _chat.ChatMessageToOne( + ChatChannel.Server, + message, + wrappedMessage2, + default, + false, + mindComponent.Session.Channel); + + return true; } - public bool TryForgotKnowledge(EntityUid uid, ProtoId proto, bool silent = false) + public bool TryRemove(Entity entity, ProtoId proto, bool silent = false) { - if (!TryComp(uid, out var knowledgeStorage)) + if (!Resolve(entity, ref entity.Comp, false)) return false; - if (!knowledgeStorage.Knowledge.Contains(proto)) + if (!entity.Comp.Knowledge.Contains(proto)) return false; - if (!_proto.TryIndex(proto, out var indexedKnowledge)) + if (!_prototype.TryIndex(proto, out var indexedKnowledge)) return false; - knowledgeStorage.Knowledge.Remove(proto); + if (!entity.Comp.Knowledge.Remove(proto)) + return false; - 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)); + _adminLogger.Add(LogType.Mind, LogImpact.Medium, $"{EntityManager.ToPrettyString(entity):player} forgot knowledge: {Loc.GetString(indexedKnowledge.Name)}"); - _chat.ChatMessageToOne( - ChatChannel.Server, - message, - wrappedMessage, - default, - false, - mindComp.Session.Channel); - } - } + if (silent) + return true; + + if (!_mind.TryGetMind(entity, out _, out var mindComp) || mindComp.Session is null) + return true; + + 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; } diff --git a/Content.Server/_CP14/Knowledge/CP14AddKnowledgeSpecial.cs b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs similarity index 79% rename from Content.Server/_CP14/Knowledge/CP14AddKnowledgeSpecial.cs rename to Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs index 8475ebc246..ada6c14bcb 100644 --- a/Content.Server/_CP14/Knowledge/CP14AddKnowledgeSpecial.cs +++ b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs @@ -1,4 +1,3 @@ -using Content.Shared._CP14.Knowledge; using Content.Shared._CP14.Knowledge.Prototypes; using Content.Shared.Roles; using JetBrains.Annotations; @@ -13,15 +12,16 @@ namespace Content.Server._CP14.Knowledge; public sealed partial class CP14AddKnowledgeSpecial : JobSpecial { [DataField(required: true), ViewVariables(VVAccess.ReadOnly)] - public List> Knowledge = new(); + public List> Knowledge = []; public override void AfterEquip(EntityUid mob) { var entMan = IoCManager.Resolve(); var knowledgeSystem = entMan.System(); + foreach (var knowledge in Knowledge) { - knowledgeSystem.TryLearnKnowledge(mob, knowledge, true, true); + knowledgeSystem.TryAdd(mob, knowledge, true, true); } } } diff --git a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs index 164a16bb98..b87e1cc03d 100644 --- a/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs +++ b/Content.Shared/_CP14/Knowledge/SharedCP14KnowledgeSystem.cs @@ -1,13 +1,7 @@ -using System.Text; using Content.Shared._CP14.Knowledge.Components; using Content.Shared._CP14.Knowledge.Events; using Content.Shared._CP14.Knowledge.Prototypes; -using Content.Shared.DoAfter; -using Content.Shared.Ghost; -using Content.Shared.MagicMirror; -using Content.Shared.Paper; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; namespace Content.Shared._CP14.Knowledge; From ce0ec78e8d09137147585429551dc94b5d8c20ec Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:43:04 +1000 Subject: [PATCH 6/9] fix: CP14AddKnowledgeSpecial namespace --- .../_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs index ada6c14bcb..0c68615cd1 100644 --- a/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs +++ b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs @@ -1,9 +1,8 @@ using Content.Shared._CP14.Knowledge.Prototypes; using Content.Shared.Roles; -using JetBrains.Annotations; using Robust.Shared.Prototypes; -namespace Content.Server._CP14.Knowledge; +namespace Content.Server._CP14.Knowledge.Specials; /// /// a component that can be hung on an entity to immediately teach it some skills From 126535526087178e46ea87d26f8408875bc2e756 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:48:20 +1000 Subject: [PATCH 7/9] fix: CP14AddKnowledgeSpecial usings --- .../_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs index 0c68615cd1..49fccde1d8 100644 --- a/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs +++ b/Content.Server/_CP14/Knowledge/Specials/CP14AddKnowledgeSpecial.cs @@ -1,5 +1,6 @@ using Content.Shared._CP14.Knowledge.Prototypes; using Content.Shared.Roles; +using JetBrains.Annotations; using Robust.Shared.Prototypes; namespace Content.Server._CP14.Knowledge.Specials; From 06697abcdbb688a47ce62c893acd6e5f02ff9775 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:57:04 +1000 Subject: [PATCH 8/9] fix: Books\knowledge.yml --- .../Objects/Bureaucracy/Books/knowledge.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/Books/knowledge.yml b/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/Books/knowledge.yml index aefb8f97b4..d28db036ad 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/Books/knowledge.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/Books/knowledge.yml @@ -6,7 +6,7 @@ suffix: Wood Work components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - WoodWork - type: entity @@ -15,7 +15,7 @@ suffix: Metall Melting components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - MetallMelting - type: entity @@ -24,7 +24,7 @@ suffix: Metall Forging components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - MetallForging - type: entity @@ -33,7 +33,7 @@ suffix: Glasswork components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - Glasswork # T1 @@ -44,7 +44,7 @@ suffix: Clothing Sewing components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - ClothingSewing - type: entity @@ -53,7 +53,7 @@ suffix: Wallpaper Craft components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - WallpaperCraft # T2 @@ -64,6 +64,5 @@ suffix: Advanced Clothing Sewing components: - type: CP14KnowledgeLearningSource - knowledges: + knowledge: - AdvancedClothingSewing - \ No newline at end of file From 1ad686f42e84cd3ce87501010a6e833a7f7fddb7 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:59:33 +1000 Subject: [PATCH 9/9] feature: add to adghost CP14AllKnowing --- Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 0cac98bbe7..040983b93e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -4,6 +4,7 @@ name: admin observer categories: [ HideSpawnMenu ] components: + - type: CP14AllKnowing - type: ContentEye maxZoom: 8.916104, 8.916104 - type: Tag