From 663cae318197cae4560f0d70cf2d0da56eebfe3b Mon Sep 17 00:00:00 2001 From: rhailrake <49613070+rhailrake@users.noreply.github.com> Date: Fri, 28 Apr 2023 01:06:54 +0600 Subject: [PATCH] [feat] Donate extra slots --- .../Administration/UI/Tabs/ServerTab.xaml | 2 ++ .../Preferences/UI/CharacterSetupGui.xaml.cs | 8 ++++++-- .../Managers/ServerPreferencesManager.cs | 16 +++++++++++----- Content.Shared/White/Sponsors/MsgSponsorInfo.cs | 3 +++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Content.Client/Administration/UI/Tabs/ServerTab.xaml b/Content.Client/Administration/UI/Tabs/ServerTab.xaml index b998405835..13d1969559 100644 --- a/Content.Client/Administration/UI/Tabs/ServerTab.xaml +++ b/Content.Client/Administration/UI/Tabs/ServerTab.xaml @@ -8,5 +8,7 @@ + + diff --git a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs b/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs index f1052086de..afe77441a2 100644 --- a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs +++ b/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs @@ -118,6 +118,7 @@ namespace Content.Client.Preferences.UI Loc.GetString("character-setup-gui-create-new-character-button-tooltip", ("maxCharacters", _preferencesManager.Settings!.MaxCharacterSlots)); + var isDisplayedMaxSlots = false; foreach (var (slot, character) in _preferencesManager.Preferences!.Characters) { if (character is null) @@ -125,6 +126,10 @@ namespace Content.Client.Preferences.UI continue; } + isDisplayedMaxSlots = numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots; + if (isDisplayedMaxSlots) + break; + numberOfFullSlots++; var characterPickerButton = new CharacterPickerButton(_entityManager, _preferencesManager, @@ -145,8 +150,7 @@ namespace Content.Client.Preferences.UI }; } - _createNewCharacterButton.Disabled = - numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots; + _createNewCharacterButton.Disabled = isDisplayedMaxSlots; Characters.AddChild(_createNewCharacterButton); } diff --git a/Content.Server/Preferences/Managers/ServerPreferencesManager.cs b/Content.Server/Preferences/Managers/ServerPreferencesManager.cs index 4cdd0439a6..89cc736801 100644 --- a/Content.Server/Preferences/Managers/ServerPreferencesManager.cs +++ b/Content.Server/Preferences/Managers/ServerPreferencesManager.cs @@ -36,7 +36,7 @@ namespace Content.Server.Preferences.Managers private readonly Dictionary _cachedPlayerPrefs = new(); - private int MaxCharacterSlots => _cfg.GetCVar(CCVars.GameMaxCharacterSlots); + //private int MaxCharacterSlots => _cfg.GetCVar(CCVars.GameMaxCharacterSlots); public void Init() { @@ -57,7 +57,7 @@ namespace Content.Server.Preferences.Managers return; } - if (index < 0 || index >= MaxCharacterSlots) + if (index < 0 || index >= GetMaxUserCharacterSlots(userId)) { return; } @@ -97,7 +97,7 @@ namespace Content.Server.Preferences.Managers return; } - if (slot < 0 || slot >= MaxCharacterSlots) + if (slot < 0 || slot >= GetMaxUserCharacterSlots(userId)) { return; } @@ -133,7 +133,7 @@ namespace Content.Server.Preferences.Managers return; } - if (slot < 0 || slot >= MaxCharacterSlots) + if (slot < 0 || slot >= GetMaxUserCharacterSlots(userId)) { return; } @@ -217,7 +217,7 @@ namespace Content.Server.Preferences.Managers msg.Preferences = prefs; msg.Settings = new GameSettings { - MaxCharacterSlots = MaxCharacterSlots + MaxCharacterSlots = GetMaxUserCharacterSlots(session.UserId) }; _netManager.ServerSendMessage(msg, session.ConnectedClient); } @@ -234,6 +234,12 @@ namespace Content.Server.Preferences.Managers return _cachedPlayerPrefs.ContainsKey(session.UserId); } + private int GetMaxUserCharacterSlots(NetUserId userId) + { + var maxSlots = _cfg.GetCVar(CCVars.GameMaxCharacterSlots); + var extraSlots = _sponsors.TryGetInfo(userId, out var sponsor) ? sponsor.ExtraSlots : 0; + return maxSlots + extraSlots; + } /// /// Tries to get the preferences from the cache diff --git a/Content.Shared/White/Sponsors/MsgSponsorInfo.cs b/Content.Shared/White/Sponsors/MsgSponsorInfo.cs index 4b7d590288..b543ea068a 100644 --- a/Content.Shared/White/Sponsors/MsgSponsorInfo.cs +++ b/Content.Shared/White/Sponsors/MsgSponsorInfo.cs @@ -21,6 +21,9 @@ public sealed class SponsorInfo [JsonPropertyName("allowedMarkings")] public string[] AllowedMarkings { get; set; } = Array.Empty(); + + [JsonPropertyName("extraSlots")] + public int ExtraSlots { get; set; } } ///