diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index a9ecb3a725..4e46053bd5 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -21,6 +21,8 @@ using Content.Client.Singularity; using Content.Client.Stylesheets; using Content.Client.Viewport; using Content.Client.Voting; +using Content.Client.White.JoinQueue; +using Content.Client.White.Sponsors; using Content.Shared.Ame; using Content.Shared.Gravity; using Content.Shared.Localizations; @@ -71,6 +73,11 @@ namespace Content.Client.Entry [Dependency] private readonly IReplayLoadManager _replayLoad = default!; [Dependency] private readonly ILogManager _logManager = default!; + //WD-EDIT + [Dependency] private readonly SponsorsManager _sponsorsManager = default!; + [Dependency] private readonly JoinQueueManager _queueManager = default!; + //WD-EDIT + public override void Init() { ClientContentIoC.Register(); @@ -163,6 +170,11 @@ namespace Content.Client.Entry _userInterfaceManager.SetActiveTheme(_configManager.GetCVar(CVars.InterfaceTheme)); _documentParsingManager.Initialize(); + //WD-EDIT + _sponsorsManager.Initialize(); + _queueManager.Initialize(); + //WD-EDIT + _baseClient.RunLevelChanged += (_, args) => { if (args.NewLevel == ClientRunLevel.Initialize) diff --git a/Content.Client/Humanoid/MarkingPicker.xaml.cs b/Content.Client/Humanoid/MarkingPicker.xaml.cs index 43333439f0..5483b1fe7e 100644 --- a/Content.Client/Humanoid/MarkingPicker.xaml.cs +++ b/Content.Client/Humanoid/MarkingPicker.xaml.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Client.White.Sponsors; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; @@ -19,6 +20,10 @@ public sealed partial class MarkingPicker : Control [Dependency] private readonly MarkingManager _markingManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + //WD-EDIT + [Dependency] private readonly SponsorsManager _sponsorsManager = default!; + //WD-EDIT + public Action? OnMarkingAdded; public Action? OnMarkingRemoved; public Action? OnMarkingColorChange; @@ -202,6 +207,18 @@ public sealed partial class MarkingPicker : Control var item = CMarkingsUnused.AddItem($"{GetMarkingName(marking)}", marking.Sprites[0].Frame0()); item.Metadata = marking; + + //WD-EDIT + if (marking.SponsorOnly) + { + item.Disabled = true; + if (_sponsorsManager.TryGetInfo(out var sponsor)) + { + item.Disabled = !sponsor.AllowedMarkings.Contains(marking.ID); + } + } + //WD-EDIT + } CMarkingPoints.Visible = _currentMarkings.PointsLeft(_selectedMarkingCategory) != -1; diff --git a/Content.Client/Humanoid/SingleMarkingPicker.xaml.cs b/Content.Client/Humanoid/SingleMarkingPicker.xaml.cs index be3130a58b..d54672fe06 100644 --- a/Content.Client/Humanoid/SingleMarkingPicker.xaml.cs +++ b/Content.Client/Humanoid/SingleMarkingPicker.xaml.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Client.White.Sponsors; using Content.Shared.Humanoid.Markings; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; @@ -12,6 +13,10 @@ public sealed partial class SingleMarkingPicker : BoxContainer { [Dependency] private readonly MarkingManager _markingManager = default!; + //WD-EDIT + [Dependency] private readonly SponsorsManager _sponsorsManager = default!; + //WD-EDIT + /// /// What happens if a marking is selected. /// It will send the 'slot' (marking index) @@ -191,6 +196,17 @@ public sealed partial class SingleMarkingPicker : BoxContainer var item = MarkingList.AddItem(Loc.GetString($"marking-{id}"), marking.Sprites[0].Frame0()); item.Metadata = marking.ID; + //WD-EDIT + if (marking.SponsorOnly) + { + item.Disabled = true; + if (_sponsorsManager.TryGetInfo(out var sponsor)) + { + item.Disabled = !sponsor.AllowedMarkings.Contains(marking.ID); + } + } + //WD-EDIT + if (_markings[Slot].MarkingId == id) { _ignoreItemSelected = true; diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index 70fe191658..705d06d3ef 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -2,7 +2,6 @@ using Content.Client.Administration.Managers; using Content.Client.Changelog; using Content.Client.Chat.Managers; using Content.Client.Clickable; -using Content.Client.Options; using Content.Client.Eui; using Content.Client.GhostKick; using Content.Client.Info; @@ -15,14 +14,13 @@ using Content.Client.Fullscreen; using Content.Client.Stylesheets; using Content.Client.Viewport; using Content.Client.Voting; -using Content.Shared.Administration; using Content.Shared.Administration.Logs; -using Content.Shared.Module; using Content.Client.Guidebook; using Content.Client.Replay; +using Content.Client.White.JoinQueue; +using Content.Client.White.Sponsors; using Content.Shared.Administration.Managers; - namespace Content.Client.IoC { internal static class ClientContentIoC @@ -49,6 +47,11 @@ namespace Content.Client.IoC IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); + + //WD-EDIT + IoCManager.Register(); + IoCManager.Register(); + //WD-EDIT } } } diff --git a/Content.Client/Preferences/ClientPreferencesManager.cs b/Content.Client/Preferences/ClientPreferencesManager.cs index 34b2c33140..9ede456f6c 100644 --- a/Content.Client/Preferences/ClientPreferencesManager.cs +++ b/Content.Client/Preferences/ClientPreferencesManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Client.White.Sponsors; using Content.Shared.Preferences; using Robust.Client; using Robust.Shared.IoC; @@ -19,6 +20,10 @@ namespace Content.Client.Preferences [Dependency] private readonly IClientNetManager _netManager = default!; [Dependency] private readonly IBaseClient _baseClient = default!; + //WD-EDIT + [Dependency] private readonly SponsorsManager _sponsorsManager = default!; + //WD-EDIT + public event Action? OnServerDataLoaded; public GameSettings Settings { get; private set; } = default!; @@ -60,7 +65,10 @@ namespace Content.Client.Preferences public void UpdateCharacter(ICharacterProfile profile, int slot) { - profile.EnsureValid(); + //WD-EDIT + var allowedMarkings = _sponsorsManager.TryGetInfo(out var sponsor) ? sponsor.AllowedMarkings : new string[]{}; + profile.EnsureValid(allowedMarkings); + //WD-EDIT var characters = new Dictionary(Preferences.Characters) {[slot] = profile}; Preferences = new PlayerPreferences(characters, Preferences.SelectedCharacterIndex, Preferences.AdminOOCColor); var msg = new MsgUpdateCharacter diff --git a/Content.Client/White/JoinQueue/JoinQueueManager.cs b/Content.Client/White/JoinQueue/JoinQueueManager.cs new file mode 100644 index 0000000000..994927f683 --- /dev/null +++ b/Content.Client/White/JoinQueue/JoinQueueManager.cs @@ -0,0 +1,26 @@ +using Content.Shared.White.JoinQueue; +using Robust.Client.State; +using Robust.Shared.Network; + +namespace Content.Client.White.JoinQueue; + +public sealed class JoinQueueManager +{ + [Dependency] private readonly IClientNetManager _netManager = default!; + [Dependency] private readonly IStateManager _stateManager = default!; + + public void Initialize() + { + _netManager.RegisterNetMessage(OnQueueUpdate); + } + + private void OnQueueUpdate(MsgQueueUpdate msg) + { + if (_stateManager.CurrentState is not QueueState) + { + _stateManager.RequestStateChange(); + } + + ((QueueState) _stateManager.CurrentState).OnQueueUpdate(msg); + } +} diff --git a/Content.Client/White/JoinQueue/QueueGui.xaml b/Content.Client/White/JoinQueue/QueueGui.xaml new file mode 100644 index 0000000000..8eb439e90b --- /dev/null +++ b/Content.Client/White/JoinQueue/QueueGui.xaml @@ -0,0 +1,34 @@ + + + + + + +