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; }
}
///