From a5ffb0930988051984f2cf0ba641092e0663bc70 Mon Sep 17 00:00:00 2001 From: Spatison <137375981+Spatison@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:57:09 +0300 Subject: [PATCH] add: Aspects --- .../GameTicking/Rules/TraitorRuleSystem.cs | 47 +++ .../Holiday/Christmas/RandomGiftSystem.cs | 13 +- .../Components/ImmersiveAspectComponent.cs | 14 + .../Components/LandmineAspectComponent.cs | 11 + .../Components/NothingAspectComponent.cs | 6 + .../Components/PresentAspectComponent.cs | 11 + .../Components/ReflectAspectComponent.cs | 6 + .../Components/TraitorRichAspectComponent.cs | 6 + .../Components/TraitoredAspectComponent.cs | 17 + .../AspectsSystem/Aspects/ImmersiveAspect.cs | 97 +++++ .../AspectsSystem/Aspects/LandmineAspect.cs | 32 ++ .../AspectsSystem/Aspects/NothingAspect.cs | 8 + .../AspectsSystem/Aspects/PresentAspect.cs | 32 ++ .../AspectsSystem/Aspects/ReflectAspect.cs | 25 ++ .../Aspects/TraitorRichAspect.cs | 69 ++++ .../AspectsSystem/Aspects/TraitoredAspect.cs | 132 +++++++ .../AspectsSystem/Base/AspectComponent.cs | 39 ++ .../_White/AspectsSystem/Base/AspectSystem.cs | 135 +++++++ .../AspectsSystem/Commands/AspectCommands.cs | 145 ++++++++ .../AspectsSystem/Managers/AspectManager.cs | 350 ++++++++++++++++++ .../_White/Other/GiftIgnoreComponent.cs | 7 + .../Other/ReflectAspectMarkComponent.cs | 10 + Content.Shared.Database/LogType.cs | 7 +- Content.Shared/_White/CVars.cs | 17 + Resources/Audio/_White/Aspects/accent.ogg | Bin 0 -> 14180 bytes .../Audio/_White/Aspects/attributions.yml | 9 + Resources/Audio/_White/Aspects/palevo.ogg | Bin 0 -> 78931 bytes .../Locale/en-US/_white/aspects/aspects.ftl | 33 ++ .../Entities/Clothing/OuterClothing/armor.yml | 1 + .../Clothing/OuterClothing/hardsuits.yml | 1 + .../Entities/Debugging/debug_sweps.yml | 5 + .../Objects/Devices/station_beacon.yml | 1 + .../Entities/Objects/Misc/implanters.yml | 1 + .../Entities/Objects/Specific/syndicate.yml | 1 + .../Weapons/Guns/Launchers/launchers.yml | 4 + .../Doors/Airlocks/base_assembly.yml | 1 + .../Entities/Structures/base_structure.yml | 1 + .../Prototypes/_White/Aspects/Aspects.yml | 90 +++++ .../_White/Aspects/AspectsEntity.yml | 14 + 39 files changed, 1394 insertions(+), 4 deletions(-) create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/ImmersiveAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/LandmineAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/NothingAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/PresentAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/ReflectAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/TraitorRichAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/Components/TraitoredAspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/ImmersiveAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/LandmineAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/NothingAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/PresentAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/ReflectAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/TraitorRichAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Aspects/TraitoredAspect.cs create mode 100644 Content.Server/_White/AspectsSystem/Base/AspectComponent.cs create mode 100644 Content.Server/_White/AspectsSystem/Base/AspectSystem.cs create mode 100644 Content.Server/_White/AspectsSystem/Commands/AspectCommands.cs create mode 100644 Content.Server/_White/AspectsSystem/Managers/AspectManager.cs create mode 100644 Content.Server/_White/Other/GiftIgnoreComponent.cs create mode 100644 Content.Server/_White/Other/ReflectAspectMarkComponent.cs create mode 100644 Content.Shared/_White/CVars.cs create mode 100644 Resources/Audio/_White/Aspects/accent.ogg create mode 100644 Resources/Audio/_White/Aspects/attributions.yml create mode 100644 Resources/Audio/_White/Aspects/palevo.ogg create mode 100644 Resources/Locale/en-US/_white/aspects/aspects.ftl create mode 100644 Resources/Prototypes/_White/Aspects/Aspects.yml create mode 100644 Resources/Prototypes/_White/Aspects/AspectsEntity.yml diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 1cc5e57704..a2dad48b13 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -17,6 +17,7 @@ using System.Text; using Content.Server.GameTicking.Components; using Content.Server.Traitor.Components; +using Content.Shared.Mobs.Systems; namespace Content.Server.GameTicking.Rules; @@ -31,6 +32,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; [Dependency] private readonly ObjectivesSystem _objectives = default!; + [Dependency] private readonly MobStateSystem _mobStateSystem = default!; // WD EDIT public const int MaxPicks = 20; @@ -74,6 +76,8 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) return false; + component.SelectionStatus = TraitorRuleComponent.SelectionState.Started; // WD EDIT + var briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); if (TryComp(traitor, out var autoTraitorComponent)) @@ -190,4 +194,47 @@ private string GenerateBriefing(string[] codewords, Note[]? uplinkCode) return traitors; } + + // WD EDIT START + public List<(EntityUid Id, MindComponent Mind)> GetAllLivingConnectedTraitors() + { + var traitors = new List<(EntityUid Id, MindComponent Mind)>(); + + var traitorRules = EntityQuery(); + + foreach (var traitorRule in traitorRules) + { + traitors.AddRange(GetLivingConnectedTraitors(traitorRule)); + } + + return traitors; + } + + private List<(EntityUid Id, MindComponent Mind)> GetLivingConnectedTraitors(TraitorRuleComponent traitorRule) + { + var traitors = new List<(EntityUid Id, MindComponent Mind)>(); + + foreach (var traitor in traitorRule.TraitorMinds) + { + if (!TryComp(traitor, out MindComponent? mind)) + continue; + + if (mind.OwnedEntity == null) + continue; + + if (mind.Session == null) + continue; + + if (!_mobStateSystem.IsAlive(mind.OwnedEntity.Value)) + continue; + + if (mind.CurrentEntity != mind.OwnedEntity) + continue; + + traitors.Add((traitor, mind)); + } + + return traitors; + } + // WD EDIT END } diff --git a/Content.Server/Holiday/Christmas/RandomGiftSystem.cs b/Content.Server/Holiday/Christmas/RandomGiftSystem.cs index 9e56d0a493..79439f3830 100644 --- a/Content.Server/Holiday/Christmas/RandomGiftSystem.cs +++ b/Content.Server/Holiday/Christmas/RandomGiftSystem.cs @@ -1,11 +1,13 @@ -using Content.Server.Administration.Logs; +using System.Linq; +using Content.Server._White.Other; +using Content.Server.Administration.Logs; using Content.Server.Hands.Systems; using Content.Shared.Database; using Content.Shared.Examine; +using Content.Shared.Interaction.Components; using Content.Shared.Interaction.Events; using Content.Shared.Item; using Robust.Server.Audio; -using Robust.Server.GameObjects; using Robust.Shared.Map.Components; using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; @@ -90,6 +92,8 @@ private void BuildIndex() var itemCompName = _componentFactory.GetComponentName(typeof(ItemComponent)); var mapGridCompName = _componentFactory.GetComponentName(typeof(MapGridComponent)); var physicsCompName = _componentFactory.GetComponentName(typeof(PhysicsComponent)); + var giftIgnoreCompName = _componentFactory.GetComponentName(typeof(GiftIgnoreComponent)); // WD + var unremovableCompName = _componentFactory.GetComponentName(typeof(UnremoveableComponent)); // WD foreach (var proto in _prototype.EnumeratePrototypes()) { @@ -98,7 +102,10 @@ private void BuildIndex() _possibleGiftsUnsafe.Add(proto.ID); - if (!proto.Components.ContainsKey(itemCompName)) + if (!proto.Components.ContainsKey(itemCompName) || proto.Components.ContainsKey(giftIgnoreCompName) || + proto.Components.ContainsKey(unremovableCompName) || proto.SetSuffix != null && + new[] {"Debug, Admeme, Admin"}.Any(x => + proto.SetSuffix.Contains(x, StringComparison.OrdinalIgnoreCase))) // WD EDIT continue; _possibleGiftsSafe.Add(proto.ID); diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/ImmersiveAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/ImmersiveAspectComponent.cs new file mode 100644 index 0000000000..86436c8b2c --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/ImmersiveAspectComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class ImmersiveAspectComponent : Component +{ + [DataField] + public float EyeModifier = 0.6f; + + [DataField] + public float TelescopeDivisor = 0.15f; + + [DataField] + public float TelescopeLerpAmount = 0.07f; +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/LandmineAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/LandmineAspectComponent.cs new file mode 100644 index 0000000000..9cee3136c4 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/LandmineAspectComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class LandmineAspectComponent : Component +{ + [DataField] + public int Min = 40; + + [DataField] + public int Max = 60; +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/NothingAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/NothingAspectComponent.cs new file mode 100644 index 0000000000..d3e99b12d3 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/NothingAspectComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class NothingAspectComponent : Component +{ +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/PresentAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/PresentAspectComponent.cs new file mode 100644 index 0000000000..1e7acbd4cf --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/PresentAspectComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class PresentAspectComponent : Component +{ + [DataField] + public int Min = 150; + + [DataField] + public int Max = 200; +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/ReflectAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/ReflectAspectComponent.cs new file mode 100644 index 0000000000..892e9000c8 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/ReflectAspectComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class ReflectAspectComponent : Component +{ +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/TraitorRichAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/TraitorRichAspectComponent.cs new file mode 100644 index 0000000000..b75dbf70c6 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/TraitorRichAspectComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class TraitorRichAspectComponent : Component +{ +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/Components/TraitoredAspectComponent.cs b/Content.Server/_White/AspectsSystem/Aspects/Components/TraitoredAspectComponent.cs new file mode 100644 index 0000000000..c45bdd8a29 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/Components/TraitoredAspectComponent.cs @@ -0,0 +1,17 @@ +namespace Content.Server._White.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class TraitoredAspectComponent : Component +{ + [DataField] + public int TimeElapsedForTraitors = 60; + + [DataField] + public int TimeElapsedForAllMin = 300; + + [DataField] + public int TimeElapsedForAllMax = 360; + + [DataField] + public string AnnouncementForTraitorSound = "/Audio/_White/Aspects/palevo.ogg"; +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/ImmersiveAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/ImmersiveAspect.cs new file mode 100644 index 0000000000..088cc18f3f --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/ImmersiveAspect.cs @@ -0,0 +1,97 @@ +using System.Numerics; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server.GameTicking; +using Content.Server.GameTicking.Components; +using Content.Shared._White.Telescope; +using Content.Shared.Humanoid; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class ImmersiveAspect : AspectSystem +{ + + [Dependency] private readonly SharedContentEyeSystem _eye = default!; + [Dependency] private readonly SharedTelescopeSystem _telescope = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnPlayerSpawn); + } + + protected override void Started(EntityUid uid, ImmersiveAspectComponent component, GameRuleComponent gameRule, + GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + OnStarted(component); + } + + private void OnStarted(ImmersiveAspectComponent component) + { + var humans = EntityQuery(); + + foreach (var human in humans) + { + var entity = human.Owner; + + if (!HasComp(entity)) + continue; + + SetEyeZoom(entity, component.EyeModifier); + AddTelescope(entity, component.TelescopeDivisor, component.TelescopeLerpAmount); + } + } + + private void SetEyeZoom(EntityUid human, float modifier) + { + _eye.SetMaxZoom(human, new Vector2(modifier)); + _eye.SetZoom(human, new Vector2(modifier)); + } + + private void AddTelescope(EntityUid human, float divisor, float lerpAmount) + { + var telescope = EnsureComp(human); + + _telescope.SetParameters((human, telescope), divisor, lerpAmount); + } + + private void OnPlayerSpawn(PlayerSpawnCompleteEvent ev) + { + if (!HasComp(ev.Mob)) + return; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ruleEntity, out var immersiveAspect, out var gameRule)) + { + if (!GameTicker.IsGameRuleAdded(ruleEntity, gameRule)) + continue; + + SetEyeZoom(ev.Mob, immersiveAspect.EyeModifier); + AddTelescope(ev.Mob, immersiveAspect.TelescopeDivisor, immersiveAspect.TelescopeLerpAmount); + } + } + + + protected override void Ended(EntityUid uid, ImmersiveAspectComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) + { + base.Ended(uid, component, gameRule, args); + + var humans = EntityQuery(); + + foreach (var human in humans) + { + var entity = human.Owner; + + if (!HasComp(entity)) + continue; + + SetEyeZoom(entity, 1f); + + RemComp(entity); + } + } +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/LandmineAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/LandmineAspect.cs new file mode 100644 index 0000000000..3ac5af1026 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/LandmineAspect.cs @@ -0,0 +1,32 @@ +using Content.Server.GameTicking.Rules.Components; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server.GameTicking.Components; +using Robust.Shared.Random; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class LandmineAspect : AspectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Added(EntityUid uid, LandmineAspectComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) + { + base.Added(uid, component, gameRule, args); + + SpawnMines(component); + } + + private void SpawnMines(LandmineAspectComponent component) + { + var minMines = _random.Next(component.Min, component.Max); + + for (var i = 0; i < minMines; i++) + { + if (!TryFindRandomTile(out _, out _, out _, out var targetCoords)) + break; + + EntityManager.SpawnEntity("LandMineAspectExplosive", targetCoords); + } + } +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/NothingAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/NothingAspect.cs new file mode 100644 index 0000000000..efcb3d5d75 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/NothingAspect.cs @@ -0,0 +1,8 @@ +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class NothingAspect : AspectSystem +{ +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/PresentAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/PresentAspect.cs new file mode 100644 index 0000000000..abefa68c60 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/PresentAspect.cs @@ -0,0 +1,32 @@ +using Content.Server.GameTicking.Rules.Components; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server.GameTicking.Components; +using Robust.Shared.Random; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class PresentAspect : AspectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Added(EntityUid uid, PresentAspectComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) + { + base.Added(uid, component, gameRule, args); + + SpawnPresents(component); + } + + private void SpawnPresents(PresentAspectComponent component) + { + var minPresents = _random.Next(component.Min, component.Max); + + for (var i = 0; i < minPresents; i++) + { + if (!TryFindRandomTile(out _, out _, out _, out var targetCoords)) + break; + + EntityManager.SpawnEntity("PresentRandomUnsafe", targetCoords); + } + } +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/ReflectAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/ReflectAspect.cs new file mode 100644 index 0000000000..c15ec7304e --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/ReflectAspect.cs @@ -0,0 +1,25 @@ +using Content.Server.GameTicking.Rules.Components; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server._White.Other; +using Content.Server.GameTicking.Components; +using Content.Shared.Weapons.Reflect; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class ReflectAspect : AspectSystem +{ + protected override void Started(EntityUid uid, ReflectAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out _)) + { + var reflect = EnsureComp(ent); + reflect.ReflectProb = 1; + reflect.Reflects = ReflectType.Energy | ReflectType.NonEnergy; + } + } + +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/TraitorRichAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/TraitorRichAspect.cs new file mode 100644 index 0000000000..4e6d8e9d5c --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/TraitorRichAspect.cs @@ -0,0 +1,69 @@ +using System.Linq; +using Content.Server.Chat.Managers; +using Content.Server.GameTicking.Rules; +using Content.Server.GameTicking.Rules.Components; +using Content.Server.Store.Components; +using Content.Server.Store.Systems; +using Content.Server.Traitor.Uplink; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server._White.AspectsSystem.Managers; +using Content.Server.GameTicking.Components; +using Content.Shared.FixedPoint; +using Content.Shared.Mind; + +namespace Content.Server._White.AspectsSystem.Aspects; + +public sealed class TraitorRichAspect : AspectSystem +{ + [Dependency] private readonly TraitorRuleSystem _traitorRuleSystem = default!; + [Dependency] private readonly UplinkSystem _uplinkSystem = default!; + [Dependency] private readonly StoreSystem _store = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly AspectManager _aspectManager = default!; + + protected override void Started(EntityUid uid, TraitorRichAspectComponent component, GameRuleComponent gameRule, + GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + if (!HasTraitorGameRule()) + _aspectManager.RunRandomAspect(); + + RewardTraitors(); + } + + private void RewardTraitors() + { + var traitors = _traitorRuleSystem.GetAllLivingConnectedTraitors(); + + foreach (var traitor in traitors) + { + var ent = traitor.Mind.CurrentEntity; + + if (ent == null) + continue; + + var uplink = _uplinkSystem.FindUplinkTarget(ent.Value); + + if (uplink == null || !TryComp(uplink, out StoreComponent? store) || store.AccountOwner != ent || store.Preset != "StorePresetUplink") + continue; + + if (_store.TryAddCurrency(new Dictionary {{UplinkSystem.TelecrystalCurrencyPrototype, 10}}, uplink.Value, store)) + NotifyTraitor(traitor.Mind, _chatManager); + } + } + + public static void NotifyTraitor(MindComponent mind, IChatManager chatManager) + { + if (mind.Session == null) + return; + + chatManager.DispatchServerMessage(mind.Session, Robust.Shared.Localization.Loc.GetString("aspect-traitor-rich-briefing")); + } + + private bool HasTraitorGameRule() + { + return EntityQuery().Any(); + } +} diff --git a/Content.Server/_White/AspectsSystem/Aspects/TraitoredAspect.cs b/Content.Server/_White/AspectsSystem/Aspects/TraitoredAspect.cs new file mode 100644 index 0000000000..f5feee2eb5 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Aspects/TraitoredAspect.cs @@ -0,0 +1,132 @@ +using System.Linq; +using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; +using Content.Server.GameTicking.Rules.Components; +using Content.Server.Mind; +using Content.Server._White.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Server._White.AspectsSystem.Managers; +using Content.Server.GameTicking.Components; +using Content.Server.GameTicking.Rules; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; + +namespace Content.Server._White.AspectsSystem.Aspects +{ + public sealed class TraitoredAspect : AspectSystem + { + [Dependency] private readonly TraitorRuleSystem _traitorRuleSystem = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly AspectManager _aspectManager = default!; + + private TraitorRuleComponent? _traitorRuleComponent; + + private bool _announcedForTraitors; + + private float _time; + private float _timeElapsedForTraitors; + + protected override void Started(EntityUid uid, TraitoredAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + // Just to make sure + ResetValues(); + + _traitorRuleComponent = GetTraitorGameRule(); + if (_traitorRuleComponent == null) + _aspectManager.RunRandomAspect(); + + _timeElapsedForTraitors = _random.Next(component.TimeElapsedForAllMin, component.TimeElapsedForAllMax); + } + + protected override void ActiveTick(EntityUid uid, TraitoredAspectComponent component, GameRuleComponent gameRule, float frameTime) + { + base.ActiveTick(uid, component, gameRule, frameTime); + + if (_traitorRuleComponent?.SelectionStatus != TraitorRuleComponent.SelectionState.Started) + return; + + _time += frameTime; + + if (_time >= component.TimeElapsedForTraitors && !_announcedForTraitors) + { + AnnounceToTraitors(uid, gameRule, component.AnnouncementForTraitorSound); + _announcedForTraitors = true; + } + + if (_time >= _timeElapsedForTraitors) + AnnounceToAll(uid, gameRule); + + } + + protected override void Ended(EntityUid uid, TraitoredAspectComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) + { + base.Ended(uid, component, gameRule, args); + ResetValues(); + } + + #region Helpers + + private void AnnounceToTraitors(EntityUid uid, GameRuleComponent rule, string sound) + { + var traitors = _traitorRuleSystem.GetAllLivingConnectedTraitors(); + + if (traitors.Count == 0) + ForceEndSelf(uid, rule); + + foreach (var traitor in traitors) + { + if (!_mindSystem.TryGetSession(traitor.Mind, out var session)) + continue; + + var mindOwned = traitor.Mind.OwnedEntity; + + if (mindOwned == null) + return; + + _chatManager.DispatchServerMessage(session, Loc.GetString("aspect-traitored-briefing")); + _audio.PlayEntity(sound, mindOwned.Value, mindOwned.Value); + } + } + + private void AnnounceToAll(EntityUid uid, GameRuleComponent rule) + { + var traitors = _traitorRuleSystem.GetAllLivingConnectedTraitors(); + + var msg = Loc.GetString("aspect-traitored-announce"); + + foreach (var traitor in traitors) + { + var name = traitor.Mind.CharacterName; + if (!string.IsNullOrEmpty(name)) + msg += $"\n + {Loc.GetString("aspect-traitored-announce-name", ("name", name))}"; + } + + _chatSystem.DispatchGlobalAnnouncement(msg, Loc.GetString("aspect-traitored-announce-sender"), colorOverride: Color.Aquamarine); + + ForceEndSelf(uid, rule); + } + + private void ResetValues() + { + _announcedForTraitors = false; + _time = 0; + } + + private TraitorRuleComponent? GetTraitorGameRule() + { + if (EntityQuery().Any()) + return EntityQuery().First(); + + return null; + } + + #endregion + + } +} diff --git a/Content.Server/_White/AspectsSystem/Base/AspectComponent.cs b/Content.Server/_White/AspectsSystem/Base/AspectComponent.cs new file mode 100644 index 0000000000..135bc7be69 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Base/AspectComponent.cs @@ -0,0 +1,39 @@ +using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Server._White.AspectsSystem.Base +{ + [RegisterComponent] + public sealed partial class AspectComponent : Component + { + [DataField] + public string? Name; + + [DataField] + public string? Description; + + [DataField] + public string? Requires; + + [DataField] + public float Weight = 1.0f; + + [DataField("forbidden")] + public bool IsForbidden; + + [DataField("hidden")] + public bool IsHidden; + + [DataField] + public SoundSpecifier? StartAudio; + + [DataField] + public SoundSpecifier? EndAudio; + + [DataField] + public TimeSpan StartDelay = TimeSpan.Zero; + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan StartTime; + } +} diff --git a/Content.Server/_White/AspectsSystem/Base/AspectSystem.cs b/Content.Server/_White/AspectsSystem/Base/AspectSystem.cs new file mode 100644 index 0000000000..b16389599f --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Base/AspectSystem.cs @@ -0,0 +1,135 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Server.Administration.Logs; +using Content.Server.Chat.Systems; +using Content.Server.GameTicking.Components; +using Content.Server.GameTicking.Rules; +using Content.Server.Station.Components; +using Content.Shared.Database; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Timing; + +namespace Content.Server._White.AspectsSystem.Base; + +/// +/// Base class for aspect systems. +/// +/// The type of component to which the system is applied. +public abstract class AspectSystem : GameRuleSystem where T : Component +{ + [Dependency] private readonly IAdminLogManager _adminLogManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + protected ISawmill Sawmill = default!; + + public override void Initialize() + { + base.Initialize(); + + Sawmill = Logger.GetSawmill("aspects"); + } + + /// + /// Called every tick when this aspect is running. + /// + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var aspect, out var ruleData)) + { + if (!GameTicker.IsGameRuleAdded(uid, ruleData)) + continue; + + if (!GameTicker.IsGameRuleActive(uid, ruleData) && _timing.CurTime >= aspect.StartTime) + GameTicker.StartGameRule(uid, ruleData); + } + } + + /// + /// Called when an aspect is added to an entity. + /// + protected override void Added(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleAddedEvent args) + { + base.Added(uid, component, gameRule, args); + + if (!TryComp(uid, out var aspect)) + return; + + _adminLogManager.Add(LogType.AspectAnnounced, $"{Loc.GetString("aspect-adminlog-added", ("aspect", ToPrettyString(uid)))}"); + + if (aspect is { Description: not null, IsHidden: false }) + _chatSystem.DispatchGlobalAnnouncement(Robust.Shared.Localization.Loc.GetString(aspect.Description), playSound: false, colorOverride: Color.Aquamarine); + + _audio.PlayGlobal(aspect.StartAudio, Filter.Broadcast(), true); + aspect.StartTime = _timing.CurTime + aspect.StartDelay; + } + + /// + /// Called when an aspect is started. + /// + protected override void Started( + EntityUid uid, + T component, + GameRuleComponent gameRule, + GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + if (!TryComp(uid, out _)) + return; + + _adminLogManager.Add(LogType.AspectStarted, LogImpact.High, $"{Loc.GetString("aspect-adminlog-started", ("aspect", ToPrettyString(uid)))}"); + } + + /// + /// Called when an aspect is ended. + /// + protected override void Ended(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleEndedEvent args) + { + base.Ended(uid, component, gameRule, args); + + if (!TryComp(uid, out var aspect)) + return; + + _adminLogManager.Add(LogType.AspectStopped, $"{Loc.GetString("aspect-adminlog-ended", ("aspect", ToPrettyString(uid)))}"); + + if (aspect is { Name: not null, IsHidden: false }) + _chatSystem.DispatchGlobalAnnouncement($"{Loc.GetString("aspect-announcement-ended", ("aspect", aspect.Name))}", playSound: false, colorOverride: Color.Aquamarine); + + _audio.PlayGlobal(aspect.EndAudio, Filter.Broadcast(), true); + } + +#region Helpers + + /// + /// Forces this aspect to end prematurely. + /// + /// The entity UID on which the aspect is being performed. + /// The game rule component associated with this aspect (optional). + protected void ForceEndSelf(EntityUid uid, GameRuleComponent? component = null) + { + GameTicker.EndGameRule(uid, component); + } + + protected bool TryGetStationGrids( + [NotNullWhen(true)] out EntityUid? targetStation, + [NotNullWhen(true)] out HashSet? grids) + { + if (!TryGetRandomStation(out targetStation)) + { + targetStation = EntityUid.Invalid; + grids = null; + return false; + } + + grids = Comp(targetStation.Value).Grids; + + return grids.Count > 0; + } + +#endregion +} diff --git a/Content.Server/_White/AspectsSystem/Commands/AspectCommands.cs b/Content.Server/_White/AspectsSystem/Commands/AspectCommands.cs new file mode 100644 index 0000000000..4a3eceb29e --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Commands/AspectCommands.cs @@ -0,0 +1,145 @@ +using Content.Server.Administration; +using Content.Server.GameTicking; +using Content.Server._White.AspectsSystem.Managers; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server._White.AspectsSystem.Commands +{ + [AdminCommand(AdminFlags.Fun)] + public sealed class ForceAspectCommand : IConsoleCommand + { + public string Command => "forceaspect"; + public string Description => "Forcibly forces an aspect by its ID."; + public string Help => "forceaspect "; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var ticker = EntitySystem.Get(); + if (ticker.RunLevel != GameRunLevel.PreRoundLobby) + { + shell.WriteLine("This can only be executed while the game is in the pre-round lobby."); + return; + } + + if (args.Length != 1) + { + shell.WriteError("Using: forceaspect "); + return; + } + + var aspectId = args[0]; + var aspectManager = EntitySystem.Get(); + var result = aspectManager.ForceAspect(aspectId); + shell.WriteLine(result); + } + } + + [AdminCommand(AdminFlags.Fun)] + public sealed class DeForceAspectCommand : IConsoleCommand + { + public string Command => "deforceaspect"; + public string Description => "It deforces a forcibly established aspect"; + public string Help => "deforceaspect"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var ticker = EntitySystem.Get(); + if (ticker.RunLevel != GameRunLevel.PreRoundLobby) + { + shell.WriteLine("This can only be executed while the game is in the pre-round lobby."); + return; + } + + var aspectManager = EntitySystem.Get(); + var result = aspectManager.DeForceAspect(); + shell.WriteLine(result); + } + } + + [AdminCommand(AdminFlags.Fun)] + public sealed class GetForcedAspectCommand : IConsoleCommand + { + public string Command => "getforcedaspect"; + public string Description => "Receives information about the enforced aspect."; + public string Help => "getforcedaspect"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var ticker = EntitySystem.Get(); + if (ticker.RunLevel != GameRunLevel.PreRoundLobby) + { + shell.WriteLine("This can only be executed while the game is in the pre-round lobby."); + return; + } + + var aspectManager = EntitySystem.Get(); + var result = aspectManager.GetForcedAspect(); + shell.WriteLine(result); + } + } + + [AdminCommand(AdminFlags.Fun)] + public sealed class ListAspectsCommand : IConsoleCommand + { + public string Command => "listaspects"; + public string Description => "A list of all available aspects."; + public string Help => "listaspects"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var aspectManager = EntitySystem.Get(); + var aspectIds = aspectManager.GetAllAspectIds(); + + if (aspectIds.Count == 0) + { + shell.WriteLine("There are no available aspects."); + } + else + { + shell.WriteLine("List of available aspects:"); + foreach (var aspectId in aspectIds) + { + shell.WriteLine(aspectId); + } + } + } + } + + [AdminCommand(AdminFlags.Fun)] + public sealed class RunAspectCommand : IConsoleCommand + { + public string Command => "runaspect"; + public string Description => "Launches an aspect by its ID."; + public string Help => "runaspect "; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 1) + { + shell.WriteError("Using: runaspect "); + return; + } + + var aspectId = args[0]; + var aspectManager = EntitySystem.Get(); + var result = aspectManager.RunAspect(aspectId); + shell.WriteLine(result); + } + } + + [AdminCommand(AdminFlags.Fun)] + public sealed class RunRandomAspectCommand : IConsoleCommand + { + public string Command => "runrandomaspect"; + public string Description => "Triggers a random aspect."; + public string Help => "runrandomaspect"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var aspectManager = EntitySystem.Get(); + var result = aspectManager.RunRandomAspect(); + shell.WriteLine(result); + } + } +} diff --git a/Content.Server/_White/AspectsSystem/Managers/AspectManager.cs b/Content.Server/_White/AspectsSystem/Managers/AspectManager.cs new file mode 100644 index 0000000000..7bbeb48311 --- /dev/null +++ b/Content.Server/_White/AspectsSystem/Managers/AspectManager.cs @@ -0,0 +1,350 @@ +using Content.Server.GameTicking; +using Content.Server._White.AspectsSystem.Base; +using Content.Shared._White; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server._White.AspectsSystem.Managers +{ + /// + /// Manager for aspects. + /// + public sealed class AspectManager : EntitySystem + { + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + + private ISawmill _sawmill = default!; + + private bool AspectsEnabled { get; set; } + + private double Chance { get; set; } + + private string? ForcedAspect { get; set; } + + private void SetEnabled(bool value) => AspectsEnabled = value; + + private void SetChance(double value) => Chance = value; + + private void SetForcedAspect(string? value) => ForcedAspect = value; + + public override void Initialize() + { + base.Initialize(); + + _sawmill = Logger.GetSawmill("aspects"); + + _cfg.OnValueChanged(WhiteCVars.IsAspectsEnabled, SetEnabled, true); + _cfg.OnValueChanged(WhiteCVars.AspectChance, SetChance, true); + + SubscribeLocalEvent(OnRoundStarted); + } + + #region Handlers + + private void OnRoundStarted(RoundStartedEvent ev) + { + if (!AspectsEnabled) + return; + + if (ForcedAspect != null) + { + RunAspect(ForcedAspect); + + SetForcedAspect(null); + + return; + } + + if (_random.NextDouble() <= Chance) + RunRandomAspect(); + } + + #endregion + + #region PublicApi + + /// + /// Forces a specific aspect by its prototype ID. + /// + /// The prototype ID of the aspect to be forced. + public string ForceAspect(string aspectProtoId) + { + if (!AspectsEnabled) + { + var disabledStr = "Aspects disabled."; + _sawmill.Warning("Someone tried to force aspect when they disabled!"); + return disabledStr; + } + + if (!_prototype.TryIndex(aspectProtoId, out var entityPrototype)) + { + var response = "Aspect not found. Can`t find proto"; + _sawmill.Warning("Someone tried to force invalid Aspect!"); + return response; + } + + if (!entityPrototype.TryGetComponent(out _)) + { + var errStr = $"Aspect with ID '{aspectProtoId}' not found or does not have an AspectComponent!"; + _sawmill.Error(errStr); + return errStr; + } + + if (ForcedAspect == aspectProtoId) + { + var errStr = $"Aspect with ID '{aspectProtoId}' already forced!"; + _sawmill.Error(errStr); + return errStr; + } + + SetForcedAspect(aspectProtoId); + + var str = $"Successfully forced Aspect with ID '{aspectProtoId}'"; + _sawmill.Info(str); + return str; + } + + /// + /// DeForces a ForcedAspect, if any. + /// + public string DeForceAspect() + { + string response; + + if (ForcedAspect != null) + { + response = $"DeForced Aspect : {ForcedAspect}"; + SetForcedAspect(null); + } + else + response = "How to DeForce if no aspect forced, retard.."; + + return response; + } + + + /// + /// Retrieves information about the currently forced aspect, if any. + /// + public string GetForcedAspect() + { + var response = ForcedAspect != null + ? $"Current forced Aspect : {ForcedAspect}" + : "No forced Aspects"; + + return response; + } + + /// + /// Retrieves a list of IDs for all available aspects. + /// + /// A list of IDs for available aspects. + public List GetAllAspectIds() + { + var availableAspects = AllAspects(); + var aspectIds = new List(); + + foreach (var (proto, aspect) in availableAspects) + { + var initialAspectId = proto.ID; + var returnedAspectId = proto.ID; + + if (aspect.Requires != null) + returnedAspectId += $" (Requires: {aspect.Requires})"; + + if (aspect.IsForbidden) + returnedAspectId += " (ShitSpawn)"; + + if (ForcedAspect == initialAspectId) + returnedAspectId += " (Forced)"; + + if (CheckIfAspectAlreadyRunning(initialAspectId)) + returnedAspectId += " (Already Running)"; + + aspectIds.Add(returnedAspectId); + } + + return aspectIds; + } + + /// + /// Runs the specified aspect and adds it as a game rule. + /// + /// The ID of the aspect to run. + public string RunAspect(string aspectId) + { + if (!AspectsEnabled) + { + var disabledStr = "Aspects disabled."; + _sawmill.Warning("Someone tried to run aspects when they disabled!"); + return disabledStr; + } + + if (!_prototype.TryIndex(aspectId, out var entityPrototype)) + { + var response = "Aspect not found. Can`t find proto"; + _sawmill.Warning("Someone tried to run invalid Aspect!"); + return response; + } + + if (!entityPrototype.TryGetComponent(out var aspect)) + { + var errStr = $"Aspect with ID '{aspectId}' not found or does not have an AspectComponent!"; + _sawmill.Error(errStr); + return errStr; + } + + if (CheckIfAspectAlreadyRunning(aspectId)) + { + var alreadyRunningStr = $"Aspect '{aspectId}' is already running!"; + _sawmill.Warning(alreadyRunningStr); + return alreadyRunningStr; + } + + var ent = _gameTicker.AddGameRule(aspectId); + var str = $"Ran {aspect.Name ?? "Unnamed Aspect"} ({ToPrettyString(ent)})!!"; + _sawmill.Info(str); + return str; + } + + /// + /// Runs a random aspect and adds it as a game rule. + /// + public string RunRandomAspect() + { + if (!AspectsEnabled) + { + var disabledStr = "Aspects disabled."; + _sawmill.Warning("Someone tried to run aspects when they disabled!"); + return disabledStr; + } + + var randomAspect = PickRandomAspect(); + + if (randomAspect == null) + { + var errStr = "Oopsie, no valid aspects found! Sorry."; + _sawmill.Error(errStr); + return errStr; + } + + var ent = _gameTicker.AddGameRule(randomAspect); + var str = $"Ran {ToPrettyString(ent)}!!"; + _sawmill.Info(str); + return str; + } + + #endregion + + #region Helpers + + /// + /// Picks a random aspect based on their weight. + /// + /// Allow selecting forbidden aspects. + /// The ID of the selected aspect or null if no aspect was selected. + private string? PickRandomAspect(bool allowForbidden = false) + { + var availableAspects = AllAspects(); + _sawmill.Info($"Picking from {availableAspects.Count} total available aspects"); + return FindAspect(availableAspects, allowForbidden); + } + + /// + /// Finds a suitable aspect from the available aspects. + /// + /// A dictionary of available aspects. + /// Allow selecting forbidden aspects. + /// The ID of the selected aspect or null if no aspect was found. + private string? FindAspect(Dictionary availableAspects, bool allowForbidden = false) + { + if (availableAspects.Count == 0) + { + _sawmill.Warning("No aspects were available to run!"); + return null; + } + + var sumOfWeights = 0; + + foreach (var (_, aspect) in availableAspects) + { + if (!allowForbidden && aspect.IsForbidden) + continue; + + sumOfWeights += (int)aspect.Weight; + } + + sumOfWeights = _random.Next(sumOfWeights); + + foreach (var (proto, aspect) in availableAspects) + { + if (!allowForbidden && aspect.IsForbidden) + continue; + + if (CheckIfAspectAlreadyRunning(proto.ID)) + continue; + + sumOfWeights -= (int)aspect.Weight; + + if (sumOfWeights <= 0) + return proto.ID; + } + + _sawmill.Error("Aspect was not found after weighted pick process!"); + + return null; + } + + + /// + /// Checking if aspect is already running, needed to avoid repeating. + /// + private bool CheckIfAspectAlreadyRunning(string aspectId) + { + var activeRules = _gameTicker.GetActiveGameRules(); + + foreach (var gameRule in activeRules) + { + if (!HasComp(gameRule)) + continue; + + if (!TryComp(gameRule, out var metaDataComponent)) + continue; + + var runningAspectId = metaDataComponent.EntityPrototype?.ID; + + if (runningAspectId == aspectId) + return true; + } + + return false; + } + + /// + /// Retrieves a dictionary of all available aspects from prototypes. + /// + /// A dictionary of available aspects. + private Dictionary AllAspects() + { + var allAspects = new Dictionary(); + foreach (var prototype in _prototype.EnumeratePrototypes()) + { + if (prototype.Abstract) + continue; + + if (!prototype.TryGetComponent(out var aspect)) + continue; + + allAspects.Add(prototype, aspect); + } + + return allAspects; + } + + #endregion + } +} diff --git a/Content.Server/_White/Other/GiftIgnoreComponent.cs b/Content.Server/_White/Other/GiftIgnoreComponent.cs new file mode 100644 index 0000000000..bc579da5fc --- /dev/null +++ b/Content.Server/_White/Other/GiftIgnoreComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server._White.Other; + +[RegisterComponent] +public sealed partial class GiftIgnoreComponent : Component +{ + +} diff --git a/Content.Server/_White/Other/ReflectAspectMarkComponent.cs b/Content.Server/_White/Other/ReflectAspectMarkComponent.cs new file mode 100644 index 0000000000..f98268de0b --- /dev/null +++ b/Content.Server/_White/Other/ReflectAspectMarkComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Server._White.Other; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class ReflectAspectMarkComponent : Component +{ + +} diff --git a/Content.Shared.Database/LogType.cs b/Content.Shared.Database/LogType.cs index ba94b0f373..689d030448 100644 --- a/Content.Shared.Database/LogType.cs +++ b/Content.Shared.Database/LogType.cs @@ -98,5 +98,10 @@ public enum LogType ChatRateLimited = 87, AtmosTemperatureChanged = 88, DeviceNetwork = 89, - StoreRefund = 90 + StoreRefund = 90, + // WD EDIT + AspectAnnounced = 91, + AspectStarted = 92, + AspectStopped = 93, + // WD EDIT } diff --git a/Content.Shared/_White/CVars.cs b/Content.Shared/_White/CVars.cs new file mode 100644 index 0000000000..fe9806eaa9 --- /dev/null +++ b/Content.Shared/_White/CVars.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared._White; + +[CVarDefs] +public sealed class WhiteCVars +{ + #region Aspects + + public static readonly CVarDef IsAspectsEnabled = + CVarDef.Create("aspects.enabled", false, CVar.SERVERONLY); + + public static readonly CVarDef AspectChance = + CVarDef.Create("aspects.chance", 0.1d, CVar.SERVERONLY); + + #endregion +} diff --git a/Resources/Audio/_White/Aspects/accent.ogg b/Resources/Audio/_White/Aspects/accent.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f5ec3cb9fc4b3244107380abd6c408bdb5a2bf4f GIT binary patch literal 14180 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 WrE{=eV$SuSyr*C}2>L{h7W^-#1Q#&? literal 0 HcmV?d00001 diff --git a/Resources/Audio/_White/Aspects/attributions.yml b/Resources/Audio/_White/Aspects/attributions.yml new file mode 100644 index 0000000000..409e24d5da --- /dev/null +++ b/Resources/Audio/_White/Aspects/attributions.yml @@ -0,0 +1,9 @@ +- files: ["accent.ogg"] + license: "CC-BY-NC-SA-4.0" + copyright: "Taken from White Dream" + source: "https://github.com/frosty-dev/ss14-core/blob/master/Resources/Audio/White/Aspects/accent.ogg" + +- files: ["palevo.ogg"] + license: "CC-BY-NC-SA-4.0" + copyright: "Taken from White Dream" + source: "https://github.com/frosty-dev/ss14-core/blob/master/Resources/Audio/White/Aspects/palevo.ogg" diff --git a/Resources/Audio/_White/Aspects/palevo.ogg b/Resources/Audio/_White/Aspects/palevo.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8599a257041ed868709ac22e93b50c0c02cb5001 GIT binary patch literal 78931 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