diff --git a/Content.Client/Antag/AntagStatusIconSystem.cs b/Content.Client/Antag/AntagStatusIconSystem.cs
new file mode 100644
index 00000000000..3c1c72d03b9
--- /dev/null
+++ b/Content.Client/Antag/AntagStatusIconSystem.cs
@@ -0,0 +1,32 @@
+using Content.Shared.StatusIcon;
+using Content.Shared.StatusIcon.Components;
+using Robust.Shared.Prototypes;
+using Content.Shared.Ghost;
+using Robust.Client.Player;
+
+namespace Content.Client.Antag;
+
+///
+/// Used for assigning specified icons for antags.
+///
+public abstract class AntagStatusIconSystem : SharedStatusIconSystem
+ where T : Component
+{
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+ [Dependency] private readonly IPlayerManager _player = default!;
+
+ ///
+ /// Will check if the local player has the same component as the one who called it and give the status icon.
+ ///
+ /// The status icon that your antag uses
+ /// The GetStatusIcon event.
+ protected virtual void GetStatusIcon(string antagStatusIcon, ref GetStatusIconsEvent args)
+ {
+ var ent = _player.LocalPlayer?.ControlledEntity;
+
+ if (!HasComp(ent) && !HasComp(ent))
+ return;
+
+ args.StatusIcons.Add(_prototype.Index(antagStatusIcon));
+ }
+}
diff --git a/Content.Client/Popups/PopupSystem.cs b/Content.Client/Popups/PopupSystem.cs
index 63b8d7f6df5..1d4ca19ce26 100644
--- a/Content.Client/Popups/PopupSystem.cs
+++ b/Content.Client/Popups/PopupSystem.cs
@@ -150,7 +150,7 @@ public override void PopupEntity(string message, EntityUid uid, Filter filter, b
public override void PopupClient(string message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small)
{
if (_timing.IsFirstTimePredicted)
- PopupEntity(message, uid, recipient);
+ PopupEntity(message, uid, recipient, type);
}
public override void PopupEntity(string message, EntityUid uid, PopupType type = PopupType.Small)
diff --git a/Content.Client/Revolutionary/RevolutionarySystem.cs b/Content.Client/Revolutionary/RevolutionarySystem.cs
new file mode 100644
index 00000000000..0818b14bc04
--- /dev/null
+++ b/Content.Client/Revolutionary/RevolutionarySystem.cs
@@ -0,0 +1,35 @@
+using Content.Shared.Revolutionary.Components;
+using Content.Client.Antag;
+using Content.Shared.StatusIcon.Components;
+
+namespace Content.Client.Revolutionary;
+
+///
+/// Used for the client to get status icons from other revs.
+///
+public sealed class RevolutionarySystem : AntagStatusIconSystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(GetRevIcon);
+ SubscribeLocalEvent(GetHeadRevIcon);
+ }
+
+ ///
+ /// Checks if the person who triggers the GetStatusIcon event is also a Rev or a HeadRev.
+ ///
+ private void GetRevIcon(EntityUid uid, RevolutionaryComponent comp, ref GetStatusIconsEvent args)
+ {
+ if (!HasComp(uid))
+ {
+ GetStatusIcon(comp.RevStatusIcon, ref args);
+ }
+ }
+
+ private void GetHeadRevIcon(EntityUid uid, HeadRevolutionaryComponent comp, ref GetStatusIconsEvent args)
+ {
+ GetStatusIcon(comp.HeadRevStatusIcon, ref args);
+ }
+}
diff --git a/Content.Client/Sericulture/SericultureSystem.cs b/Content.Client/Sericulture/SericultureSystem.cs
new file mode 100644
index 00000000000..6b2ad2fd170
--- /dev/null
+++ b/Content.Client/Sericulture/SericultureSystem.cs
@@ -0,0 +1,8 @@
+using Content.Shared.Sericulture;
+
+namespace Content.Client.Sericulture;
+
+///
+///
+///
+public sealed partial class SericultureSystem : SharedSericultureSystem { }
diff --git a/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs b/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs
index b255ac15a30..fd217bc7e86 100644
--- a/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs
+++ b/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs
@@ -1,7 +1,5 @@
using System.Numerics;
-using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
-using Robust.Shared.Input;
namespace Content.Client.UserInterface.Controls;
@@ -10,8 +8,6 @@ namespace Content.Client.UserInterface.Controls;
///
public sealed class RecordedSplitContainer : SplitContainer
{
- public Action? OnSplitResizeFinish;
-
public double? DesiredSplitCenter;
protected override Vector2 ArrangeOverride(Vector2 finalSize)
@@ -30,24 +26,4 @@ protected override Vector2 ArrangeOverride(Vector2 finalSize)
return base.ArrangeOverride(finalSize);
}
-
- protected override void KeyBindUp(GUIBoundKeyEventArgs args)
- {
- base.KeyBindUp(args);
-
- if (args.Function != EngineKeyFunctions.UIClick)
- {
- return;
- }
-
- if (ChildCount != 2)
- {
- return;
- }
-
- var first = GetChild(0);
- var second = GetChild(1);
-
- OnSplitResizeFinish?.Invoke(first.Size, second.Size);
- }
}
diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs
index 9aef78fd856..41c4a85e7ee 100644
--- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs
+++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs
@@ -24,7 +24,7 @@ public SeparatedChatGameScreen()
SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5);
SetAnchorAndMarginPreset(Alerts, LayoutPreset.CenterRight, margin: 10);
- ScreenContainer.OnSplitResizeFinish += (first, second) =>
+ ScreenContainer.OnSplitResizeFinished += () =>
OnChatResized?.Invoke(new Vector2(ScreenContainer.SplitFraction, 0));
}
diff --git a/Content.Client/Zombies/ZombieSystem.cs b/Content.Client/Zombies/ZombieSystem.cs
index 8816735a2ac..6d0355f6f8d 100644
--- a/Content.Client/Zombies/ZombieSystem.cs
+++ b/Content.Client/Zombies/ZombieSystem.cs
@@ -1,18 +1,14 @@
-using System.Linq;
+using System.Linq;
+using Content.Client.Antag;
using Content.Shared.Humanoid;
-using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Content.Shared.Zombies;
using Robust.Client.GameObjects;
-using Robust.Client.Player;
-using Robust.Shared.Prototypes;
namespace Content.Client.Zombies;
-public sealed class ZombieSystem : SharedZombieSystem
+public sealed class ZombieSystem : AntagStatusIconSystem
{
- [Dependency] private readonly IPlayerManager _player = default!;
- [Dependency] private readonly IPrototypeManager _prototype = default!;
public override void Initialize()
{
@@ -38,9 +34,6 @@ private void OnStartup(EntityUid uid, ZombieComponent component, ComponentStartu
private void OnGetStatusIcon(EntityUid uid, ZombieComponent component, ref GetStatusIconsEvent args)
{
- if (!HasComp(_player.LocalPlayer?.ControlledEntity))
- return;
-
- args.StatusIcons.Add(_prototype.Index(component.ZombieStatusIcon));
+ GetStatusIcon(component.ZombieStatusIcon, ref args);
}
}
diff --git a/Content.IntegrationTests/Pair/TestPair.cs b/Content.IntegrationTests/Pair/TestPair.cs
index bd79c0f86ba..2971573ff28 100644
--- a/Content.IntegrationTests/Pair/TestPair.cs
+++ b/Content.IntegrationTests/Pair/TestPair.cs
@@ -1,7 +1,12 @@
#nullable enable
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using Content.Server.GameTicking;
+using Content.Server.Players;
+using Content.Shared.Mind;
+using Content.Shared.Players;
+using Robust.Server.Player;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Network;
@@ -25,6 +30,9 @@ public sealed partial class TestPair
public RobustIntegrationTest.ServerIntegrationInstance Server { get; private set; } = default!;
public RobustIntegrationTest.ClientIntegrationInstance Client { get; private set; } = default!;
+ public IPlayerSession? Player => (IPlayerSession?) Server.PlayerMan.Sessions.FirstOrDefault();
+ public PlayerData? PlayerData => Player?.Data.ContentData();
+
public PoolTestLogHandler ServerLogHandler { get; private set; } = default!;
public PoolTestLogHandler ClientLogHandler { get; private set; } = default!;
diff --git a/Content.IntegrationTests/Tests/ConfigPresetTests.cs b/Content.IntegrationTests/Tests/ConfigPresetTests.cs
new file mode 100644
index 00000000000..9defdcee99c
--- /dev/null
+++ b/Content.IntegrationTests/Tests/ConfigPresetTests.cs
@@ -0,0 +1,71 @@
+using System.Collections.Generic;
+using System.IO;
+using Content.Server.Entry;
+using Robust.Shared.Configuration;
+using Robust.Shared.ContentPack;
+
+namespace Content.IntegrationTests.Tests;
+
+[TestFixture]
+public sealed class ConfigPresetTests
+{
+ [Test]
+ public async Task TestLoadAll()
+ {
+ var pair = await PoolManager.GetServerClient();
+ var server = pair.Server;
+
+ var resources = server.ResolveDependency();
+ var config = server.ResolveDependency();
+
+ await server.WaitPost(() =>
+ {
+ var originalCVars = new List<(string, object)>();
+ foreach (var cvar in config.GetRegisteredCVars())
+ {
+ var value = config.GetCVar