From 4e85539ec6a1d686443d6197c171dac1790dcb64 Mon Sep 17 00:00:00 2001 From: rhailrake <49613070+rhailrake@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:46:20 +0600 Subject: [PATCH] [feat] donate # Conflicts: # Content.Client/Entry/EntryPoint.cs # Content.Client/IoC/ClientContentIoC.cs # Content.Server/Chat/Managers/ChatManager.cs # Content.Server/Entry/EntryPoint.cs # Content.Server/GameTicking/GameTicker.Player.cs # Content.Server/GameTicking/GameTicker.StatusShell.cs # Content.Server/IoC/ServerContentIoC.cs # Content.Shared/Humanoid/HumanoidCharacterAppearance.cs # Content.Shared/Humanoid/Markings/MarkingPrototype.cs # Content.Shared/Preferences/HumanoidCharacterProfile.cs --- Content.Client/Entry/EntryPoint.cs | 12 ++ Content.Client/Humanoid/MarkingPicker.xaml.cs | 17 +++ .../Humanoid/SingleMarkingPicker.xaml.cs | 16 +++ Content.Client/IoC/ClientContentIoC.cs | 11 +- .../Preferences/ClientPreferencesManager.cs | 10 +- .../White/JoinQueue/JoinQueueManager.cs | 26 ++++ Content.Client/White/JoinQueue/QueueGui.xaml | 34 +++++ .../White/JoinQueue/QueueGui.xaml.cs | 36 +++++ Content.Client/White/JoinQueue/QueueState.cs | 53 +++++++ .../White/Sponsors/SponsorsManager.cs | 23 +++ Content.Server/Chat/Managers/ChatManager.cs | 58 +++++--- .../Connection/ConnectionManager.cs | 31 +++- Content.Server/Entry/EntryPoint.cs | 52 ++++--- .../GameTicking/GameTicker.Player.cs | 12 +- .../GameTicking/GameTicker.StatusShell.cs | 7 +- Content.Server/IoC/ServerContentIoC.cs | 7 + .../Managers/ServerPreferencesManager.cs | 19 ++- .../White/JoinQueue/JoinQueueManager.cs | 132 ++++++++++++++++++ .../White/Sponsors/SponsorsManager.cs | 92 ++++++++++++ .../Humanoid/HumanoidCharacterAppearance.cs | 78 ++++++++--- .../Humanoid/Markings/MarkingPrototype.cs | 4 + .../Humanoid/Markings/MarkingsSet.cs | 32 ++++- .../Preferences/HumanoidCharacterProfile.cs | 6 +- .../Preferences/ICharacterProfile.cs | 2 +- .../White/JoinQueue/MsgQueueUpdate.cs | 36 +++++ .../White/Sponsors/MsgSponsorInfo.cs | 62 ++++++++ Content.Shared/White/WhiteCVars.cs | 16 +++ .../Mobs/Customization/Markings/cat_parts.yml | 2 + Resources/Prototypes/Species/human.yml | 6 +- 29 files changed, 809 insertions(+), 83 deletions(-) create mode 100644 Content.Client/White/JoinQueue/JoinQueueManager.cs create mode 100644 Content.Client/White/JoinQueue/QueueGui.xaml create mode 100644 Content.Client/White/JoinQueue/QueueGui.xaml.cs create mode 100644 Content.Client/White/JoinQueue/QueueState.cs create mode 100644 Content.Client/White/Sponsors/SponsorsManager.cs create mode 100644 Content.Server/White/JoinQueue/JoinQueueManager.cs create mode 100644 Content.Server/White/Sponsors/SponsorsManager.cs create mode 100644 Content.Shared/White/JoinQueue/MsgQueueUpdate.cs create mode 100644 Content.Shared/White/Sponsors/MsgSponsorInfo.cs 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 @@ + + + + + + +